AIGC标识 机器学习数学基础专题【左扬精讲】—— 最小二乘法:线性回归的闭式解与矩阵推导

机器学习数学基础专题【左扬精讲】— 最小二乘法:线性回归的闭式解与矩阵推导

在机器学习和数据分析领域,最小二乘法(Least Squares Method)是最基础、最重要的参数估计方法之一。它贯穿于线性回归、多项式拟合、曲线拟合等各种场景。本篇文章将系统讲解最小二乘法的数学原理、几何意义、推导过程,以及在实际问题中的应用。

最小二乘法 线性回归 参数估计 误差平方和 矩阵求解

学习重点

必须掌握:

  • 最小二乘法的核心思想:最小化误差平方和
  • 一元线性回归的正规方程推导
  • 矩阵形式下的最小二乘解
  • 最小二乘法的局限性(病态矩阵、过拟合)

需要了解:

  • 最小二乘法的历史背景(高斯-马尔可夫定理)
  • 加权最小二乘法
  • 正则化对最小二乘法的改进

一、最小二乘法的起源与核心思想

What — 最小二乘法是什么?

最小二乘法(Least Squares Method)是一种数学优化技术,通过最小化误差的平方和来寻找数据的最佳函数匹配。给定一组观测数据点 (x₁, y₁), (x₂, y₂), ..., (xₙ, yₙ),最小二乘法试图找到一条曲线(或直线),使得所有数据点到这条曲线的垂直距离的平方和最小

Why — 为什么需要最小二乘法?

在科学实验、工程测量、金融分析等场景中,我们经常需要从带有噪声的观测数据中推断出潜在的规律。例如:

  • 天文学家通过观测数据拟合行星轨道
  • 工程师通过实验数据确定材料参数
  • 经济学家通过历史数据预测趋势

最小二乘法提供了一种系统化、可计算的方法,从噪声数据中提取真实信号。

没有最小二乘法会发生什么?

  • 只能依靠主观判断拟合曲线,无法量化"最佳"的含义
  • 无法处理观测数量多于未知参数的情况(超定系统)
  • 无法给出唯一的最优解,不同方法可能得到完全不同的结果
历史渊源:高斯与勒让德的贡献

最小二乘法最早由勒让德(Legendre)于 1805 年发表,但高斯(Gauss)在 1809 年的著作中给出了更完整的理论推导。高斯声称自己从 1795 年起就使用这种方法,但未及时发表。这场"发明权"之争持续至今,但两位数学家的贡献都已载入史册。

值得一提的是,高斯使用最小二乘法成功预测了谷神星(Ceres)的轨道。1801 年,天文学家发现了一颗新小行星,但在跟踪几周后它消失在了太阳的光芒中。正是高斯应用最小二乘法,仅凭 3 次观测数据就计算出了谷神星的轨道,使天文学家在预言的位置重新发现了它。

二、一元线性回归的最小二乘法

What — 一元线性回归模型

一元线性回归是最简单的最小二乘应用。假设我们有以下数据:

yᵢ = β₀ + β₁ xᵢ + εᵢ    (i = 1, 2, ..., n)

其中 β₀ 是截距,β₁ 是斜率,εᵢ 是误差项。我们的目标是找到 β̂₀β̂₁,使得残差平方和最小:

S(β₀, β₁) = Σ(yᵢ - β₀ - β₁ xᵢ)²    (i = 1, 2, ..., n)

How — 正规方程的推导

为了找到 S 的最小值,我们对 β₀ 和 β₁ 分别求偏导,并令其为零:

∂S/∂β₀ = -2 Σ(yᵢ - β₀ - β₁ xᵢ) = 0

∂S/∂β₁ = -2 Σ xᵢ (yᵢ - β₀ - β₁ xᵢ) = 0

从第一个方程可以解出:

β₀ = ȳ - β₁ x̄

其中 x̄ = (1/n) Σ xᵢȳ = (1/n) Σ yᵢ

代入第二个方程,最终得到斜率的解:

β̂₁ = Σ(xᵢ - x̄)(yᵢ - ȳ) / Σ(xᵢ - x̄)² = Cov(x, y) / Var(x)

β̂₀ = ȳ - β̂₁ x̄

一元线性回归最小二乘解速记口诀

1 个公式:斜率 = 协方差 / 方差

2 个参数β̂₁ = Σ(xᵢ-x̄)(yᵢ-ȳ) / Σ(xᵢ-x̄)²β̂₀ = ȳ - β̂₁ x̄

3 步走:计算均值 → 计算斜率 → 计算截距

三、最小二乘法的矩阵推导

What — 多元线性回归的矩阵形式

对于多元线性回归,模型可以写成矩阵形式:

𝐲 = 𝐗 β + ε

其中:

  • 𝐲 是 n × 1 的观测向量
  • 𝐗 是 n × (p+1) 的设计矩阵(包含截距列)
  • β 是 (p+1) × 1 的参数向量
  • ε 是 n × 1 的误差向量

How — 正规方程的矩阵推导

残差平方和写成矩阵形式:

S(β) = (𝐲 - 𝐗 β)ᵀ (𝐲 - 𝐗 β)

对 β 求导并令其为零:

∂S/∂β = -2 𝐗ᵀ (𝐲 - 𝐗 β) = 0

整理得到正规方程(Normal Equation)

𝐗ᵀ 𝐗 β = 𝐗ᵀ 𝐲

如果 𝐗ᵀ 𝐗 可逆,解为:

β̂ = (𝐗ᵀ 𝐗)⁻¹ 𝐗ᵀ 𝐲

关于矩阵求逆的注意事项

计算 (𝐗ᵀ 𝐗)⁻¹ 在实际应用中有几个问题:

  • 计算复杂度:矩阵求逆是 O(n³) 级别,当维度很高时计算量巨大
  • 数值稳定性:如果 𝐗ᵀ 𝐗 接近奇异矩阵(病态矩阵),求逆会放大数值误差
  • 解决方案:使用 QR 分解、奇异值分解(SVD)或加入正则化项

四、最小二乘法的几何意义

What — 最小二乘法的空间解释

从几何角度理解,最小二乘法是在高维空间中寻找最优投影。设 𝐲 是观测向量,𝐗 的列空间是 C(𝐗)。最小二乘解 𝐲̂ = 𝐗 β̂ 是 𝐲 在 C(𝐗) 上的正交投影

Why — 为什么是正交投影?

最小二乘法的目标是使残差 𝐫 = 𝐲 - 𝐗 β̂ 最小。几何上,这意味着:

  1. 残差向量 𝐫 必须与列空间 C(𝐗) 正交
  2. 𝐗ᵀ 𝐫 = 0
  3. 这正是正规方程 𝐗ᵀ 𝐗 β̂ = 𝐗ᵀ 𝐲 的来源

用 ASCII 图示说明:


    y (观测向量)
      \
       \  ← 残差 r (正交于列空间)
        \
   C(X)   \      .___________
   (列空间) \   /   ↑        \
    平面   \  /    | 投影 ŷ   \
     ↖____\ /_____β̂(X)_______↗
           ↑ 正交投影
投影矩阵的性质

投影矩阵 𝐏 = 𝐗 (𝐗ᵀ 𝐗)⁻¹ 𝐗ᵀ 具有以下性质:

  • 幂等性𝐏² = 𝐏(投影两次等于投影一次)
  • 对称性𝐏ᵀ = 𝐏
  • 值域C(𝐏) = C(𝐗)

这些性质在理论推导和实际计算中都非常有用。

五、最小二乘法的 Python 实现

方式一:手写实现

首先,让我们从零开始实现最小二乘法,理解每一步的计算过程。

import numpy as np

def least_squares_manual(X, y):
    """
    手动实现最小二乘法
    
    参数:
       X: 特征矩阵 (n_samples, n_features)
       y: 目标向量 (n_samples,)
    返回:
       beta: 回归系数 (n_features,)
    """
    # 计算正规方程的解
    XtX = X.T @ X  # X^T * X
    Xty = X.T @ y  # X^T * y
    
    # 检查矩阵是否奇异
    if np.linalg.matrix_rank(XtX) < XtX.shape[0]:
        print("警告: X^T X 是奇异矩阵,使用伪逆求解")
    
    # 求解正规方程: X^T X beta = X^T y
    beta = np.linalg.solve(XtX, Xty)
    
    return beta

# 示例用法
X = np.array([[1, 1], [1, 2], [1, 3], [1, 4], [1, 5]])
y = np.array([2.1, 4.0, 5.8, 8.2, 9.9])

beta = least_squares_manual(X, y)
print(f"截距: {beta[0]:.4f}")
print(f"斜率: {beta[1]:.4f}")

方式二:使用 NumPy 广播实现

NumPy 的广播机制让我们可以写出更直观的代码:

import numpy as np

def least_squares_numpy(X, y):
    """
    使用 NumPy 广播实现最小二乘法
    
    仅适用于一元线性回归(单特征)
    """
    x_mean = np.mean(X[:, 1])  # 跳过截距列
    y_mean = np.mean(y)
    
    # 计算斜率: sum((x - x_mean)(y - y_mean)) / sum((x - x_mean)^2)
    numerator = np.sum((X[:, 1] - x_mean) * (y - y_mean))
    denominator = np.sum((X[:, 1] - x_mean) ** 2)
    slope = numerator / denominator
    
    # 计算截距: y_mean - slope * x_mean
    intercept = y_mean - slope * x_mean
    
    return np.array([intercept, slope])

# 一元线性回归示例
X = np.array([[1, 1], [1, 2], [1, 3], [1, 4], [1, 5]])
y = np.array([2.1, 4.0, 5.8, 8.2, 9.9])

beta = least_squares_numpy(X, y)
print(f"结果: 截距={beta[0]:.4f}, 斜率={beta[1]:.4f}")

技巧:使用 NumPy 内置函数

在实际应用中,直接使用 NumPy 的 np.linalg.lstsq() 是最推荐的做法,它使用了数值稳定性更好的 SVD 分解:

import numpy as np

def least_squares_lstsq(X, y):
    """
    使用 NumPy lstsq 实现最小二乘法(推荐方式)
    
    优势:
    - 数值稳定(使用 SVD 分解)
    - 处理奇异矩阵(返回最小范数解)
    - 可处理超定和欠定系统
    """
    beta, residuals, rank, s = np.linalg.lstsq(X, y, rcond=None)
    return beta

# 对比测试
X = np.array([[1, 1], [1, 2], [1, 3], [1, 4], [1, 5]])
y = np.array([2.1, 4.0, 5.8, 8.2, 9.9])

beta = least_squares_lstsq(X, y)
print(f"系数: {beta}")
print(f"残差平方和: {np.sum((y - X @ beta) ** 2):.6f}")

六、最小二乘法的局限性与改进

局限性一:病态矩阵问题

𝐗ᵀ 𝐗 的特征值差异很大时,矩阵是病态的(ill-conditioned)。即使 𝐗 中的数据有微小的测量误差,求解出的 β̂ 也可能产生巨大偏差。

局限性二:过拟合风险

当特征数量接近或超过样本数量时,最小二乘法容易过拟合,模型在训练数据上表现很好,但在新数据上泛化能力差。

局限性三:异方差问题

当误差项的方差不是常数(即异方差)时,最小二乘估计虽然无偏,但不再是方差最小的最优估计。

改进一:岭回归(Ridge Regression)

在正规方程中加入 L2 正则化项:

(𝐗ᵀ 𝐗 + λ 𝐈) β = 𝐗ᵀ 𝐲

正则化项 λ 𝐈 改善了矩阵的条件数,使求逆更加稳定。

import numpy as np

def ridge_regression(X, y, lambda_reg):
    """
    岭回归实现
    
    解决病态矩阵和过拟合问题
    """
    n_features = X.shape[1]
    # 正规方程 + L2 正则化
    XtX = X.T @ X + lambda_reg * np.eye(n_features)
    Xty = X.T @ y
    
    beta = np.linalg.solve(XtX, Xty)
    return beta

# 示例:高相关特征
X = np.array([[1, 1.01], [1, 1.99], [1, 3.02], [1, 4.01], [1, 5.0]])
y = np.array([2.1, 4.0, 5.8, 8.2, 9.9])

# 普通最小二乘(病态)
beta_ls = np.linalg.solve(X.T @ X, X.T @ y)
# 岭回归(正则化)
beta_ridge = ridge_regression(X, y, lambda_reg=0.1)

print(f"普通最小二乘: {beta_ls}")
print(f"岭回归: {beta_ridge}")

改进二:加权最小二乘法(WLS)

对于异方差问题,给每个观测赋予不同的权重:

β̂ = (𝐗ᵀ 𝐖 𝐗)⁻¹ 𝐗ᵀ 𝐖 𝐲

其中 𝐖 是对角权重矩阵。

七、高斯-马尔可夫定理

What — 高斯-马尔可夫定理的内容

高斯-马尔可夫定理(Gauss-Markov Theorem)是最小二乘法的理论基础。它指出:在满足以下假设的情况下,最小二乘估计是线性无偏估计中方差最小的(Best Linear Unbiased Estimator, BLUE):

高斯-马尔可夫假设

  1. 线性于参数𝐲 = 𝐗 β + ε
  2. 随机抽样:观测值相互独立
  3. 条件均值为零E(ε | 𝐗) = 0
  4. 同方差Var(ε | 𝐗) = σ² 𝐈
  5. 无完全多重共线性:𝐗 列满秩

高斯-马尔可夫定理总结

在上述假设成立时,最小二乘估计 β̂ = (𝐗ᵀ 𝐗)⁻¹ 𝐗ᵀ 𝐲 具有以下性质:

  • 线性(Linear):β̂ 是 𝐲 的线性函数
  • 无偏(Unbiased)E(β̂) = β
  • 方差最小(Best):在所有线性无偏估计中方差最小

这就是 BLUE(Best Linear Unbiased Estimator)的含义。

FAQ 常见问题解答

Q1. 最小二乘法只能用于线性回归吗?

不是。最小二乘法可以应用于任何形式的模型,只要模型对参数是线性的。对于非线性模型(如多项式回归、对数回归),仍然可以使用最小二乘法,只是需要通过迭代优化来求解。

Q2. 最小二乘法和最大似然估计有什么区别?

本质相同。当误差服从正态分布时,最小二乘估计和最大似然估计(MLE)是等价的。最大似然估计从概率角度出发,最小二乘估计从几何角度出发。

Q3. 什么时候应该用最小二乘法而不是梯度下降?

数据量较小且矩阵可逆时。对于小规模问题(样本数 < 10,000),直接求解正规方程通常比迭代方法更快。当数据量很大或矩阵病态时,梯度下降更合适。

Q4. 如何判断最小二乘模型是否合适?

看残差分析。检查残差是否符合假设:均值接近零、同方差、无自相关。如果违反假设,需要考虑加权最小二乘法或使用其他回归方法。

Q5. 最小二乘法对异常值敏感吗?

非常敏感。因为平方项会放大大误差的影响。一个极端异常值可能导致整个拟合结果偏离。可以使用鲁棒回归(如 Huber 回归)来降低异常值的影响。

Q6. 正规方程和梯度下降哪个更常用?

取决于场景。在教学中,正规方程更常见,因为可以给出解析解。在工业界,梯度下降(尤其是随机梯度下降)更常用,因为它可以处理大规模数据并且内存效率更高。

Q7. 为什么要对特征做标准化?

防止数值问题和加速收敛。特征尺度差异大时,𝐗ᵀ 𝐗 的条件数会很差,求解不稳定。使用标准化可以改善条件数,使数值计算更稳定。

Q8. 最小二乘法的计算复杂度是多少?

O(n · p² + p³)。其中 n 是样本数,p 是特征数。计算 𝐗ᵀ 𝐗 需要 O(n · p²),求逆需要 O(p³)。

Q9. 什么是伪逆?什么时候使用?

Moore-Penrose 伪逆。当 𝐗 不是列满秩时,(𝐗ᵀ 𝐗)⁻¹ 不存在,此时使用伪逆 𝐗⁺ = (𝐗ᵀ 𝐗)⁻¹ 𝐗ᵀ 可以得到最小范数解。

Q10. 最小二乘法和 Lasso 回归有什么区别?

正则化方式不同。最小二乘法没有正则化,Lasso 使用 L1 正则化会产生稀疏解(部分系数为零),适合特征选择。岭回归使用 L2 正则化,系数收缩但不为零。

Q11. 如何处理多重共线性问题?

三种常用方法。① 使用岭回归添加 L2 正则化;② 使用主成分回归(PCR)降维;③ 使用偏最小二乘(PLS)回归。

Q12. 最小二乘法要求误差正态分布吗?

不是必要条件。误差正态分布是使得最小二乘估计也是最大似然估计的必要条件,但高斯-马尔可夫定理只要求误差同方差、无自相关、不相关于特征即可。

Q13. 过拟合和欠拟合的区别是什么?

过拟合是模型在训练数据上表现太好,在新数据上表现差;欠拟合是模型在训练数据和新数据上都表现不好。可以通过增加正则化或减少特征来解决过拟合。

Q14. 残差和误差项有什么区别?

残差是观测值与拟合值的差(可观测),误差项是真实值与期望值的差(不可观测)。残差是误差项的估计。

Q15. 什么是 R² 决定系数?

R² = 1 - SS_res / SS_tot。表示模型解释的方差占总方差的比例。SS_res 是残差平方和,SS_tot 是总平方和。R² 越接近 1,模型拟合越好。

Q16. 调整 R² 和普通 R² 有什么区别?

调整 R² 考虑了特征数量的惩罚。普通 R² 会随着特征增加而增加(即使特征无用),调整 R² 在特征无用时会降低,更适合模型选择。

Q17. 最小二乘法可以用于分类问题吗?

可以但不推荐。可以用最小二乘法拟合分类标签(如 Fisher 线性判别),但 logistic 回归在分类问题上更常用,因为它输出概率且对异常值更鲁棒。

Q18. 什么是奇异值分解(SVD)?为什么用它解最小二乘?

SVD 是矩阵分解方法。任何矩阵都可以分解为 𝐗 = 𝐔 Σ 𝐕ᵀ,最小二乘解为 β̂ = 𝐕 Σ⁻¹ 𝐔ᵀ 𝐲。SVD 的优势是数值稳定且能处理奇异矩阵。

Q19. 如何选择正则化参数 λ?

常用交叉验证。通过 K 折交叉验证,尝试不同的 λ 值,选择使验证集误差最小的 λ。λ 太大导致欠拟合,太小则正则化效果不明显。

Q20. 最小二乘法的最新发展是什么?

分布式和在线学习。对于超大规模数据,分布式最小二乘法(如 ADMM 算法)和在线最小二乘法(递归最小二乘法)成为研究热点。

本文核心知识点回顾

  • 1 个目标:最小化残差平方和 RSS
  • 2 种形式:一元线性回归的解析解 + 多元线性回归的正规方程
  • 3 个假设:线性、同方差、无自相关
  • 4 种改进:岭回归、Lasso、弹性网、加权最小二乘
  • 5 个性质:线性、无偏、方差最小(BLUE)

Roadmap 后续预告

在理解了最小二乘法之后,下一篇我们将学习梯度下降算法。梯度下降是优化领域最基础也是最重要的算法,它不仅是训练神经网络的核心方法,也是求解大规模最小二乘问题的利器。我们将深入探讨:

  • 梯度下降的数学原理与几何直觉
  • 批量梯度下降、随机梯度下降、小批量梯度下降的区别
  • 学习率衰减与自适应学习率方法
  • 梯度下降与最小二乘法的联系与区别
posted @ 2026-07-10 17:41  左扬  阅读(30)  评论(0)    收藏  举报