statsmodels 回归分析 | 学习笔记

简介: 快速学习 statsmodels 回归分析

开发者学堂课程【人工智能必备基础:概率论与数理统计:statsmodels 回归分析】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/545/detail/7436


statsmodels 回归分析

一、 statsmodels 使用

先将 import statsmodels 导入,先做一元线性回归。因没有实际数据,先生成一些数据,指定 nsample = 20。X 是横轴,y 是纵轴。为画图好看,指定 np.linspace 从 0 到 10,选 20 个数,20 个数之间是等距的。打印 x:

In [8] : import numpy as np
import matplotlib. pyplot as plt

import statsmodels. api as sm
nsample = 20
х = np. linspace (0, 10, nsample)
Out[8] :array([ 0,0.52631579, 1.05263158, 1.57894737,
2.10526316, 2.6315789,3.15789474, 3.68421053,
4.21052632,4.73684211, 5. 26315789,5.78947368,
6.31578947, 6.84210526, 7. 36842105, 7.89473684,
8.42105263,8.94736842,9. 47368421, 10.])

一元线性回归

推导最小二乘法时,加一列 1,为了组合。sm 代表 statsmodels,将 x 传入add_constant,表示在 x 原来在原来基础上本不是一列,实际上是一列。第一列是1,右边那列是实际的值。r

In [9]: x = sm. add. constant (x)
Out[9]: array([[ 1.,0.],

[1.          ,   0.52631579],

[1.          ,   1.05263158] ,

[1.          ,   1. 57894737],

[1.          ,    2.10526316],

[1.          ,  2.63157895],

[1.          ,   3. 15789474],

[1.          ,   3. 68421053],

[1.          ,    4.21052632],

[1.          ,    4.73684211],

[1.          ,     5.26315789] ,

[1.          ,     5.78947368],

[1.          ,     6.31578947],

[1.          ,     6.84210526] ,

[1.          ,      7.36842105],

[1.           ,     7.89473684],

[1.          ,     8.42105263],

[1.          ,     8.94736842],

[1.          ,     9.47368421],

[1.           ,    10.        ]])

做回归,为了构造出 y 值,为了使任务做可视化展示。先将 β0,β1 指定出来,y=β1x+β0。默认实际情况 β1=5,β0=2。观察求解出来的实际值与设置出来的实际值间的差异。

In [11]: # β0,β1 分别设置成 2,5

beta = np. array([2, 5])

beta
0ut[11]: array([2, 5])

在真实情况下,数据点不一定与 β0,β1 一模一样,都会偏上偏下,偏左偏右。所以引入误差项。为了使数据更真实,在 y=β1x+β0 基础上,在每个数据点间加上随机的抖动,并且误差项是服从于高斯分布的。首先构造出随机的高斯分布,指定 size=nsample,因为要给 20 个点都加上随机的浮动,所以得到下面的结果。e 表示对于每个点,可能有些正值是往上的,有些负值是往下的。对于数据,表示的意思是,要数据往上抖动,或往下抖动。
In [13]: #误差项
e = np. random. normal (size=nsample)

e0ut[13]: array([-1. 87955777, -0. 49196542, 0. 53259826,0. 10675137,1.17508727,
-1.02293335,1.75717793, -1. 12456907, -0. 64294355,0.44920794,
- 1.20471093,0.02588779, -0. 69216987,1.23018605,0.59180637,
1.03269883,0.16712902,2.06599762, -2. 06133608, 0. 12899139])

实际数据是 x 和 beta 可以做绝对运算,因偏一列 e。所以等于

y = np.dot(X, beta) + e,所以得出的 y 是真实值,也打印出实际的 20

个值。

In [14]:#实际值 y

y = np.dot(X, beta) + e

y

0ut[14]: array([0.12044223, 4.13961353, 6.73055964, 9.78798547,

13.70140306,14.13496139,19.54665161,19.29648356,
22.40968802,26.13341847,27.11107855,30.97325622,
32.886777537.44071236,39.43391164,42.50638304,
44.27239218,48.80283972,47.30708497,51.87100861]) 

接着计算回归方程,假设已得出 x 和 y 的值,构造一个方程,用最小二乘法,sm. OLS(y,X) 表示最小二乘法的意思,需指定一个 y 和指定一个 x,分别表示实际值和数据点。

In [15]:1#最小二乘法
model = sm. OLS(y,X)

先将 model 指定出来,model. fit() 来拟合当前数据,在用 res 得出最终的结果。
In [16]: #拟合数据
res = model. fit()

es. params 表示回归系数,最后就会返回出原来的 β0,β1。原假设 β1=5,β0=2,实际求出 β0=1. 49524076,β1=5.08701837,看得出 β0 求出的结果比较准确, β1 差不大。这是由于数据点比较少引起的。为了显示流畅,只有了 20 个数据点。
In [18]:#回归系数

res. params
Out[18]: array([ 1. 49524076, 5.08701837])

R-squared 表示 R 方值,用于评估线性方程的优劣。

Adj.R-squared 表示调整过的 R 方值。主要用于多元线性回归当中。检验线性方程能否用一个线性方程表达。Prob (F-statistic) 表示检验的概率值,概率值较小,说明x和y的线性关系是非常强的。No.Observations 表示自由度。No.Observations 表示一共观察的样本。Df Residuals 表示日期。Df Model 表示自由度。coef  std err 表示当前建立的模型。Const 表示常数项。X1 表示斜率项。分别对应 β0,β1。第一列表示的是实际指标值,第二列 std 代表的值,第三列表示的是 t 指,第四列表示 P 值。这些值表示的是检验的值。现已构造出一个方程,得出真实值,欲得到一个预测值。

In (20]:#全部结果
res. susmaryO)

Out[20]:

OLS Regression Results

Dep.Varlable:y R-squared:0.995

Model:OLS Adj.R-squared:0.995

Method:Least Squares   F-statistic:3668.

Date:Thu.01 Mar 2018 Prob (F-statistic): 2.94e-22

Time:18:07:03  Log-Likelihood:-29.947

No.Observations:20  AIC: 63.89

Df Residuals:18  BIC: 65.89

Df Model:1

Covariance Type:nonrobust

coef  std err  t  P>|t|  [0.025  0.975]

const 1.4952  0.491  3.043 0.007  0.463  2.527

x1  5.0870 0.084 60.560 0.000 4.911 5.263

现已构造出回归方程,拥有真实值,欲得到预测值,

In [21]: #拟合的估计值
y_ = res. fittedvalues(表示将估计值显示出来)

Y_
Out[21]: array([1.49524076,4.17261885,6.84999693,9.52737502,
12.20475311, 14. 8821312 ,17.55950928,20.23688737,
22.91426546, 25. 59164354,28.26902163,30.94639972,
33.62377781,36: 30115589,38.97853398,41.65591207,
44.33329015,7.01066824,49.68804633,52.36542442])
In [25]: fig, ax = plt. subplots (figsize=(8, 6))
ax.plot(x, y, ’o’ , 1abel= ‘data’ )#原始数据

ax.plot(x, y_,‘r--.’ , label=’ test ‘)#拟合数据

ax. legend(1oc=’best’ )
plt. show()

将估计值和原始的指标值画出。蓝色点表示原始数据,新生成的是红色的,所以完成了简单的回归方程。

image.png

相关文章
|
6月前
|
数据采集 机器学习/深度学习 编解码
从零复现Google Veo 3:从数据预处理到视频生成的完整Python代码实现指南
本文详细介绍了一个简化版 Veo 3 文本到视频生成模型的构建过程。首先进行了数据预处理,涵盖了去重、不安全内容过滤、质量合规性检查以及数据标注等环节。
433 5
从零复现Google Veo 3:从数据预处理到视频生成的完整Python代码实现指南
|
3月前
|
JSON 监控 API
Minecraft(我的世界)服务器信息查询免费API接口详解
本文介绍接口盒子提供的免费Minecraft服务器查询API,涵盖参数说明、返回解析及PHP/Python调用示例,助您快速集成服务器监控功能。
428 1
|
3月前
|
JavaScript 前端开发 安全
【逆向】Python 调用 JS 代码实战:使用 pyexecjs 与 Node.js 无缝衔接
本文介绍了如何使用 Python 的轻量级库 `pyexecjs` 调用 JavaScript 代码,并结合 Node.js 实现完整的执行流程。内容涵盖环境搭建、基本使用、常见问题解决方案及爬虫逆向分析中的实战技巧,帮助开发者在 Python 中高效处理 JS 逻辑。
|
11月前
|
人工智能 JSON API
LongDocURL:中科院联合阿里推出多模态长文档理解基准数据集,用于评估模型对复杂文档分析与推理的能力
LongDocURL 是由中科院与淘天集团联合推出的多模态长文档理解基准数据集,涵盖 2,325 个问答对,支持复杂文档的理解、推理和定位任务。
553 77
LongDocURL:中科院联合阿里推出多模态长文档理解基准数据集,用于评估模型对复杂文档分析与推理的能力
|
Ubuntu Linux
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
3794 4
|
机器学习/深度学习 人工智能 运维
智能运维:AI驱动的IT运维革命###
【10月更文挑战第21天】 随着数字化转型的深入,智能运维(AIOps)正逐步成为企业IT管理的核心。本文将探讨AI技术如何赋能运维领域,通过自动化、智能化手段提升系统稳定性和效率,降低运营成本,并分享实施智能运维的最佳实践与挑战应对策略。 ###
958 1
|
机器学习/深度学习 索引 Python
Numpy学习笔记(二):argmax参数中axis=0,axis=1,axis=-1详解附代码
本文解释了NumPy中`argmax`函数的`axis`参数在不同维度数组中的应用,并通过代码示例展示了如何使用`axis=0`、`axis=1`和`axis=-1`来找到数组中最大值的索引。
1709 0
Numpy学习笔记(二):argmax参数中axis=0,axis=1,axis=-1详解附代码
|
消息中间件 监控 数据安全/隐私保护
RabbitMQ 技术详解与应用指南
**RabbitMQ** 是一个开源消息代理,基于 AMQP 实现,用于应用程序间轻量、可靠的消息传递。本文档详细介绍了 RabbitMQ 的基础,包括**消息、队列、交换机、绑定、路由键和消费者**等概念,以及其**高可靠性、高性能、灵活性、可扩展性和易用性**等特性。RabbitMQ 使用生产者-消费者模型,消息通过交换机路由到队列,消费者接收并处理。文中还涵盖了安装配置的基本步骤和常见应用场景,如**异步处理、消息推送、系统解耦、流量削峰和日志收集**。
1565 2
|
Java Spring
【已解决】Caused by: java.lang.ClassNotFoundException: org.springframework.boot.context.properties.
【已解决】Caused by: java.lang.ClassNotFoundException: org.springframework.boot.context.properties.
4550 1
【已解决】Caused by: java.lang.ClassNotFoundException: org.springframework.boot.context.properties.
|
数据采集 机器学习/深度学习 算法
Python实现多元线性回归模型(statsmodels OLS算法)项目实战
Python实现多元线性回归模型(statsmodels OLS算法)项目实战