Python 线性回归完整指南


线性回归是一种我们可以用来理解一个或多个预测变量与响应变量之间关系的方法。

本教程介绍如何在 Python 中执行线性回归。

示例:Python 中的线性回归

假设我们想知道学习的小时数和参加练习考试的次数是否会影响学生在给定考试中获得的成绩。

为了探索这种关系,我们可以在Python中执行以下步骤来执行多元线性回归。

第 1 步:输入数据。

首先,我们将创建一个 pandas DataFrame 来保存我们的数据集:

 import pandas as pd

#create data
df = pd.DataFrame({'hours': [1, 2, 2, 4, 2, 1, 5, 4, 2, 4, 4, 3, 6, 5, 3, 4, 6, 2, 1, 2],
                   'exams': [1, 3, 3, 5, 2, 2, 1, 1, 0, 3, 4, 3, 2, 4, 4, 4, 5, 1, 0, 1],
                   'score': [76, 78, 85, 88, 72, 69, 94, 94, 88, 92, 90, 75, 96, 90, 82, 85, 99, 83, 62, 76]})

#view data 
df

        hours exam score
0 1 1 76
1 2 3 78
2 2 3 85
3 4 5 88
4 2 2 72
5 1 2 69
6 5 1 94
7 4 1 94
8 2 0 88
9 4 3 92
10 4 4 90
11 3 3 75
12 6 2 96
13 5 4 90
14 3 4 82
15 4 4 85
16 6 5 99
17 2 1 83
18 1 0 62
19 2 1 76

步骤 2:执行线性回归。

接下来,我们将使用 statsmodels 库中的OLS() 函数执行普通最小二乘回归,使用“小时”和“考试”作为预测变量,“分数”作为响应变量:

 import statsmodels.api as sm

#define response variable
y = df['score']

#define predictor variables
x = df[['hours', 'exams']]

#add constant to predictor variables
x = sm.add_constant(x)

#fit linear regression model
model = sm.OLS(y, x).fit()

#view model summary
print(model.summary())

                            OLS Regression Results                            
==================================================== ============================
Dept. Variable: R-squared score: 0.734
Model: OLS Adj. R-squared: 0.703
Method: Least Squares F-statistic: 23.46
Date: Fri, 24 Jul 2020 Prob (F-statistic): 1.29e-05
Time: 13:20:31 Log-Likelihood: -60.354
No. Observations: 20 AIC: 126.7
Df Residuals: 17 BIC: 129.7
Df Model: 2                                         
Covariance Type: non-robust                                         
==================================================== ============================
                 coef std err t P>|t| [0.025 0.975]
-------------------------------------------------- ----------------------------
const 67.6735 2.816 24.033 0.000 61.733 73.614
hours 5.5557 0.899 6.179 0.000 3.659 7.453
exams -0.6017 0.914 -0.658 0.519 -2.531 1.327
==================================================== ============================
Omnibus: 0.341 Durbin-Watson: 1.506
Prob(Omnibus): 0.843 Jarque-Bera (JB): 0.196
Skew: -0.216 Prob(JB): 0.907
Kurtosis: 2,782 Cond. No. 10.8
==================================================== ============================

第 3 步:解释结果。

以下是如何解释结果中最相关的数字:

R 平方: 0.734 。这称为决定系数。这是可以由预测变量解释的响应变量方差的比例。在此示例中,73.4% 的考试成绩差异是由学习时数和参加的准备考试次数来解释的。

F 统计量:23.46 。这是回归模型的总体 F 统计量。

概率(F 统计量):1.29e-05。这是与总体 F 统计量相关的 p 值。这告诉我们回归模型作为一个整体是否具有统计显着性。换句话说,它告诉我们两个预测变量的组合是否与响应变量具有统计上显着的关联。在这种情况下,p 值小于 0.05,表明预测变量“学习时间”和“参加的准备考试”组合与考试成绩具有统计显着关联。

coef:假设其他预测变量保持不变,每个预测变量的系数告诉我们响应变量的预期平均变化。例如,假设练习考试保持不变,学习时间每增加一小时,平均考试成绩预计会增加5.56 分

还有另一种看待方式:如果学生 A 和学生 B 参加的预科考试次数相同,但学生 A 多学习一个小时,那么学生 A 的得分应该比学生 B 高5.56分。

我们将截距系数解释为不学习任何时间且不参加预备考试的学生的预期考试成绩为67.67

P>|t|。各个 p 值告诉我们每个预测变量是否具有统计显着性。我们可以看到“小时”具有统计显着性(p = 0.00),而“考试”则具有统计显着性  (p = 0.52) 在 α = 0.05 时不具有统计显着性。由于“考试”一词在统计上并不显着,我们最终可能决定将其从模型中删除。

估计回归方程:我们可以使用模型输出的系数来创建以下估计回归方程:

考试成绩 = 67.67 + 5.56*(小时) – 0.60*(预备考试)

我们可以使用这个估计的回归方程根据学生的学习小时数和参加练习考试的次数来计算学生的预期考试成绩。例如,学习三个小时并参加预备考试的学生应该得到83.75的成绩:

请记住,由于过去的预备考试在统计上不显着 (p = 0.52),我们可能会决定删除它们,因为它们不会对整体模型提供任何改进。在这种情况下,我们可以仅使用研究的时间作为预测变量来执行简单的线性回归。

步骤 4:验证模型假设。

执行线性回归后,您可能需要检查几个假设以确保回归模型的结果可靠。这些假设包括:

假设#1:预测变量和响应变量之间存在线性关系。

  • 通过生成残差图来验证此假设,该残差图显示回归模型残差的拟合值。

假设#2:残差的独立性。

假设#3:残差的同方差性。

假设 4:残差的正态性。

假设#5:验证预测变量之间不存在多重共线性。

  • 通过计算每个预测变量的VIF 值来验证该假设。

如果满足这些假设,您可以确信多元线性回归模型的结果是可靠的。

您可以在此处找到本教程中使用的完整 Python 代码。

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注