← 返回数学 English
统计学线性代数优化机器学习基础

最小二乘法

如何用一条直线"最好地"穿过一堆散点?
从零推导,边看边算。

第一部分  从直觉到公式

从"画一条线穿过散点"这个朴素想法出发,一步步翻译成精确的数学

问题登场:穿过散点的直线

假设你做了 5 次实验,每次记录 输入 x输出 y,得到这样 5 个数据点:

你想找一条直线 y = ax + b,让它"最好地"穿过这些点。 但"最好"是什么意思?穿过哪些点?离所有点都尽量近?

⚠️ 问题来了
三个点就已经不可能让一条直线同时穿过它们了——除非它们碰巧共线。 所以"穿过"不是字面意思,而是"尽可能接近"。但怎么量化"接近"?整篇文章就是为了把这个 算出来。
🤔 约定符号
我们有 n 个数据点:(x₁, y₁), (x₂, y₂), …, (xₙ, yₙ)
要找的直线是 ŷ = ax + b(读作"y-hat"),a 是斜率,b 是截距
对每个 xᵢ,直线的预测值是 ŷᵢ = a·xᵢ + b

探索:两个点的世界

先从最简单的情况开始:只有两个数据点

唯一解
ŷ = a·x + b
恰好穿过两个点

平面上两点确定唯一一条直线——这是中学几何。此时方程组的解是精确的,残差为零。

💡 关键事实 ①
两个点 → 两个方程 → 两个未知数 (a, b) → 恰好有解。直线完美穿过两个点。

这在数学上叫"适定问题"(方程数 = 未知数数)。但现实数据很少只有两个点。

第三个点来了——过定义!

现在加入第三个点 (3, 3),和前两个点 (1, 2)、(2, 3.5) 放在一起:

你看:没有一条直线能同时穿过这三个点。方程数(3 个)超过了未知数(2 个),这叫"超定方程组"——通常无解。

⚠️ 靠精确解是不行的
3 个方程、2 个未知数 → 无解。我们必须接受"直线不穿过所有点",转而寻找一个"总体上最好"的折衷方案。
🤔 核心问题
"总体上最好"是什么标准?答案就藏在下面这张图中——竖直虚线的长度。

发现一:误差就是"竖直距离"

对于任意一条候选直线 ŷ = ax + b,定义第 i 个点的残差(residual):

eᵢ = yᵢ − ŷᵢ = yᵢ − (a·xᵢ + b)

残差就是图中竖直虚线的长度——观测值到直线的竖直距离(不是垂直距离!因为 x 是精确的输入,误差只在 y 方向)。

💡 关键事实 ②
每条候选直线对应一组残差 {e₁, e₂, …, eₙ}。线越"好",残差总体上越小。所以找"最好的直线" = 找使残差"总体上最小"的 (a, b)。

发现二:为什么要"平方"?

现在把残差合成一个数,代表"总体误差"。下面是 4 种自然的候选方案:

方案表达式问题
① 直接求和Σ eᵢ正负抵消:+3 和 −3 加起来是 0,看起来"完美"
② 绝对值求和Σ |eᵢ|非处处可导,数学上难处理
平方求和Σ eᵢ²解决以上所有问题
④ 四次方求和Σ eᵢ⁴对离群点过度敏感,且计算更繁
🤔 为什么平方恰好?三条理由

① 正负不能抵消:平方后一切误差都变成正数,大的误差被放大惩罚。

② 处处可导:二次函数光滑,可以放心用微积分求极值。

③ 数学最优:如果误差服从正态分布,平方和最小化等价于最大似然估计——这是高斯在 1809 年证明的。

💡 关键事实 ③
定义 SSE(Sum of Squared Errors,误差平方和):
SSE(a, b) = Σ(yᵢ − a·xᵢ − b)²
最小二乘法的任务就是:找 a 和 b,使 SSE 达到最小值。

发现三:把直觉翻译成数学

SSE(a, b) 是一个以 a 和 b 为自变量的二元二次函数。我们的任务是:

ab,使  SSE(a, b) = Σ(yᵢa·xᵢb)²  达到 最小值
💡 思路大转弯(关键)
"画一条好线" = "让误差平方和最小" = "求一个二元函数的最小值"。后两个问题是精确的数学问题——有标准解法!

二元二次函数的极小值怎么求?微积分告诉我们:偏导数 = 0

SSE(a,b) 是一个开口向上的抛物面,最小值在谷底。

推导:偏导数 → 法方程

把 SSE 展开,然后分别对 a 和 b 求偏导:

展开 SSE
SSE = Σ(yᵢ² − 2a xᵢyᵢ − 2b yᵢ + a²xᵢ² + 2ab xᵢ + b²)
对 b 求偏导,令其 = 0
∂SSE/∂b = Σ(−2yᵢ + 2a xᵢ + 2b) = 0
⇒ a·Σxᵢ + n·b = Σyᵢ
对 a 求偏导,令其 = 0
∂SSE/∂a = Σ(−2xᵢyᵢ + 2a xᵢ² + 2b xᵢ) = 0
⇒ a·Σxᵢ² + b·Σxᵢ = Σxᵢyᵢ
✅ 法方程(Normal Equations)
a·Σxᵢ² + b·Σxᵢ = Σxᵢyᵢ
a·Σxᵢ  + b·n   = Σyᵢ
两个方程、两个未知数——恰好可解!从"无解"的超定方程组出发,我们找到了一个"在最小二乘意义下最优"的确定解。

解这个二元一次方程组,得到经典公式:

a = n·Σxᵢyᵢ − (Σxᵢ)(Σyᵢ)n·Σxᵢ² − (Σxᵢ)²     b = (Σxᵢ²)(Σyᵢ) − (Σxᵢ)(Σxᵢyᵢ)n·Σxᵢ² − (Σxᵢ)²
🤔 等价写法(更易记)
用均值 x̄ = Σxᵢ/nȳ = Σyᵢ/n
a = Σ(xᵢ − x̄)(yᵢ − ȳ) / Σ(xᵢ − x̄)²
b = ȳ − a·x̄
斜率 a = "x 和 y 的协方差 / x 的方差"。截距 b 保证直线穿过重心 (x̄, ȳ)。

动手算一遍:5 个数据点

回到文章开头那 5 个点:(1, 2), (2, 3), (3, 5), (4, 4), (5, 6)。一步步代入公式:

ixᵢyᵢxᵢ²xᵢyᵢ
11212
22346
335915
4441616
5562530
Σ15205569
代入公式求 a
a = (5×69 − 15×20) / (5×55 − 15²)
= (345 − 300) / (275 − 225)
= 45 / 50 = 0.9
代入求 b
b = ȳ − a·x̄ = (20/5) − 0.9×(15/5)
= 4 − 0.9×3 = 4 − 2.7 = 1.3
验证 SSE
iyᵢŷᵢ=0.9xᵢ+1.3eᵢeᵢ²
122.2−0.20.04
233.1−0.10.01
354.0+1.01.00
444.9−0.90.81
565.8+0.20.04
SSE = Σeᵢ² =1.90
✅ 记下结果
最优直线:ŷ = 0.9x + 1.3,SSE = 1.90。
没有其他任何直线能给出比 1.90 更小的平方误差和。
(不信?去 §⑩ 交互实验室拖滑块试试——偏离 0.9 或 1.3,SSE 一定变大。)

第二部分  深入与推广

从二元一次到矩阵,从计算到几何,从一条线到整个机器学习

推广:矩阵形式

把 n 个方程 yᵢ ≈ a·xᵢ + b 写成矩阵:

yXβ
观测值向量
y = [y₁ y₂ … yₙ]
设计矩阵
X = [x₁ 1; x₂ 1; …; xₙ 1]
参数向量
β = [a b]

目标变成:最小化 ‖y − Xβ‖²(向量长度的平方 = 各分量平方和 = SSE)。

展开:‖y − Xβ‖² = (y − Xβ)ᵀ(y − Xβ) = yᵀy − 2βᵀXᵀy + βᵀXᵀXβ
对 β 求梯度,令其 = 0
∂/∂β [ yᵀy − 2βᵀXᵀy + βᵀXᵀXβ ] = −2Xᵀy + 2XᵀXβ = 0
得出
XᵀX β = Xᵀy
这和 §⑥ 的"法方程"是同一个东西——只是用矩阵语言写出来。
✅ 矩阵形式的解(当 XᵀX 可逆时)
β̂ = (XᵀX)⁻¹ Xᵀy
这个公式只用 4 个矩阵运算就表达了整个最小二乘法!它适用于任意数量自变量(多元线性回归),而不仅仅是一条直线。

几何洞察:投影到列空间

矩阵形式揭示了一个优美的几何解释,它比微积分推导更深刻:

💡 核心洞察:正交投影
ŷ = Xβ̂ 就是观测向量 y 在 X 的列空间上的正交投影
残差向量 e = y − ŷ 与列空间垂直(正交),这就是"最小"的几何本质——直角三角形的斜边最短。

正交性意味着:Xᵀe = 0Xᵀ(y − Xβ̂) = 0XᵀXβ̂ = Xᵀy

看——法方程不是从微积分"碰巧"算出来的,而是"残差与列空间正交"这个几何事实的直接翻译。

🤔 为什么这是"最好"的?
在 n 维空间中,观测向量 y 是固定的。X 的列空间是一个二维平面(由列向量张成)。y 到这个平面的最短距离就是垂线长度。垂足的坐标就是 β̂——它是平面中离 y 最近的点。没有任何其他点在更小的距离内。

交互实验室:亲手感受最小二乘

拖动滑块改变 斜率 a截距 b,观察误差平方和 SSE 的变化。点"最优解"回到最小二乘解。

SSE = 1.90
⚠️ 试试看
把 a 从 0.9 调成 1.5 —— SSE 从 1.90 涨到多少?再把 b 从 1.3 调到 0 —— 又涨到多少?你会发现 a=0.9, b=1.3 的 SSE 确实是最小的。这就是最小二乘法的力量:它找到了唯一的全局最小点。

跨领域彩蛋:最小二乘无处不在

最小二乘法不是统计学的专利——它是整个数据科学的"通用语言"。用同一个 XᵀXβ = Xᵀy,你可以:

多项式拟合
ŷ = a₀ + a₁x + a₂x² + …
设计矩阵加列即可
物理实验
弹簧 F = k·x
测多组 (x,F) 拟合 k
输入层 输出层
线性回归 / 机器学习
最小二乘 = 损失函数为 MSE 的监督学习
信号处理 · 卡尔曼滤波计量经济学 · 因果推断图像处理 · 去噪
更多等价问题
所有"超定方程组求最优近似解"本质上都是最小二乘
💡 这就是数学的"复用"之美
同一个 XᵀXβ = Xᵀy,弹簧刚度系数 = 斜率 a,GDP 增长率 = 斜率 a,房价与面积的系数 = 斜率 a。物理定律、经济规律、机器学习模型——内核都是同一套数学。

全篇地图:你从零推导了最小二乘法

回头看第 ⓪ 节的问号——那个""现在已经变成了精确的数值:ŷ = 0.9x + 1.3, SSE = 1.90

⓪ 问题:散点 → 找"最好的"直线
①② 探索:2 点有解 → 3 点无解,必须折衷
③④ 翻译:误差 = 竖直距离 → 平方和 SSE
⑤⑥ 求解:∂SSE/∂a = ∂SSE/∂b = 0 → 法方程
⑦ 验证:5 个点代入 → a=0.9, b=1.3, SSE=1.90 ✓
⑧ 推广:矩阵形式 XᵀXβ = Xᵀy → β̂ = (XᵀX)⁻¹Xᵀy
⑨ 洞察:正交投影 → 残差 ⟂ 列空间
⑩⑪ 延伸:交互验证 + 跨领域映射(物理 · 经济 · ML)
✅ 你现在已经能……
  • 从散点图出发,写出 SSE(a, b) = Σ(yᵢ − axᵢ − b)²
  • 对 a 和 b 求偏导,推导出法方程
  • 用具体数据算出最优斜率和截距
  • 理解矩阵形式 β̂ = (XᵀX)⁻¹Xᵀy 的来历
  • 用几何语言解释:ŷ 是 y 在列空间上的正交投影
  • 认出所有"超定方程组最优近似"= 最小二乘