关于多元线性回归分析——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根据路径导入模块的方法
Sep 30 Python
python获取标准北京时间的方法
Mar 24 Python
Python使用正则匹配实现抓图代码分享
Apr 02 Python
在DigitalOcean的服务器上部署flaskblog应用
Dec 19 Python
利用python微信库itchat实现微信自动回复功能
May 18 Python
Python之py2exe打包工具详解
Jun 14 Python
对python中xlsx,csv以及json文件的相互转化方法详解
Dec 25 Python
详解Python利用random生成一个列表内的随机数
Aug 21 Python
Python字典中的值为列表或字典的构造实例
Dec 16 Python
Python谱减法语音降噪实例
Dec 18 Python
Python threading.local代码实例及原理解析
Mar 16 Python
python中封包建立过程实例
Feb 18 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的计数器程序
2006/10/09 PHP
20个2014年最优秀的PHP框架回顾
2014/10/22 PHP
PHP使用Redis替代文件存储Session的方法
2017/02/15 PHP
php面试中关于面向对象的相关问题
2019/02/13 PHP
JS TextArea字符串长度限制代码集合
2012/10/31 Javascript
ExtJS[Desktop]实现图标换行示例代码
2013/11/17 Javascript
javascript去除字符串中所有标点符号和提取纯文本的正则
2014/06/07 Javascript
vue中实现左右联动的效果
2018/06/22 Javascript
vue打包相关细节整理(小结)
2018/09/28 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
2019/03/19 Javascript
JavaScript Event Loop相关原理解析
2020/06/10 Javascript
js动态添加带圆圈序号列表的实例代码
2021/02/18 Javascript
[51:27]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
python实现随机密码字典生成器示例
2014/04/09 Python
python在指定目录下查找gif文件的方法
2015/05/04 Python
使用pdb模块调试Python程序实例
2015/06/02 Python
pandas.loc 选取指定列进行操作的实例
2018/05/18 Python
python实现随机漫步方法和原理
2019/06/10 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
2019/06/25 Python
使用python telnetlib批量备份交换机配置的方法
2019/07/25 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
pygame实现俄罗斯方块游戏(基础篇1)
2019/10/29 Python
Python如何在bool函数中取值
2020/09/21 Python
5分钟快速掌握Python定时任务框架的实现
2021/01/26 Python
施华洛世奇德国官网:SWAROVSKI德国
2017/02/01 全球购物
俄罗斯连接商品和买家的在线平台:goods.ru
2020/11/30 全球购物
学习雷锋精神心得体会范文
2014/03/12 职场文书
素质教育标语
2014/06/27 职场文书
纪委书记群众路线整改措施思想汇报
2014/10/09 职场文书
2014年药店工作总结
2014/11/20 职场文书
护士先进个人总结
2015/02/13 职场文书
老公写给老婆的检讨书
2015/05/06 职场文书
2016年幼儿园教师师德承诺书
2016/03/25 职场文书
OpenCV-Python实现轮廓的特征值
2021/06/09 Python
用php如何解决大文件分片上传问题
2021/07/07 PHP
Python+OpenCV实现在图像上绘制矩形
2022/03/21 Python