数学建模:线性回归模型的Python实现
目录
一.一元线性回归
1.1 引子
1.2 求解系数a和截距b的方法:最小二乘法
1.3 案例解决
1.4 模型检验
二.多元线性回归
2.1 式子
2.2 核心代码
2.3 案例解决
注:如果您需要本文的数据集,请私信我的csdn账户
一.一元线性回归
1.1 引子
现有数据:(1,3),(3,5),(4,7),(5,8),请根据这4个坐标求出y与x的函数关系。
废话不多说,我们直接开整:
1.绘制散点图
import matplotlib.pyplot as plt
X = [[1], [3], [4], [5]]
Y = [3, 5, 7, 8]
plt.scatter(X, Y)
plt.show()
2.搭建模型并预测(预测3个自变量对应的因变量)
from sklearn.linear_model import LinearRegression
regr = LinearRegression()
regr.fit(X,Y)y = regr.predict([[2], [2.3], [5.2]]) #3个自变量
print(y)
得到的结果:
4.14285714 | 4.52857143 | 8.25714286 |
3.模型可视化
plt.scatter(X, Y)
plt.plot(X, regr.predict(X))
plt.show()
4.线性回归方程:y = ax+b
print('a:' + str(regr.coef_[0]))
print('b:' + str(regr.intercept_))
得到的回归方程:y = 1.29x+1.57
1.2 求解系数a和截距b的方法:最小二乘法
假设线性回归模型的拟合方程为y = ax+b。为了衡量实际值与预测值的接近程度,我们使用残差平方和(两者差值的平方和)进行衡量。
拟合的目的是为了让残差平方和尽可能地小,则应对残差平方和进行求导(对a和b分别进行求导),导数为0时,该残差平方和取得极值。
将所有(x,y)的代入上式即可求得a和b的值。
1.3 案例解决
现有某公司员工收入情况的数据(某公司员工收入.xlsx),自变量为工作时间,因变量为年收入,根据数据求出一元线性回归方程。
1.绘制散点图
import pandas as pd
from matplotlib import pyplot as plt
df = pd.read_excel('某公司员工收入.xlsx')
df.head()
X = df[['工作时间']]
Y = df['年收入']
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.scatter(X,Y)
plt.xlabel('工作时间')
plt.ylabel('年收入')
plt.show()
2.模型搭建
from sklearn.linear_model import LinearRegression
regr = LinearRegression()
regr.fit(X,Y)
3.模型可视化
plt.scatter(X,Y)
plt.plot(X, regr.predict(X), color='red') # color='red'设置为红色
plt.xlabel('工作时间')
plt.ylabel('年收入')
plt.show()
4.求出a与b的值
print('a:' + str(regr.coef_[0]))
print('b:' + str(regr.intercept_))
得到结果:y = 3.5202x-1.1071
1.4 模型检验
以下主要从两方面来检验模型的好坏:R-squared(R方)、Adj.R-squared(Adjusted R方)。R-squared、Adj.R-squared的取值范围为[0,1],它们的值越接近1,说明模型的拟合程度越高。
import statsmodels.api as sm
X2 = sm.add_constant(X)
est = sm.OLS(Y,X2).fit()
print(est.summary())
由图可知,R-squared、Adj.R-squared的值分别为0.874、0.870,说明模型拟合程度较高。
完整代码
#读取数据
import pandas as pd
from matplotlib import pyplot as plt
df = pd.read_excel('某公司员工收入.xlsx')
df.head()
X = df[['工作时间']]
Y = df['年收入']
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.scatter(X,Y)
plt.xlabel('工作时间')
plt.ylabel('年收入')
plt.show()#模型搭建
from sklearn.linear_model import LinearRegression
regr = LinearRegression()
regr.fit(X,Y)#模型可视化
plt.scatter(X,Y)
plt.plot(X, regr.predict(X), color='red') # color='red'设置为红色
plt.xlabel('工作时间')
plt.ylabel('年收入')
plt.show()#结果
print('系数a为:' + str(regr.coef_[0]))
print('截距b为:' + str(regr.intercept_))#模型检验
import statsmodels.api as sm
X2 = sm.add_constant(X)
est = sm.OLS(Y,X2).fit()
print(est.summary())
二.多元线性回归
2.1 式子
多元线性回归模型的表示方式:y = k0 + k1*x1 + k2*x2 + ... +kn*xn。其中,x1、x2、x3...为不同的特征变量,k1、k2、k3...为系数,k0为常数项。
2.2 核心代码
多元线性回归模型的核心代码与一元线性回归模型相同:
from sklearn.linear_model import LinearRegression
regr = LinearRegression()
regr.fit(X,Y)
2.3 案例解决
已有数据集企业综合实力.xlsx,特征变量有4个,因变量为企业的综合实力,现通过该数据集求出多元线性回归模型。
1.读取数据
import pandas as pd
df = pd.read_excel('企业综合实力.xlsx')
df.head() # 显示前5行数据X = df[['指标1', '指标2', '指标3', '指标4']]
Y = df['综合实力']
2.模型搭建
from sklearn.linear_model import LinearRegression
regr = LinearRegression()
regr.fit(X,Y)
3.方程构建
regr.coef_
print('各系数为:' + str(regr.coef_))
print('常数项系数k0为:' + str(regr.intercept_))
4.模型检验
import statsmodels.api as sm # 引入线性回归模型评估相关库
X2 = sm.add_constant(X)
est = sm.OLS(Y, X2).fit()
est.summary()
由检验结果知,R-squared、Adj.R-squared的值分别为0.586和0.571,拟合效果一般。
完整代码
#数据读取
import pandas as pd
df = pd.read_excel('企业综合实力.xlsx')
df.head() # 显示前5行数据X = df[['指标1', '指标2', '指标3', '指标4']]
Y = df['综合实力']#模型搭建
from sklearn.linear_model import LinearRegression
regr = LinearRegression()
regr.fit(X,Y)#方程构建
regr.coef_
print('各系数为:' + str(regr.coef_))
print('常数项系数k0为:' + str(regr.intercept_))#模型检验
import statsmodels.api as sm # 引入线性回归模型评估相关库
X2 = sm.add_constant(X)
est = sm.OLS(Y, X2).fit()
est.summary()
数学建模:线性回归模型的Python实现相关推荐
- 数学建模——支持向量机模型详解Python代码
数学建模--支持向量机模型详解Python代码 from numpy import * import random import matplotlib.pyplot as plt import num ...
- 数学建模——线性规划模型详解Python代码
数学建模--线性规划模型详解Python代码 标准形式为: min z=2X1+3X2+x s.t x1+4x2+2x3>=8 3x1+2x2>=6 x1,x2,x3>=0 上述线性 ...
- 数学建模——层次分析法Python代码
数学建模--层次分析法Python代码 import numpy as np class AHP: """ 相关信息的传入和准备 """ d ...
- 数学建模传染病模型_数学建模| 时间序列模型
1 数学建模 时间序列模型 1.与实践有关系的一组数据,叫做时间序列: 2.得到时间序列的数据后,要构建模型,其中平稳时间序列的模型,是本节课重点介绍的: 3.y=at+季节性+周期性 一. ...
- 数学建模常用模型04:灰色关联分析法
数学建模常用模型04:灰色关联分析法 灰色关联分析法 本文所用的资料参考来源:美赛资料网:美赛资料网 与灰色预测模型一样,比赛不能优先使用,灰色关联往往可以与层次分析结合使用.层次分析用在确定权重上面 ...
- 数学建模常用模型(一):灰色预测法
数学建模常用模型(一):灰色预测法 灰色预测法是一种用于处理少量数据.数据质量较差或者缺乏历史数据的预测方法.它适用于一些非线性.非平稳的系统,尤其在短期预测和趋势分析方面有着广泛的应用.灰色预测法作 ...
- 数学建模常见模型总结
数学建模常见模型总结 一.插值 当已有数据量不够,需要补充,且认定已有数据可信时,通常利用函数插值方法. 常用插值方法 拉格朗日插值 分段线性插值 Hermite 三次样条插值 克里金法 matlab ...
- 数学建模的常用知识python
一.规划问题 1.线性规划 定义:线性规划是研究线性约束条件下线性目标函数的极值问题的数学理论和方法. 步骤: 根据影响所要达到目的的因素找到决策变量. 由决策变量和所在达到目的之间的函数关系确定目标 ...
- 数学建模优化模型简单例题_数学建模之优化模型:存储模型
点击上方「蓝字」关注我们 最近,为申报市级精品课程,我为我校"数学建模与科学计算"课程录制了讲课视频,下面是3.1节优化模型的第一个例子:存储模型.敬请大家批评指正! 优化模型是数 ...
最新文章
- 结合Android去水印APP谈谈分区存储
- android 之 使用显示意图和隐式意图完成Activity的跳转
- Geoserver中切割离线瓦片TileLayer预览时放大之后缺失
- 想找一个写Wiki的工具
- java类的设计技巧
- /专访/对话堵俊平:最好的开源生态模型,是亚马逊的原始森林
- Windows 命令提示符
- 疯狂英语(Chapter one)
- centos7 SSH服务启动时报“main process exited, code=exited”status 255错误
- 计算机重复重启,计算机反复重启
- 怎么退出自适应巡航_吉利ICON ACC自适应巡航系统
- INSTALL_FAILED_SHARED_USER_INCOMPATIBLE错误解决方式
- kdj指标主要看哪个值_kdj指标K · D ·J 分别表示什么
- Windows平台利用完成端口模型创建高性能网络服务器
- 【元胞自动机】元胞自动机生命游戏【含Matlab源码 655期】
- Python自动化办公之PDF拆分工具
- [附源码]JAVA毕业设计汽车售后服务信息管理系统的设计与实现(系统+LW)
- java计算机毕业设计基于安卓Android的桃源婚恋交友APP(源码+系统+mysql数据库+Lw文档)
- 全面UI组件库Telerik——为驱动制造业生产商提升生产效率赋能
- 数据库密码忘了怎么办?CENTOS7下面重置mysql数据库密码的办法
热门文章
- 任正非在华为日本研究所说了什么 看这12句话就够了
- 共享软件海外收款方式
- TOM企业邮箱,邮箱绑定微信的先驱者
- 【剑指Offer】数据结构
- 下列哪项不属于以太网交换机的特点_南开19秋学期(1709、1803、1809、1903、1909) 《网络技术与应用》在线作业题目【标准答案】...
- MP4V2 录制mp4(h264+aac)视频
- 基于vue解决 100vw 和 100vh出现滚动条的问题
- Pyqt5实现计时器功能
- Web服务模拟器——wiremock
- 【Unity】Post-process后处理之 Anti-aliasing