关于多元线性回归分析——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的Django框架中的模版相关知识
Jul 15 Python
win10下Python3.6安装、配置以及pip安装包教程
Oct 01 Python
Python通过future处理并发问题
Oct 17 Python
Python内置模块turtle绘图详解
Dec 09 Python
Python中生成器和迭代器的区别详解
Feb 10 Python
python遍历小写英文字母的方法
Jan 02 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
Jul 22 Python
学python安装的软件总结
Oct 12 Python
Python for循环通过序列索引迭代过程解析
Feb 07 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
Jul 13 Python
python实现mask矩阵示例(根据列表所给元素)
Jul 30 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
Feb 03 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(6) 面向对象
2010/02/16 PHP
PHP 全角转半角实现代码
2010/05/16 PHP
php木马webshell扫描器代码
2012/01/25 PHP
浅谈php命令行用法
2015/02/04 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
php实现断点续传大文件示例代码
2020/06/19 PHP
基于php伪静态的实现方法解析
2020/07/31 PHP
javascript中数组的冒泡排序使用示例
2013/12/18 Javascript
toggle()隐藏问题的解决方法
2014/02/17 Javascript
js 模式窗口(模式对话框和非模式对话框)的使用介绍
2014/07/17 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
2014/09/10 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
2015/09/06 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
2016/02/19 Javascript
layui复选框的全选与取消实现方法
2019/09/02 Javascript
Element图表初始大小及窗口自适应实现
2020/07/10 Javascript
vue axios封装httpjs,接口公用配置拦截操作
2020/08/11 Javascript
vue 将多个过滤器封装到一个文件中的代码详解
2020/09/05 Javascript
利用python获得时间的实例说明
2013/03/25 Python
python实现dnspod自动更新dns解析的方法
2014/02/14 Python
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
Python实现的递归神经网络简单示例
2017/08/11 Python
python中学习K-Means和图片压缩
2017/11/20 Python
Python实现的排列组合、破解密码算法示例
2019/04/12 Python
python 列表转为字典的两个小方法(小结)
2019/06/28 Python
Pyecharts地图显示不完成问题解决方案
2020/05/11 Python
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
俄罗斯最大的隐形眼镜销售网站:Ochkov.Net
2021/02/07 全球购物
银行门卫岗位职责
2013/12/29 职场文书
大学生优秀团员事迹材料
2014/01/30 职场文书
期末自我鉴定
2014/02/02 职场文书
公司担保书范文
2014/05/21 职场文书
小学生常见病防治方案
2014/06/06 职场文书
班级团队活动方案
2014/08/14 职场文书
部门2014年度工作总结
2014/11/12 职场文书
挂靠协议书
2015/01/27 职场文书
docker compose 部署 golang 的 Athens 私有代理问题
2022/04/28 Servers