JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

最小二乘:把直线拟合到数据

当数据杂乱且方程过定,使得 Ax = b 没有精确解时,最小二乘会找出最好的近似解。从几何上看,它把 b 投影到列空间上;正规方程让它变得可计算——这正是把直线拟合到数据的方法。

当根本没有精确解时

真实数据不会乖乖落在一条完美的直线上。假设你测了许多点,想用一条直线穿过它们。把「这条直线恰好经过每一个点」写出来,会得到一个方程比未知数多的方程组 A x = b——这就是过定的。几乎总是没有精确解;噪声让这些方程互相矛盾。

fit y = m*t + c to three points:
  (t,y) = (0,1), (1,2), (2,2)

[0 1][m]   [1]
[1 1][c] = [2]    <- 3 equations, 2 unknowns
[2 1]      [2]       no exact (m,c) hits all three
方程比未知数多:通常无法精确求解。

退而求其次:要最接近的

如果你打不中 b 本身,那就改打够得着的最近的点。你能造出的每一个 A x 都住在 A 的列空间里——也就是 A 各列的所有组合构成的集合。而你真正想要的 b,通常落在那个空间之外最小二乘挑选这样的 x:让它的 A x 离 b 最近,用总平方误差来衡量。

正规方程

怎样把「误差垂直于列空间」变成能算的东西?A 的每一列都必须与误差 b - A x 正交,也就是 A^T (b - A x) = 0。整理一下,就是著名的正规方程:A^T A x = A^T b。这下成了一个方阵的、可解的方程组,求出最佳的 x。

  1. 由数据矩阵 A 和目标 b 构造 A^T A 与 A^T b。
  2. 解方阵方程组 A^T A x = A^T b 得到 x(直线的斜率与截距)。
  3. 这个 x 使总平方误差最小——就是你的最佳拟合直线。