当根本没有精确解时
真实数据不会乖乖落在一条完美的直线上。假设你测了许多点,想用一条直线穿过它们。把「这条直线恰好经过每一个点」写出来,会得到一个方程比未知数多的方程组 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。
- 由数据矩阵 A 和目标 b 构造 A^T A 与 A^T b。
- 解方阵方程组 A^T A x = A^T b 得到 x(直线的斜率与截距)。
- 这个 x 使总平方误差最小——就是你的最佳拟合直线。