Python实现一元及多元线性回归
Python实现线性回归
- 实现目标
- 实验数据
- 结果分析
- 数据集1下的回归分析
- 数据集2下的回归分析
- 源代码
实现目标
1.实现一元(或多元)线性回归
a. 根据对客观现象的定性认识初步判断现象之间的相关性
b. 绘制散点图
c. 进行回归分析,拟合出回归模型
d. 对回归模型进行检验—计算相关系数、异方差检验(散点图)
e. 进行回归预测
2实现离差形式的一元线性回归
实验数据
数据如下图,该数据为通过中国气象局数据库统计而来的2019年厦门市日平均气温数据(Data为1时日期为1月1日),该数据的散点图与折线图分别如图1图2所示。从图中可以看出厦门为典型的北半球夏季高温冬季低温气候,且存在波动。
此外,为了方便进行一次线性回归及其相关操作,我取出一半数据(Data值为0至180)的数据进行线性回归模型的构建,如图3
结果分析
数据集1下的回归分析
最终实验结果如图4所示,其中第一行表示一次回归模型的拟合函数,如图5所示,很明显的可以看出误差极大,因此我们对其进行二次回归
第二行结果为为此回归拟合函数,如图6所示,可以看出拟合效果较好
同时对一次线性回归计算得出相关系数为0.7861736064961535,u2-x散点图即其回归如图所示
通过离差形式的线性回归拟合模型如下
数据集2下的回归分析
最终实验结果如图10所示,其余结果(图11-图15)解释同3.1.1
源代码
数据下载点这里:(data1)(data2)
import xlrd
from pylab import *
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
mpl.rcParams['font.sans-serif'] = ['SimHei']def readFire(dataFir):dataN=[]dataX=[]dataY=[]table = dataFir.sheet_by_index(0) for i in range(1,table.nrows): line=table.row_values(i) dataN.append(line) dataN=np.array(dataN) dataX = dataN[:,0]dataY = dataN[:,4]return dataX,dataYdef Visual(x, y):plt.title('折线图')plt.plot(x, y)plt.xlabel("Date")plt.ylabel("Temperature(°C)")plt.show()plt.title('散点图')plt.scatter(x, y,s=10,color="b")plt.xlabel("Date")plt.ylabel("Temperature(°C)")plt.show()def Regression1(x,y):n=len(x)xx=0xy=0xAvg=0yAvg=0for i in range(n):xy = xy + x[i]*y[i]xx = xx + x[i]*x[i]xAvg = xAvg + x[i]yAvg = yAvg + y[i]xAvg=xAvg/nyAvg=yAvg/nb = (xy-n*xAvg*yAvg)/(xx-n*xAvg*xAvg) a = yAvg - b*xAvgprint('一次回归方程为:y=',b,'* x +',a)plt.title('一次线性回归')plt.scatter(x,y,s=10,color="b") x=np.linspace(0,n,n)yp=b*x+aplt.plot(x,yp,color="r")plt.show()def Regression2(x, y):X = x.reshape(-1,1)X2 = np.hstack([X**2,X]) lr = LinearRegression()lr.fit(X2,y)print('二次回归方程为:y=',lr.coef_[0],'x^2 *',lr.coef_[1],'x +',lr.intercept_)yp = lr.predict(X2)plt.title('二次线性回归')plt.scatter(x,y,s=10,color="b")plt.plot(x,yp,color='r')plt.show()XGXS(x,y,yp)def XGXS(x,y,yp):n=len(x)y1=0y2=0yAvg=0for i in range(n):yAvg = yAvg + y[i]yA=yAvg/nfor i in range(n):y1 = y1+(yp[i]-yA)**2y2 = y2+(y[i]-yA)**2u2 = (y-yp)**2plt.title('u2-x散点图')plt.scatter(x,u2,s=10,color="b")plt.show()print('回归模型检验:')R=pow(y1/y2,.5)print('相关系数为:',R)Regression1(x,u2)def LiCha(x,y):n=len(x)xMat = np.mat(x).TyMat = np.mat(y)xTx = xMat.T * xMatws = xTx.I * xMat.T * yMat.Tx=np.linspace(0,n,n)yp = xMat * wsprint('离差回归方程为:y=',ws,'* x ')plt.title('离差形式线性回归')plt.scatter(x,y,s=10,color="b") plt.plot(x,yp,color="r")plt.show()if __name__ == '__main__':dataFir = xlrd.open_workbook("data2.xlsx") dataX,dataY = readFire(dataFir)#可视化数据Visual(dataX, dataY)#一次线性回归Regression1(dataX,dataY)#二次线性回归Regression2(dataX, dataY)#离差形式线性回归LiCha(dataX,dataY)
Python实现一元及多元线性回归相关推荐
- python多元线性回归实例_利用Python进行数据分析之多元线性回归案例
线性回归模型属于经典的统计学模型,该模型的应用场景是根据已知的变量(自变量)来预测某个连续的数值变量(因变量).例如,餐厅根据每天的营业数据(包括菜谱价格.就餐人数.预定人数.特价菜折扣等)预测就餐规 ...
- python多元非线性回归_利用Python进行数据分析之多元线性回归案例
线性回归模型属于经典的统计学模型,该模型的应用场景是根据已知的变量(自变量)来预测某个连续的数值变量(因变量).例如,餐厅根据每天的营业数据(包括菜谱价格.就餐人数.预定人数.特价菜折扣等)预测就餐规 ...
- python梯度下降法实现线性回归_梯度下降法的python代码实现(多元线性回归)
梯度下降法的python代码实现(多元线性回归最小化损失函数) 1.梯度下降法主要用来最小化损失函数,是一种比较常用的最优化方法,其具体包含了以下两种不同的方式:批量梯度下降法(沿着梯度变化最快的方向 ...
- 多元线性回归数据集_TensorFlow学习Program1——13.实现一元、多元线性回归(基于房价数据集)...
本节将针对波士顿房价数据集的房间数量(RM)采用简单一元线性回归,目标是预测在最后一列(MEDV)给出的房价.波士顿房价数据集可从http://lib.stat.cmu.edu/datasets/bo ...
- Python数据分析案例-利用多元线性回归与随机森林回归算法预测笔记本新品价格
1.前言 目的: 本文通过多元线性回归与随机森林算法预测笔记本新品的发售价 工具: 语言:Python 3.8 软件:Jupyter Notebook 库:pandas.numpy.matplotli ...
- 机器学习入门 ————》 一元及多元线性回归
1.线性回归(line Regression) 回归,指研究一组随机变量(Y1 ,Y2 ,-,Yi)和另一组(X1,X2,-,Xk)变量之间关系的统计分析方法,又称多重回归分析.通常Y1,Y2,-,Y ...
- java算多元回归方程_java多元线性回归算法
多元线性回归的计算方法摘要 在实际经济问题中,一个变量往往受到多个变量的影响.例... STLyy UQ 在多元线性回归分析中,回归平方和表示的是所有 k 个自变量对 y 的变差的总影响,它可以 按公 ...
- 【算法1】多元线性回归
计划在国庆期间推出一些挖掘算法,是不是心血来潮?绝对不是.应一小粉丝私信提出小要求,推一些挖掘算法的文章.只是写博文真的巨费时间,所以我会按自己的理解把算法的框架推出来,其中的一些细节推导我会 ...
- 解析法实现一元线性回归、多元线性回归以及数据模型可视化操作
目录 [1]解析法实现一元线性回归 python列表实现 利用Numpy实现 利用TensorFlow实现 数据和模型可视化 [2]解析法实现多元线性回归 利用Numpy实现 需要用到的NumPy数组 ...
最新文章
- MySQL工具1:mysqladmin
- 5G NPN 行业专网 — 高可靠专网部署方案
- invokeRequired属性和 invoke()方法
- 使用Charles抓包
- 最大限度地降低多线程 C# 代码的复杂性
- am3352 linux 内核 编译,am335x uboot, kernel 编译
- Linux CPU信息和使用情况查看(CentOS)
- 一周试用yii开发一个带各种该有功能的web程序(二)
- 页面导航【WP7学习札记之七】
- 北语发布 | 汉语学习者文本多维标注数据集YACLC V1.0 -- 文本纠错方向
- visio2016无法安装的完美解决方法
- 本地erp与云erp系统的差别
- [转]经济学金融学书籍推荐
- 利用iTextsharp进行PDF页码旋转
- STM32F103ZG单片机解密确保成功 ST芯片解密
- 简易的Java版 eval()函数
- 微信小程序动态添加Class
- linux设置简单的密码
- opencv Day1
- 基于TC358870XBG的头戴式显示方案
热门文章
- Android 如何防止用户同时点击多个控件问题
- android DrawerLayout 改变系统默认的灰色
- smartupload 上传文件时 把页面编码改成gbk 解决乱码
- spring 组件基于注解的注册方式
- 【js操作url参数】获取指定url参数值、取指定url参数并转为json对象
- 从零开始编写自己的C#框架(16)——Web层后端父类
- MonoRail学习笔记一:一个小例子
- java字节对齐 32 64_【C语言】字节对齐问题(以32位系统为例)
- c++ memset 语言_自学C语言不知道从哪儿下手?学习框架都帮你列好了!
- predicate 列存储索引扫描_在SQL SERVER中导致索引查找变成索引扫描的问题分析