最小二乘 投影
想象太阳在头顶正上方时,空中一个点投在地面上的影子。这个影子是地面上离原来那个点最近的位置,从点落到影子的线总是与地面成直角。这就是投影。不是一个点,而是把几十个数据点用同样的方式一次性投下影子,那就是最小二乘法;离所有点都最近地穿过的直线就是回归线。AI 让模型拟合数据,说到底也就是投下影子这一个动作。
蓝色的点是固定的。用滑块转动过原点的直线的角度,变化就会显现。直线上的金色点是蓝点的影子,也就是直线上离蓝点最近的位置。从蓝点落到影子的红色虚线总是与直线成直角,这就是残差。直线恰好指向蓝点时,残差缩到 0,影子与点重合;直线偏离点越多,残差越长。从原点到影子的金色线段就是投影长度,下方并排写出投影长度 p·u 和残差长度,可以看出两者怎样相互咬合。
这次把直线固定在 30 度,亲手拖动蓝色的点。无论把点挪到哪里,直线上的金色影子都会跟着走,从点落到影子的红色虚线始终与直线成直角。这个直角是关键。当残差与直线垂直时,残差的长度就是点到直线的最短距离;挪到直线上任何其他点,都比它远。把点拖得离直线越远,下方的距离值越大;紧贴直线时,就接近 0。最近和垂直,是同一个事实的两副面孔。
为什么影子的长度是 p·u?把直线取作 x 轴 (u=e1),只用滑块改变长度固定为 3 的蓝色向量的角度 θ。这个向量在 x 轴上的影子长度是 |p|cosθ,竖直落下的红色虚线造出了那段金色影子。θ 为 0 时,向量与直线平行,影子是完整的 3;θ 到 90 度时,向量与直线垂直,影子消失为 0。这个 |p|cosθ 正是内积 p·u 的定义。内积说到底,是一把量一个向量沿另一个向量方向投下的影子长度的尺子。
现在不是一个点,而是七个点。用滑块移动直线的斜率和截距,从每个点落到金色直线的红色竖直虚线就是该点的残差,把它们的平方全部加起来就是 SSE(误差平方和)。直线越好地穿过点群的中央,残差越短,下方的数值越小。先用手找一找最好的直线,再按“最佳拟合”按钮,斜率和截距就会跳到最小二乘公式给出的精确值,误差平方和降到可能的最小值。这就是回归线。比一比你手找的直线离这个值有多近,也是很好的练习。
最后,从几何上看,最小二乘法一行就能收尾。有一个蓝色的目标向量,而模型能做出的,只有金色方向向量所画直线上的点。最好的近似是把目标投影到这条直线上的点,剩下的残差 r=b−p 必须与模型方向垂直。打开开关,那条垂线就以红色虚线出现,下方显示 a·r 接近 0。这个直角条件正是正规方程 aᵀ(b−Ax)=0。第一块里看到的残差正交,在这里原样变成了方程。最小二乘法,永远是把残差垂直地立在模型空间上。