关于多元线性回归分析——Python&SPSS


Posted in Python onFebruary 24, 2020

原始数据在这里

1.观察数据

首先,用Pandas打开数据,并进行观察。

import numpy 
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
 
data = pd.read_csv('Folds5x2_pp.csv')
data.head()

会看到数据如下所示:

关于多元线性回归分析——Python&SPSS

这份数据代表了一个循环发电厂,每个数据有5列,分别是:AT(温度), V(压力), AP(湿度), RH(压强), PE(输出电力)。我们不用纠结于每项具体的意思。

我们的问题是得到一个线性的关系,对应PE是样本输出,而AT/V/AP/RH这4个是样本特征, 机器学习的目的就是得到一个线性回归模型,即: PE=θ0+θ1∗AT+θ2∗V+θ3∗AP+θ4∗RH 而需要学习的,就是θ0,θ1,θ2,θ3,θ4这5个参数。

接下来对数据进行归一化处理:

data = (data - data.mean())/data.std()

因为回归线的截距θ0是不受样本特征影响的,因此我们在此可以设立一个X0=1,使得回归模型为:

PE=θ0*X0+θ1∗AT+θ2∗V+θ3∗AP+θ4∗RH

将方程向量化可得:

PE = hθ(x) = θx (θ应转置)

2.线性回归

在线性回归中,首先应建立 cost function,当 cost function 的值最小时所取得θ值为所求的θ。

在线性回归中,Cost function如下所示:

关于多元线性回归分析——Python&SPSS

因此,可以在Python中建立函数求损失方程:

def CostFunction(X,y,theta):
  inner = np.power((X*theta.T)-y,2)
  return np.sum(inner)/(2*len(X))

然后,设初始θ为=[0,0,0,0,0],可得到最初的J(θ)值为0.49994774247491858,代码如下所示

col = data.shape[1]
X = data.iloc[:,0:col-1]
y = data.iloc[:,col-1:col]
X = np.matrix(X.values)
y = np.matrix(y.values)
theta = np.matrix(np.array([0,0,0,0,0]))
temp = np.matrix(np.zeros(theta.shape))
CostFunction(X,y,theta)

接下来,有两种方法可以使用。1.梯度下降法(gradient descent)和 2.最小二乘法(normal equation)。在此我们使用梯度下降法来求解。

梯度下降法是求得J对θ的偏导数,通过设置步长,迭代使J(θ)逐步下降,从而求得局部最优解。

公式如下所示:

关于多元线性回归分析——Python&SPSS

j:特征编号

m:样本编号

我们可以在Python中写出计算迭代后的θ和J(θ)

def gradientDescent(X,y,theta,alpha,iters):
  temp = np.matrix(np.zeros(theta.shape))
  parameters = int(theta.ravel().shape[1])
  cost = np.zeros(iters)
  for i in range(iters):
    error = (X*theta.T)-y
    
    for j in range(parameters):
      term = np.multiply(error,X[:,j])
      temp[0,j] = theta[0,j] - (alpha/len(X))*np.sum(term)
      
    theta = temp
    cost[i] = CostFunction(X,y,theta)
    
  return theta,cost

在此,我设置初始的α为0.1,可求得迭代1000次后θ0,θ1,θ2,θ3,θ4的值分别是:

-5.22080706e-14,-8.63485491e-01,-1.74182863e-01,2.16058120e-02,-1.35205248e-01

此时 J(θ)的值为0.0379648。

通过,可视化J(θ)和迭代次数可以发现,J(θ)收敛的非常快。

关于多元线性回归分析——Python&SPSS

画图观察预测值和损失值,距离直线约近说明损失越小:

predicted = X*g.T
predicted = predicted.flatten().A[0]
y_f= y.flatten().A[0]
fig, ax = plt.subplots()
ax.scatter(y_f,predicted)
ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)
ax.set_xlabel('Measured')
ax.set_ylabel('Predicted')
plt.show()

关于多元线性回归分析——Python&SPSS

3.sckit-learn

因为J(θ)收敛的太快了…所以我又用sckit-learn和SPSS验证了一下。

先看sckit-learn,在sklearn中,线性回归是使用的最小二乘法而不是梯度下降法,用起来也十分的简单。

代码如下:

from sklearn import linear_model 
model = linear_model.LinearRegression() 
model.fit(X, y)

打印出θ值后发现和梯度下降法算出来的相差无几,θ0,θ1,θ2,θ3,θ4的值分别是:

0,-0.86350078,-0.17417154,0.02160293,-0.13521023

4.SPSS

在看看SPSS

同样先将数据标准化后进行线

关于多元线性回归分析——Python&SPSS

然后进行线性回归分析得到结果:

关于多元线性回归分析——Python&SPSS

嘛…和前面两种方法的结果也差不多…就这样吧。

以上这篇关于多元线性回归分析——Python&SPSS就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的ORM框架SQLAlchemy入门教程
Apr 28 Python
Python中处理时间的几种方法小结
Apr 09 Python
Python实用日期时间处理方法汇总
May 09 Python
python使用标准库根据进程名如何获取进程的pid详解
Oct 31 Python
python2与python3的print及字符串格式化小结
Nov 30 Python
Python爬虫之UserAgent的使用实例
Feb 21 Python
python3文件复制、延迟文件复制任务的实现方法
Sep 02 Python
Python拆分大型CSV文件代码实例
Oct 07 Python
Python 实现数组相减示例
Dec 27 Python
浅析Python 字符编码与文件处理
Sep 24 Python
python 生成正态分布数据,并绘图和解析
Dec 21 Python
python数字图像处理之图像的批量处理
Jun 28 Python
使用 pytorch 创建神经网络拟合sin函数的实现
Feb 24 #Python
sklearn+python:线性回归案例
Feb 24 #Python
深入理解Tensorflow中的masking和padding
Feb 24 #Python
K最近邻算法(KNN)---sklearn+python实现方式
Feb 24 #Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
Feb 24 #Python
Python enumerate内置库用法解析
Feb 24 #Python
Python模块/包/库安装的六种方法及区别
Feb 24 #Python
You might like
php读取xml实例代码
2010/01/28 PHP
php中理解print EOT分界符和echo EOT的用法区别小结
2010/02/21 PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
2011/11/02 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
jQuery 学习第七课 扩展jQuery的功能 插件开发
2010/05/17 Javascript
JS编程小常识很有用
2012/11/26 Javascript
javascript加号"+"的二义性说明
2013/03/04 Javascript
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
2014/08/16 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
2015/11/04 Javascript
基于canvas实现的绚丽圆圈效果完整实例
2016/01/26 Javascript
js获取腾讯视频ID的方法
2016/10/03 Javascript
ionic2 tabs使用 Modal底部tab弹出框
2016/12/30 Javascript
微信小程序 Toast自定义实例详解
2017/01/20 Javascript
详解Angular之constructor和ngOnInit差异及适用场景
2017/06/22 Javascript
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
利用原生的JavaScript实现简单拼图游戏
2018/11/18 Javascript
node.js 基于 STMP 协议和 EWS 协议发送邮件
2021/02/14 Javascript
Python中用memcached来减少数据库查询次数的教程
2015/04/07 Python
python3实现点餐系统
2019/01/24 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
2019/08/29 Python
flask框架json数据的拿取和返回操作示例
2019/11/28 Python
python+Selenium自动化测试——输入,点击操作
2020/03/06 Python
python实现Pyecharts实现动态地图(Map、Geo)
2020/03/25 Python
浅谈python 调用open()打开文件时路径出错的原因
2020/06/05 Python
HTML5 CSS3给网站设计带来出色效果
2009/07/16 HTML / CSS
会计专业应届生求职信
2013/11/24 职场文书
党员自我评价分享
2013/12/13 职场文书
热门专业求职信
2014/05/24 职场文书
促销活动总结模板
2014/07/01 职场文书
关于安全的广播稿
2014/10/23 职场文书
同意迁入证明模板
2014/10/26 职场文书
2014收银员工作总结范文
2014/12/16 职场文书
违规违纪检讨书范文
2015/05/06 职场文书
给男朋友的道歉短信
2015/05/12 职场文书
浅谈mysql执行过程以及顺序
2021/05/12 MySQL
Java并发编程之详解CyclicBarrier线程同步
2021/06/23 Java/Android