前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >机器学习 | 一元回归模型Python实战案例

机器学习 | 一元回归模型Python实战案例

作者头像
数据STUDIO
发布2021-09-09 11:54:02
发布2021-09-09 11:54:02
1.6K00
代码可运行
举报
文章被收录于专栏:数据STUDIO数据STUDIO
运行总次数:0
代码可运行

大家好,我是云朵君!

本号「数据STUDIO」长期接受有偿投稿,公号菜单栏【云朵之家】-【投稿】可查看征稿文档!

本文来自我的朋友才哥投稿,公众号:可以叫我才哥 的号主,身为游戏运营的他自学python只为让工作更轻松,目前这个号已经累积了百篇原创,涵盖python基础、pandas数据分析、数据可视化以及python爬虫等,欢迎大家关注,和才哥一起学习。

本次我们实战案例用到的是啤酒销量和气温之间的关系数据,探索气温对啤酒销量的影响。在实际中影响啤酒销量的因素自然不止气温这么一个,但是本次实战仅考虑气温这一个变量。


回归分析只涉及到两个变量的,称一元回归分析。一元回归的主要任务是从两个相关变量中的一个变量去估计另一个变量,被估计的变量,称因变量,可设为Y;估计出的变量,称自变量,设为X。回归分析就是要找出一个数学模型Y=f(X),使得从X估计Y可以用一个函数式去计算。当Y=f(X)的形式是一个直线方程时,称为一元线性回归。这个方程一般可表示为Y=A+BX,根据最小平方法或其他方法,可以从样本数据确定常数项A与回归系数B的值。

1. 引入工具库

这里我们要用到numpypandasmatplotlib三剑客以及科学计算包scipy、统计模型库statsmodelsseaborn

代码语言:javascript
代码运行次数:0
运行
复制
# 引入工具库
import numpy as np
import pandas as pd
import scipy as sp
from scipy import stats

from matplotlib import pyplot as plt
import seaborn as sns
sns.set()

# 用于估计统计模型的库
import statsmodels.formula.api as smf
import statsmodels.api as sm

2. 加载数据并绘制联合分布图

加载数据

代码语言:javascript
代码运行次数:0
运行
复制
# 读取案例数据
beer = pd.read_csv("beer.csv")
beer.head()

案例数据

绘制联合分布图
代码语言:javascript
代码运行次数:0
运行
复制
# 绘制联合分布图
sns.jointplot(x = "temperature", y = "beer", 
              data = beer, 
              color = 'black'
             )

联合分布图

从图中可以看到,呈现一定的气温越高销量越高的情况。

3. 数学建模

我们建立一元回归模型,Y=A+BX,其中X是气温,Y是销量,A和B为待确定的值,其中A为常量,B为回归系数。

如果B不为0,则可以认为啤酒销量与气温有关;如果B为正数,则气温越高啤酒销量越高;如果B为负数,则情况相反。

当A和B值确定后,我们就可以根据气温来预测销量了。

OLS回归

确定基础模型后,我们使用ols函数建模,fit函数进行拟合

代码语言:javascript
代码运行次数:0
运行
复制
# 建模与拟合
lm_model = smf.ols(formula = "beer ~ temperature", 
                   data = beer).fit()
  • ols就是最小二乘法英文缩写,全称为ordinary least squares
  • "beer ~ temperature"代表模型的变量为temperature,因变量为beer
  • fit就是拟合过程,自动完成参数A和B的估计

我们再通过summery函数打印结果**(OLS模型的详细信息**)

代码语言:javascript
代码运行次数:0
运行
复制
# OLS模型的详细信息
lm_model.summary()

OLS模型的详细信息

在以上OLS模型详细信息中,第二部分中的Intercepttemperature就是我们的A和B

coef就是A和B具体的值,std err 是系数的标准误差,此后面依次是t值、0假设时的p值以及95%置信区间的下置信界限和上置信界限。

p值越小,则可以认为气温的系数和0之间存在显著性差异,也就是气温和销量的关系比较明显。

而我们看到系数B的值0.7654是大于0的,也就是气温越高,啤酒销量越多。

关于OLS模型详细信息中其他信息的说明

Dep. Variable:变量的名称 Model/Method:模型是最小二乘法 Date:建模日期 No. Observations:样本容量 Df Residuals:样本容量减去参与估计的参数个数 Df Model:用到的因变量个数 Covariance Type:协方差类型,默认是nonrobust R-squared/Adj. R-squared:决定系数与修正决定系数 F-statistic:/Prob (F-statistic):方差分析的结果 Log-Likelihood:最大对数似然 AIC:赤池信息量准则 BIC:贝叶斯信息量准则

决定系数

这里的决定系数为0.504,它的含义是模型可以预测的差异在整体差异中所占的比例,怎么理解呢?

如果我们没有回归模型,那么平均值就是我们最好的估计,变异程度用样本方差表示,即(样本值-平均值)的平方和,将之称为总变异 如果有了回归模型后,那么我们对某一个特定自变量的结果可以通过回归模型来进行推断预测,这样(样本值-预测值)的平方和就是不能被解释的变异程度,(样本值-预测值)的平方和被称为剩余平方和。假设有一个完美的模型可以全部预测每个观测点的话,不能解释的变异就为0了。 决定系数就是用可以被解释的变异/总变异,决定系数越高,代表可以被解释的程度越高,回归模型的效果越好

4. 使用模型进行预测

一元回归模型的参数都确定后,我们就可以进行预测了,直接用predict函数即可。

代码语言:javascript
代码运行次数:0
运行
复制
# 一元回归模型预估值
beer['predict_beer'] = lm_model.predict()
beer.head()

如果要预测某个气温下的销售额,可以这样:

代码语言:javascript
代码运行次数:0
运行
复制
# 预测 气温 30的销售额
lm_model.predict(pd.DataFrame({"temperature":[30]}))
''' 输出
0    57.573043
dtype: float64
```

我们绘制实际值与预估值之间的组合图(前者散点、后者直线)。

代码语言:javascript
代码运行次数:0
运行
复制
# 中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
x = beer.temperature
y1 = beer.beer
y2 = beer.predict_beer

plt.plot(x, y1, 'o', c='r', label='原始数据')
plt.plot(x, y2, label='一元回归模型')
plt.legend()

5. 绘制回归曲线

其实,sns.lmplot就可以绘制回归曲线。

代码语言:javascript
代码运行次数:0
运行
复制
sns.lmplot(x = "temperature", y = "beer", 
           data = beer,
           scatter_kws = {"color": "black"},
           line_kws    = {"color": "black"}
          )

一元回归模型因为只涉及到一个自变量,所以是比较简单的模型案例,而我们在实际生活中遇到的更多的是多变量的回归模型,容我们后续介绍。本文完整数据获取:点赞和在看后,在本公众号后台回复:「210903」即可。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据STUDIO 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 引入工具库
  • 2. 加载数据并绘制联合分布图
    • 绘制联合分布图
  • 3. 数学建模
    • OLS回归
    • 决定系数
  • 4. 使用模型进行预测
  • 5. 绘制回归曲线
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档