关于多元线性回归分析——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 相关文章推荐
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
Feb 24 Python
关于你不想知道的所有Python3 unicode特性
Nov 28 Python
使用Python的Tornado框架实现一个一对一聊天的程序
Apr 25 Python
Python使用turtule画五角星的方法
Jul 09 Python
Python实现将xml导入至excel
Nov 20 Python
python访问mysql数据库的实现方法(2则示例)
Jan 06 Python
python实现字典(dict)和字符串(string)的相互转换方法
Mar 01 Python
Python通过future处理并发问题
Oct 17 Python
python3实现单目标粒子群算法
Nov 14 Python
用python介绍4种常用的单链表翻转的方法小结
Feb 24 Python
详解Python中list[::-1]的几种用法
Nov 16 Python
Python OpenCV实现图像模板匹配详解
Apr 07 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与MySQL交互使用详解
2006/10/09 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
2014/07/24 PHP
php  单例模式详细介绍及实现源码
2016/11/05 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
Laravel框架实现多数据库连接操作详解
2019/07/12 PHP
js特效,页面下雪的小例子
2013/06/17 Javascript
jquery三个关闭弹出层的小示例
2013/11/05 Javascript
用javascript为页面添加天气显示实现思路及代码
2013/12/02 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
详解AngularJS ui-sref的简单使用
2017/04/24 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
JS中的三个循环小结
2017/06/20 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
2018/04/20 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
Nodejs实现WebSocket代码实例
2020/05/19 NodeJs
[01:33]DOTA2上海特级锦标赛 LIQUID战队完整宣传片
2016/03/16 DOTA
python list使用示例 list中找连续的数字
2014/01/27 Python
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
Python pip配置国内源的方法
2020/02/14 Python
Python中的wordcloud库安装问题及解决方法
2020/05/27 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
pytorch掉坑记录:model.eval的作用说明
2020/06/23 Python
十一酒店活动方案
2014/02/20 职场文书
房务中心文员岗位职责
2014/04/16 职场文书
企业文明单位申报材料
2014/05/16 职场文书
公司员工活动策划方案
2014/08/20 职场文书
乡镇领导班子四风对照检查材料
2014/09/27 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
酒店收银员岗位职责
2015/04/07 职场文书
2015秋季田径运动会广播稿
2015/08/19 职场文书
2019思想汇报范文
2019/05/21 职场文书
sql中mod()函数取余数的用法
2021/05/29 SQL Server
Python import模块的缓存问题解决方案
2021/06/02 Python
AJAX实现省市县三级联动效果
2021/10/16 Javascript
详解Spring Security中的HttpBasic登录验证模式
2022/03/17 Java/Android