1
1. 什么是线性回归?
线性回归是机器学习中最基础且广泛使用的回归算法之一,用于预测因变量(目标变量)和一个或多个自变量(特征变量)之间的线性关系。它通过找到一条最佳拟合直线,最小化数据点与直线之间的误差来进行预测。
数学形式上,线性回归试图拟合一个线性函数:
y = β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β n x n + ϵ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_n x_n + \epsilon y=β0+β1x1+β2x2+⋯+βnxn+ϵ
其中:
- ( y ) 是目标变量(因变量)。
- ( x 1 x_1 x1, x 2 x_2 x2, … \dots …, x n x_n xn) 是自变量(特征变量)。
- ( β 0 \beta_0 β0 ) 是截距,表示当所有自变量为零时,目标变量的预测值。
- ( β 1 \beta_1 β1, β 2 \beta_2 β2, … \dots …, β n \beta_n βn ) 是回归系数,表示每个自变量对目标变量的线性影响。
- ( ϵ \epsilon ϵ) 是误差项,表示模型无法解释的部分。
2. 线性回归的目标
线性回归的目标是找到最佳的权重 (
w
w
w ) 和偏置 (
b
b
b ),使得模型预测的值与真实值之间的差异(即损失函数)最小。求解线性回归模型最常用的方法是普通最小二乘法(Ordinary Least Squares, OLS),它通过解析的方式直接计算权重和偏置。常用的损失函数是均方误差(Mean Squared Error, MSE。
普通线性最小二乘法(Ordinary Least Squares, OLS)和残差平方和(Residual Sum of Squares, RSS)是两个相关但不同的概念,它们在回归分析中发挥着不同的作用。
(1). 普通最小二乘法(OLS)
普通线性最小二乘法是一种统计方法,用于估计线性回归模型的参数。其核心思想是通过最小化残差平方和来找到最佳的回归系数。这种方法假设因变量和自变量之间存在线性关系,目标是找出最能描述这种关系的线性方程。
OLS的步骤:
- 定义线性模型:( y y y = β 0 \beta_0 β0 + β 1 x 1 \beta_1x_1 β1x1 + β 2 x 2 \beta_2x_2 β2x2 + … \dots … + β n x n \beta_nx_n βnxn + ϵ \epsilon ϵ )
- 计算每个观测值的残差:( e i e_i ei = y i y_i yi - y ^ i \hat{y}_i y^i ),其中 ( y ^ i \hat{y}_i y^i ) 是通过模型预测的值。
- 最小化残差平方和:( R S S RSS RSS = ∑ i = 1 N ( y i − y ^ i ) 2 \sum_{i=1}^{N} (y_i - \hat{y}_i)^2 ∑i=1N(yi−y^i)2 )(损失函数)
求解RSS的步骤:
在线性回归中,损失函数帮助确定决策边界。在二分类问题中,逻辑回归同样使用损失函数(交叉熵损失)来衡量预测概率与实际标签之间的差异,从而形成决策边界。
通过求解RSS的偏导数并设为零,可以得到回归系数的估计值。
为了最小化 RSS,我们需要对 RSS 关于每个参数 (
β
\beta
β) 进行偏导数求解,并将结果设为零。这可以通过以下步骤实现:
- 损失函数的优化:
β j = β j − α ∂ L ∂ β j \beta_j = \beta_j - \alpha \frac{\partial L}{\partial \beta_j} βj=βj−α∂βj∂L通过最小化损失函数,我们可以找到最优的模型参数(回归系数)。这通常涉及以下步骤:
- 计算损失值:根据当前模型参数计算损失函数的值。
- 优化算法:使用梯度下降、牛顿法等优化算法,调整参数以减小损失值。例如,梯度下降通过以下公式迭代更新参数:
其中 ( α \alpha α ) 是学习率,表示每次更新的幅度(步长)。
- 对每个参数求偏导数:
- 例如,对于 ( β j \beta_j βj):
∂ R S S ∂ β j = − 2 ∑ i = 1 N ( y i − y ^ i ) x i j \frac{\partial RSS}{\partial \beta_j} = -2 \sum_{i=1}^{N} (y_i - \hat{y}_i) x_{ij} ∂βj∂RSS=−2i=1∑N(yi−y^i)xij
- 设偏导数为零:
- 得到一组方程,称为正态方程:
∑ i = 1 N ( y i − y ^ i ) x i j = 0 \sum_{i=1}^{N} (y_i - \hat{y}_i) x_{ij} = 0 i=1∑N(yi−y^i)xij=0
- 矩阵表示法:
为了方便求解,可以使用矩阵形式来表示线性回归模型。设设计矩阵 (X) 和目标向量 (y):
X = [ 1 x 11 x 12 ⋯ x 1 n 1 x 21 x 22 ⋯ x 2 n ⋮ ⋮ ⋮ ⋱ ⋮ 1 x N 1 x N 2 ⋯ x N n ] X = \begin{bmatrix} 1 & x_{11} & x_{12} & \cdots & x_{1n} \\ 1 & x_{21} & x_{22} & \cdots & x_{2n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & x_{N1} & x_{N2} & \cdots & x_{Nn} \end{bmatrix} X= 11⋮1x11x21⋮xN1x12x22⋮xN2⋯⋯⋱⋯x1nx2n⋮xNn
y = [ y 1 y 2 ⋮ y N ] y = \begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_N \end{bmatrix} y= y1y2⋮yN
- 回归系数的求解:
对于多元线性回归,回归系数的估计可以通过矩阵形式表示:
β
=
(
X
T
X
)
−
1
X
T
y
\beta = (X^T X)^{-1} X^T y
β=(XTX)−1XTy
其中:
- ( X X X ) 是包含自变量的设计矩阵,第一列为1(表示截距项)。
- ( y y y ) 是因变量的观测值向量。
(2). 残差平方和(RSS)
①. 定义
残差平方和是一个衡量模型拟合效果的指标。它表示实际观测值与模型预测值之间差异的平方和,反映了模型预测的误差。RSS越小,说明模型的预测效果越好。
RSS的公式:
R
S
S
=
∑
i
=
1
N
(
y
i
−
y
^
i
)
2
RSS = \sum_{i=1}^{N} (y_i - \hat{y}_i)^2
RSS=i=1∑N(yi−y^i)2
其中:
- ( y i y_i yi ) 是第 ( i i i ) 个观测值(实际值)。
- ( y ^ i \hat{y}_i y^i) 是通过模型预测的第 ( i i i) 个值。
- (
N
N
N ) 是总观测数。
残差平方和是衡量线性回归模型准确性的一种重要指标。它反映了模型预测值与实际观测值之间的差异。
②. 衡量模型准确性的方式
- 误差的度量:RSS 量化了模型的预测误差,越小的 RSS 表示模型的预测值与实际值越接近,表明模型的拟合效果越好。
- 反映模型的健壮性:如果 RSS 很大,说明模型未能有效捕捉数据的趋势,可能是由于模型的选择不当(如遗漏了重要变量、选择了不合适的模型等)。
- 用于模型比较:在比较不同模型的拟合效果时,RSS 可以作为一个指标,通常选择 RSS 较小的模型作为更优的模型。
③. 限制
尽管 RSS 是衡量模型准确性的一个重要指标,但它并不是唯一的标准,其局限性包括:
- 对样本大小敏感:RSS 的绝对值受到样本大小的影响,较大的样本可能导致较大的 RSS。因此,在比较模型时,通常需要标准化(如均方误差 MSE)。
- 未考虑模型复杂性:仅依赖 RSS 可能导致过拟合,因为复杂模型可能在训练数据上获得较小的 RSS,但在新数据上的泛化能力较差。
④. 相关指标
为了克服 RSS 的一些局限性,通常会使用其他指标进行补充评估:
-
均方误差(MSE):MSE 是 RSS 除以样本数量 ( N N N ),它提供了平均预测误差。
M S E = R S S N MSE = \frac{RSS}{N} MSE=NRSS -
决定系数(R²):R² 衡量模型解释的方差比例,范围在 0 到 1 之间。它可以帮助判断模型对数据变异的解释能力。其计算方式如下:
R 2 = 1 − R S S T S S R^2 = 1 - \frac{RSS}{TSS} R2=1−TSSRSS
MSE越小越好,R² 越接近1越好
其中: -
( RSS ) 是残差平方和,表示模型预测值与实际值之间的差异。
-
( TSS ) 是总平方和, T S S TSS TSS = ∑ i = 1 N ( y i − y ˉ ) 2 \sum_{i=1}^{N} (y_i - \bar{y})^2 ∑i=1N(yi−yˉ)2。表示实际值与实际均值之间的总变异。
-
R² 的值范围:R² 的值范围在 0 到 1 之间。
- ( R 2 R^2 R2 = 1 ) 表示模型完美拟合,所有预测值与实际值完全相等。
- ( R 2 R^2 R2 = 0 ) 表示模型没有解释任何方差,模型的预测效果不佳。
-
R² < 0:在某些情况下,R² 可能小于零,这通常意味着模型的预测效果比简单地用均值预测还要差。
⑤ 总结
- OLS 是一种方法,用于估计线性回归模型的参数,目标是最小化残差平方和。
- RSS 是衡量模型预测准确性的一种指标,反映了实际观测值与预测值之间的差异。
在实践中,使用OLS方法来估计模型参数的过程实际上就是在计算RSS并寻找最小值的过程。因此,OLS和RSS在回归分析中是密切相关的,OLS通过最小化RSS来寻找最佳参数。
线性回归的目的是找到回归系数 ( β 0 \beta_0 β0, β 1 \beta_1 β1, … \dots …, β n \beta_n βn ),使模型的预测值尽量与真实值接近。最终目的是让模型能够很好地概括数据,从而对未见过的数据进行准确的预测。
3. 线性回归的假设
在使用线性回归时,有几个基本假设条件:
- 线性关系:目标变量和自变量之间存在线性关系。
- 正态分布的误差项:残差(实际值与预测值之差)应该是正态分布的。
- 独立误差:残差之间没有自相关性。
- 同方差性:所有自变量的残差的方差是相同的,即残差的方差不随着自变量的变化而变化(即无异方差性问题)。
- 自变量之间无多重共线性:多个自变量之间不应该高度相关。
4. 线性回归的类型
- 简单线性回归:仅有一个自变量的线性回归模型。
y = β 0 + β 1 x 1 + ϵ y = \beta_0 + \beta_1 x_1 + \epsilon y=β0+β1x1+ϵ
- 多元线性回归:有多个自变量的线性回归模型。
y = β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β n x n + ϵ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_n x_n + \epsilon y=β0+β1x1+β2x2+⋯+βnxn+ϵ
5. 线性回归的代码示例
示例 1:简单线性回归
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# 样本数据
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([1.5, 2.5, 3.0, 4.5, 5.5])
# 创建线性回归模型
model = LinearRegression()
model.fit(X, y)
# 打印系数和截距
print("系数:", model.coef_)
print("截距:", model.intercept_)
# 预测值
y_pred = model.predict(X)
# 绘图
plt.scatter(X, y, color="blue", label="实际值")
plt.plot(X, y_pred, color="red", label="预测值")
plt.xlabel("X")
plt.ylabel("y")
plt.legend()
plt.show()
解释:
- 用
LinearRegression().fit(X, y)
方法对样本数据进行拟合,获得模型的系数和截距。 model.coef_
返回回归系数,model.intercept_
返回截距。- 通过
model.predict(X)
进行预测,并将预测值和实际值绘制在同一图上。
结果:
示例 2:多元线性回归
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# 样本数据
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5]])
y = np.dot(X, np.array([1, 2])) + 3 # y = 1*x1 + 2*x2 + 3
# 创建线性回归模型
model = LinearRegression()
model.fit(X, y)
# 打印系数和截距
print("系数:", model.coef_)
print("截距:", model.intercept_)
# 新数据的预测
new_data = np.array([[5, 6]])
prediction = model.predict(new_data)
print("Predicted value:", prediction)
# 绘图
x1_range = np.linspace(1, 5, 100)
fixed_x2 = 6 # 固定 x2 的值
predictions = model.predict(np.column_stack((x1_range, np.full(x1_range.shape, fixed_x2))))
plt.figure(figsize=(10, 6))
plt.plot(x1_range, predictions, color='red', label=f'predict (fixed x2={fixed_x2})')
plt.scatter(X[:, 0], y, color='blue', label='Actual value')
plt.scatter(new_data[0, 0], prediction, color='green', marker='x', s=100, label='new predict value')
plt.title('result')
plt.xlabel('x1')
plt.ylabel('y')
plt.legend()
plt.grid()
plt.show()
解释:
- 这里我们创建了一个包含两个自变量的多元线性回归模型。
- 用
model.coef_
查看回归系数,用model.intercept_
查看截距。 - 通过
model.predict
对新输入的数据进行预测。
结果:
示例 3:带正则化的线性回归(岭回归)
import numpy as np
from sklearn.linear_model import Ridge
# 样本数据
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5]])
y = np.dot(X, np.array([1, 2])) + 3
# 创建带正则化的线性回归模型
ridge_model = Ridge(alpha=1.0)
ridge_model.fit(X, y)
# 打印系数和截距
print("系数:", ridge_model.coef_)
print("截距:", ridge_model.intercept_)
解释:
Ridge
是一种带有L2正则化的线性回归模型,它可以避免模型对多重共线性问题的敏感性。alpha
参数控制正则化的强度,值越大,正则化越强。
6. 线性回归的优点
- 简单易理解:线性回归模型结构简单,易于解释。模型中的系数可以解释每个自变量对因变量的贡献。
- 计算效率高:它的计算复杂度较低,适用于大规模数据集,尤其是在特征数较少时。
适用于线性关系
:当目标变量和自变量之间的关系是线性时,线性回归效果非常好。- 理论基础深厚:线性回归有成熟的理论基础,可以借助统计学方法解释。
7. 线性回归的缺点
- 假设过于严格:线性回归依赖于线性关系、同方差性、正态分布等假设,而在现实中这些假设常常无法满足。
对异常值敏感
:线性回归对离群点(异常值)非常敏感,因为它通过最小化残差平方和来拟合模型,因此异常值可能会对模型造成较大影响。无法处理复杂的非线性关系
:如果目标变量与自变量之间的关系是非线性的,线性回归的表现就会不佳,模型无法捕捉到数据的复杂性。多重共线性问题
:当多个自变量之间高度相关时,回归系数可能会变得不稳定,影响模型的可靠性。- 缺乏灵活性:线性回归不适合处理非线性数据,在某些复杂问题中表现欠佳。
8. 总结
线性回归是一种广泛应用的基础回归算法,适合用于自变量与因变量具有线性关系的数据集
。它的优势在于易于实现和解释,计算复杂度低,适合处理大规模数据集
。然而,线性回归的局限性在于其假设的严格性
以及对异常值
和多重共线性
的敏感性。当面对复杂的非线性问题时,可以考虑其他更为灵活的回归方法或对模型进行扩展,比如多项式回归或正则化技术。
在实际应用中,选择线性回归模型时,应首先检查数据是否满足线性回归的基本假设,并根据实际情况调整模型或选择合适的回归技术。