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实现一元及多元线性回归相关推荐

  1. python多元线性回归实例_利用Python进行数据分析之多元线性回归案例

    线性回归模型属于经典的统计学模型,该模型的应用场景是根据已知的变量(自变量)来预测某个连续的数值变量(因变量).例如,餐厅根据每天的营业数据(包括菜谱价格.就餐人数.预定人数.特价菜折扣等)预测就餐规 ...

  2. python多元非线性回归_利用Python进行数据分析之多元线性回归案例

    线性回归模型属于经典的统计学模型,该模型的应用场景是根据已知的变量(自变量)来预测某个连续的数值变量(因变量).例如,餐厅根据每天的营业数据(包括菜谱价格.就餐人数.预定人数.特价菜折扣等)预测就餐规 ...

  3. python梯度下降法实现线性回归_梯度下降法的python代码实现(多元线性回归)

    梯度下降法的python代码实现(多元线性回归最小化损失函数) 1.梯度下降法主要用来最小化损失函数,是一种比较常用的最优化方法,其具体包含了以下两种不同的方式:批量梯度下降法(沿着梯度变化最快的方向 ...

  4. 多元线性回归数据集_TensorFlow学习Program1——13.实现一元、多元线性回归(基于房价数据集)...

    本节将针对波士顿房价数据集的房间数量(RM)采用简单一元线性回归,目标是预测在最后一列(MEDV)给出的房价.波士顿房价数据集可从http://lib.stat.cmu.edu/datasets/bo ...

  5. Python数据分析案例-利用多元线性回归与随机森林回归算法预测笔记本新品价格

    1.前言 目的: 本文通过多元线性回归与随机森林算法预测笔记本新品的发售价 工具: 语言:Python 3.8 软件:Jupyter Notebook 库:pandas.numpy.matplotli ...

  6. 机器学习入门 ————》 一元及多元线性回归

    1.线性回归(line Regression) 回归,指研究一组随机变量(Y1 ,Y2 ,-,Yi)和另一组(X1,X2,-,Xk)变量之间关系的统计分析方法,又称多重回归分析.通常Y1,Y2,-,Y ...

  7. java算多元回归方程_java多元线性回归算法

    多元线性回归的计算方法摘要 在实际经济问题中,一个变量往往受到多个变量的影响.例... STLyy UQ 在多元线性回归分析中,回归平方和表示的是所有 k 个自变量对 y 的变差的总影响,它可以 按公 ...

  8. 【算法1】多元线性回归

        计划在国庆期间推出一些挖掘算法,是不是心血来潮?绝对不是.应一小粉丝私信提出小要求,推一些挖掘算法的文章.只是写博文真的巨费时间,所以我会按自己的理解把算法的框架推出来,其中的一些细节推导我会 ...

  9. 解析法实现一元线性回归、多元线性回归以及数据模型可视化操作

    目录 [1]解析法实现一元线性回归 python列表实现 利用Numpy实现 利用TensorFlow实现 数据和模型可视化 [2]解析法实现多元线性回归 利用Numpy实现 需要用到的NumPy数组 ...

最新文章

  1. MySQL工具1:mysqladmin
  2. 5G NPN 行业专网 — 高可靠专网部署方案
  3. invokeRequired属性和 invoke()方法
  4. 使用Charles抓包
  5. 最大限度地降低多线程 C# 代码的复杂性
  6. am3352 linux 内核 编译,am335x uboot, kernel 编译
  7. Linux CPU信息和使用情况查看(CentOS)
  8. 一周试用yii开发一个带各种该有功能的web程序(二)
  9. 页面导航【WP7学习札记之七】
  10. 北语发布 | 汉语学习者文本多维标注数据集YACLC V1.0 -- 文本纠错方向
  11. visio2016无法安装的完美解决方法
  12. 本地erp与云erp系统的差别
  13. [转]经济学金融学书籍推荐
  14. 利用iTextsharp进行PDF页码旋转
  15. STM32F103ZG单片机解密确保成功 ST芯片解密
  16. 简易的Java版 eval()函数
  17. 微信小程序动态添加Class
  18. linux设置简单的密码
  19. opencv Day1
  20. 基于TC358870XBG的头戴式显示方案

热门文章

  1. Android 如何防止用户同时点击多个控件问题
  2. android DrawerLayout 改变系统默认的灰色
  3. smartupload 上传文件时 把页面编码改成gbk 解决乱码
  4. spring 组件基于注解的注册方式
  5. 【js操作url参数】获取指定url参数值、取指定url参数并转为json对象
  6. 从零开始编写自己的C#框架(16)——Web层后端父类
  7. MonoRail学习笔记一:一个小例子
  8. java字节对齐 32 64_【C语言】字节对齐问题(以32位系统为例)
  9. c++ memset 语言_自学C语言不知道从哪儿下手?学习框架都帮你列好了!
  10. predicate 列存储索引扫描_在SQL SERVER中导致索引查找变成索引扫描的问题分析