关于多元线性回归分析——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语言实现机器学习算法的三大理由
Nov 15 Python
pandas object格式转float64格式的方法
Apr 10 Python
对python .txt文件读取及数据处理方法总结
Apr 23 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
Jul 06 Python
python实现在函数图像上添加文字和标注的方法
Jul 08 Python
django商品分类及商品数据建模实例详解
Jan 03 Python
python3连接MySQL8.0的两种方式
Feb 17 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
Oct 15 Python
python将YUV420P文件转PNG图片格式的两种方法
Jan 22 Python
matplotlib之pyplot模块实现添加子图subplot的使用
Apr 25 Python
解决pytorch 损失函数中输入输出不匹配的问题
Jun 05 Python
asyncio异步编程之Task对象详解
Mar 13 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
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
PHP array操作10个小技巧分享
2011/06/23 PHP
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
PHP+Ajax简单get验证操作示例
2019/03/02 PHP
基于Jquery的文字自动截取(提供源代码)
2011/08/09 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
javaScript中with函数用法实例分析
2015/06/08 Javascript
深入学习jQuery Validate表单验证
2016/01/18 Javascript
angular 用拦截器统一处理http请求和响应的方法
2017/06/08 Javascript
微信小程序的生命周期的详解
2017/10/19 Javascript
vue自定义一个v-model的实现代码
2018/06/21 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
[00:48]DOTA2国际邀请赛公开赛报名开始 扫码开启逐梦之旅
2018/06/06 DOTA
Python中encode()方法的使用简介
2015/05/18 Python
Python实现批量将word转html并将html内容发布至网站的方法
2015/07/14 Python
tensorflow使用神经网络实现mnist分类
2018/09/08 Python
OpenCV搞定腾讯滑块验证码的实现代码
2019/05/18 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
2020/01/18 Python
python变量的作用域是什么
2020/05/26 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
HTML5 新表单类型示例代码
2018/03/20 HTML / CSS
资产经营总监岗位职责范文
2013/12/01 职场文书
证券期货行业个人的自我评价
2013/12/26 职场文书
十佳大学生事迹材料
2014/01/29 职场文书
职业生涯规划书范文
2014/03/10 职场文书
大学学生会竞选演讲稿
2014/04/25 职场文书
留守儿童工作方案
2014/06/02 职场文书
小学绿色学校申报材料
2014/08/23 职场文书
质量月活动总结
2014/08/26 职场文书
财务务虚会发言材料
2014/10/20 职场文书
老公保证书
2015/01/17 职场文书
2015年班组工作总结
2015/04/20 职场文书
Python道路车道线检测的实现
2021/06/27 Python
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL
js判断两个数组相等的5种方法
2022/05/06 Javascript
Redis实现分布式锁的五种方法详解
2022/06/14 Redis