线性代数 · 最小二乘

最小二乘

最小二乘给数据配一条直线,标准是竖直误差的平方和最小。几何上,拟合值是数据向量在列空间上的投影,误差和列空间垂直。

最小二乘与本页画面

三个点很少正好在一条直线上,所以任何一条直线都会错过其中一些点。左图是数据点、最佳直线和它的残差,也就是竖直方向上的偏差,它们的平方加起来就是SSE。右图把同样的三个高度画成空间里的一个向量,找最佳直线就是把这个向量投影到一块平面上。你可以拖动数据点,试一条自己的直线,也可以比较两种更简单的模型。

残差平方和
SSE=∑i=13(yi−c−mxi)2\mathrm{SSE} = \sum_{i=1}^{3} (y_i - c - m x_i)^2

数据怎么会是一个点?把三个高度写成一个向量b⃗=(y1,y2,y3)\vec b = (y_1, y_2, y_3),就是右图那支蓝色箭头。右图的三根轴叫y1,y2,y3y_1, y_2, y_3,因为每一根量的都是一个高度。一条直线在三个xix_i处的取值是c+mxic + m x_i,合起来就是向量c 1+m x⃗c\,\mathbf 1 + m\,\vec x,其中1=(1,1,1)\mathbf 1 = (1, 1, 1)。先看一般直线y=c+mxy = c + mx,并且xix_i不全相同。cc和mm取遍所有数,这些向量就铺满过1\mathbf 1和x⃗\vec x的那块玻璃平面。所以左图里能画的每一条直线,都是这块平面上的一个点。

随便取一条直线,它的残差就是b⃗\vec b的坐标减去它在平面上那个点的坐标,所以它的SSE正是这两点距离的平方。于是最佳直线落在平面上离b⃗\vec b最近的点p⃗\vec p,也就是正交投影。残差向量r⃗=b⃗−p⃗\vec r = \vec b - \vec p和平面垂直,因此同时垂直于1\mathbf 1和x⃗\vec x。把这两个直角写出来,就是正规方程:

正规方程
r⃗⋅1=∑ri=0,r⃗⋅x⃗=∑xiri=0\vec r\cdot\mathbf 1 = \sum r_i = 0, \qquad \vec r\cdot\vec x = \sum x_i r_i = 0

打开“直角与平衡”,残差变成一根根刚度相同的竖直弹簧。合力与∑ri\sum r_i成正比,绕原点的力矩与∑xiri\sum x_i r_i成正比。一般直线的最佳拟合让两者都为0。常数模型只要求合力为0,过原点的模型只要求力矩为0。

“你的直线”画成红色,它总是当前模型里的一条直线,所以它对应的点q⃗\vec q和p⃗\vec p在同一块平面或同一条直线上。从p⃗\vec p到q⃗\vec q这一步也在那里,r⃗\vec r又和它垂直,勾股定理正好把你的误差分成两部分。只有q⃗=p⃗\vec q = \vec p时,你的SSE才等于最小值。

你的直线和最佳直线
SSE(q⃗)=SSEmin⁡+∣p⃗−q⃗∣2\mathrm{SSE}(\vec q) = \mathrm{SSE}_{\min} + |\vec p - \vec q|^2

两种小模型各只留一列。拟合y=cy = c是把b⃗\vec b投影到过1\mathbf 1的直线上,得到的cc正是三个高度的平均数。拟合y=mxy = mx是投影到过x⃗\vec x的直线上,xix_i全为0时只剩原点。只要xix_i不全相同,这就是平面里两条不同的直线。哪个模型都不包含另一个,一般直线至少和两者一样好。线性回归的核心也是同一个投影。

值得注意

  • 残差是竖直的。最小二乘量的是每个xx处yy差多少,不是点到直线的最短距离。
  • 在一般直线模型中,三个xix_i都相同时,平面缩成过1\mathbf 1的那条直线。凡是过空心圈的直线都一样好,最佳直线不唯一,p⃗\vec p却仍然唯一。
  • “参数平面”把一般直线模型的SSE画成cc和mm的函数。每个数据点在那里对应一条直线,线上每一对(c,m)(c, m)给出的直线都正好穿过这个点。蓝色标出当前模型的最佳参数。

操作

  • 右图只能转动和缩放。在左图上下拖点;要左右移动一个点,在面板里输入它的xx。

相关概念