线性回归是一种重要的统计模型,它用于研究因变量和一个或多个自变量之间的线性关系。线性关系意味着当自变量增加或减少时,因变量也会相应地增加或减少。线性回归模型可以帮助我们理解和预测数据的变化趋势,非常实用。
如上图所示,线性关系可以是正向的(自变量增加,因变量增加)或负向的(自变量增加,因变量减少)。
线性回归的数学简述
变量 Y 和 X 之间的关系可以用以下方程表示:
Y=mX+b
在这个方程中,Y 是因变量,即我们试图预测或估计的变量;X 是自变量,即我们用来进行预测的变量;m 是回归线的斜率,它代表了 X 对 Y 的影响。换句话说,如果 X 增加 1 个单位,Y 将增加 m 个单位。(需要完全披露的是:这只有在我们知道 X 和 Y 之间存在线性关系时才成立。在几乎所有线性回归的情况下,这都不会完全正确!)b 是常数,也称为 Y 截距。如果 X 等于 0,那么 Y 就等于 b。这在现实生活中并不一定适用——我们并不总能知道 X 和 Y 之间的确切关系,或拥有精确的线性关系。
这就是简单线性回归 (SLR,
Simple Linear Regression
)。在 SLR 模型中,我们基于数据构建模型(斜率和 Y 截距是从数据中计算得出的);注意 X 和 Y 之间的关系并不是完全线性的。SLR 模型还包括数据中的误差(也称为残差)。残差基本上是 Y 的真实值和预测/估计值之间的差异。在线性回归中,预测的是一个连续变量。回归本质是:通过找到“最佳拟合线”来最小化这些误差——即回归线的误差最小化。我们目标是使黑线的长度(或更准确地说,蓝点与红线的距离)尽可能接近零。也就是最小化均方误差 (MSE) 或误差平方和 (SSE),也称为“残差平方和” (RSS)。
在现实情况下,我们会有多个自变量;可能有两个自变量,也可能有多达数百(理论上甚至数千)个变量。在这些情况下,我们将使用多元线性回归模型 (MLR,Multiple Linear Regression)。回归方程与简单回归方程基本相同,只是有更多变量:
Y=b0+b1X1+b2X2+⋯+bnXn
Python 中的线性回归
在 Python 中进行线性回归主要有两种方式:使用 Statsmodels 和 scikit-learn。
Statsmodels 中的线性回归
Statsmodels 是一个 “提供许多不同统计模型估计的类和函数的 Python 模块,同时还提供进行统计测试和统计数据探索的功能。”
下面是如何实际使用 Statsmodels 进行线性回归。使用boston数据集进行线性回归的示例。首先,我们从 sklearn导入boston数据集和引入statsmodels包:
import statsmodels.api as sm
from sklearn.datasets import fetch_openml
import pandas as pd
boston = fetch_openml(name='boston', version=1)
boston_df = pd.DataFrame(boston.data, columns=boston.feature_names)
boston_df['PRICE'] = boston.target
print(boston_df.head())
接下来使用 Statsmodels 进行线性回归:
X = boston_df["RM"]
y = boston_df["PRICE"]
model = sm.OLS(y, X).fit()
predictions = model.predict(X)
model.summary()
上面的表格中有因变量、模型和方法。OLS 代表普通最小二乘法(Ordinary Least Squares),方法“最小二乘”意味着我们试图拟合一条回归线,以最小化回归线与实际点之间距离的平方。
系数(RM) 3.6534 表示,当 RM 变量增加 1 时,PRICE 的预测值增加 3.6534。其他几个重要值包括 R 方(R-squared)——我们的模型解释的方差百分比;标准误差(standard error);t 统计量和 p 值,用于假设检验——RM 具有统计显著的 p 值;RM 的 95% 置信区间(意味着我们以 95% 的置信度预测 RM 的值在 3.548 到 3.759 之间)。
如果我们确实想在模型中添加常数——我们需要使用命令