关于多元线性回归分析——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判断端口是否打开的实现代码
Feb 10 Python
Python抓取淘宝下拉框关键词的方法
Jul 08 Python
Python中使用asyncio 封装文件读写
Sep 11 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
Dec 21 Python
Python中extend和append的区别讲解
Jan 24 Python
使用Python快速制作可视化报表的方法
Feb 03 Python
在Python 字典中一键对应多个值的实例
Feb 03 Python
Python3字符串encode与decode的讲解
Apr 02 Python
详解python实现小波变换的一个简单例子
Jul 18 Python
python之生产者消费者模型实现详解
Jul 27 Python
在Python中使用MongoEngine操作数据库教程实例
Dec 03 Python
Django REST framework 限流功能的使用
Jun 24 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者的疑难问答(2)
2006/10/09 PHP
dedecms中常见问题修改方法总结
2007/03/21 PHP
php session劫持和防范的方法
2013/11/12 PHP
php动态变量定义及使用
2015/06/10 PHP
PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结
2015/09/14 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
javascript dom 操作详解 js加强
2009/07/13 Javascript
JQuery的html(data)方法与<script>脚本块的解决方法
2010/03/09 Javascript
nodejs开发环境配置与使用
2014/11/17 NodeJs
原生javaScript实现图片延时加载的方法
2014/12/22 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
vue Render中slots的使用的实例代码
2017/07/19 Javascript
vue组件(全局,局部,动态加载组件)
2018/09/02 Javascript
Element input树型下拉框的实现代码
2018/12/21 Javascript
JavaScript常用事件介绍
2019/01/21 Javascript
jQuery实现ajax的嵌套请求案例分析
2019/02/16 jQuery
Nodejs异步流程框架async的方法
2019/06/07 NodeJs
微信小程序引入VANT组件的方法步骤
2019/09/19 Javascript
Python 中迭代器与生成器实例详解
2017/03/29 Python
简单实现Python爬取网络图片
2018/04/01 Python
解决Python2.7中IDLE启动没有反应的问题
2018/11/30 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
python图形开发GUI库pyqt5的基本使用方法详解
2020/02/14 Python
Python图像处理库PIL的ImageFilter模块使用介绍
2020/02/26 Python
Python基于xlrd模块处理合并单元格
2020/07/28 Python
H5 meta小结(前端必看篇)
2016/08/24 HTML / CSS
出门问问全球官方商城:Tichome音箱和TicWatch智能手表
2017/12/02 全球购物
世界上最大的家庭自动化公司:Smarthome
2017/12/20 全球购物
会计电算化个人自我评价
2013/11/17 职场文书
小区停车场管理制度
2014/01/27 职场文书
致200米运动员广播稿
2014/02/06 职场文书
职业生涯规划书前言
2014/04/15 职场文书
五好关工委申报材料
2014/05/31 职场文书
校长个人总结
2015/03/03 职场文书
公司财务部岗位职责
2015/04/14 职场文书
vue 给数组添加新对象并赋值
2022/04/20 Vue.js