🤖 第3章 最小二乘学习法
📄 一句话概括

30 个点、最多 12 个多项式基,训练 MSE 从 0.4742 一路降到 0.0369。 每加一个基,训练误差必然不升——这不是模型变好,是解的数学性质。 帽子矩阵幂等误差 1e-15、迹 5.00 等于秩 5,它把 30 维的 y 压到 5 维。 400 次重复里五个参数的估计均值都贴着真值(偏差 4.4e-02), 但标准差从 0.10 到 0.75 不等:无偏不等于准。

📝 本节和前面几节的关系

3.1 给出了闭式解,这一节问的是:这个解有什么性质。 性质决定用法:哪些结论能拿去用,哪些只是数学上好看。 三条最要紧:加基必降(所以不能靠训练误差选模型)、帽子矩阵幂等(所以它是投影)、 无偏但有方差(所以单次结果不可靠)。

一、第一条:加基必降

给最小二乘再加一个基,训练误差一定不增。 原因是新基可以取「和已有基正交」的那一部分,只补上原来解释不了的残差。旧系数一个都不用改, 所以误差只会降、不会升。 Demo 里从 1 个基加到 12 个,MSE 从 0.4742 降到 0.0369,一路单调不增。 注意前两步掉得最狠:一个常数项到「常数加 x」,从 0.4742 掉到 0.0944。因为第一个基只解释均值, 第二个基才开始解释「随 x 变化」这件事。 这条性质经常被误读。「训练误差必降」说明的是解的数学性质,不是模型变好了。 继续加到 12 个基时,n 减 b 已经掉到 18:13 个自由参数去拟合 18 个点。训练误差当然好看, 但这已经是过拟合的前夜。 所以「训练误差不能用来选模型」不是一句口号,它是这条性质的直接推论。你能算的只有训练误差, 而它单调,单调的量没法用来做选择。这就是第 4.3 节非要有交叉验证的原因。

二、第二条:帽子矩阵把 y 压扁

把解代回模型:拟合值等于 A 乘 (A 转置 A) 的逆乘 A 转置,再乘 y。 中间那一坨只和基有关,和 y 无关,记作 H,叫帽子矩阵。因为它是给 y「戴上帽子」的那个算子。 H 有两条硬性质:H 平方等于 H(幂等),H 的转置等于 H(对称)。 幂等的意思是「投一次和投两次一样」,投到子空间里之后,再投就不动了。这正是投影的定义。 Demo 里幂等误差 1e-15,就是浮点零。迹等于 5.00,正好等于 A 的秩(5 个基线性无关)。 迹为什么等于秩?因为 H 的特征值只有 0 和 1,1 的个数就是子空间的维数。 这条性质的实际含义:H 把 30 维的 y 压到 5 维。剩下 25 维被彻底丢掉,丢掉的正是残差。 所以「模型能解释多少」有一个精确说法:自由度是 b,被扔掉的是 n 减 b。 后面算噪声方差的无偏估计要除以 n 减 b,根子就在这里。

三、第三条:无偏,但方差可以很大

把 y 写成「真值加噪声」代进闭式解,可以推出来:估计值的期望等于真值。这叫无偏。 但期望对不等于每次都准,还要看方差。 方差的公式是:噪声方差乘 (A 转置 A) 的逆。注意这里是逆,不是近似。 如果两列基几乎共线,A 转置 A 接近奇异,它的逆的对角元就会非常大。 方差爆炸,单次估计可以偏出真值好几倍。 Demo 的 400 次重复把这个说清楚了:五个参数的均值都在真值附近,偏差 4.4e-02; 但标准差最小的 0.10、最大的 0.75。真值是 0.3 和负 0.4 的那两个,标准差比真值还大, 单跑一次,符号都可能是反的。 所以「无偏」这个性质经常被高估。它说的是「重复无数次取平均会准」,而实际项目只跑一次。 单次场景下更该关心方差, 这也是为什么「稍微有偏但方差小」的估计(比如岭回归)在预测任务上经常赢过最小二乘。

四、顺手能推出的一件事:噪声方差怎么估

残差平方和的期望等于 n 减 b 乘噪声方差。不是 n 乘,是 n 减 b——因为有 b 个自由度被拿去拟合了。 所以噪声方差的无偏估计是「残差平方和除以 n 减 b」。这个数在统计里叫残差均方, 它是很多后续公式的输入:参数的置信区间、预测区间、模型比较的准则,都要用它。 如果误用 n 去除,估出来的噪声方差会系统性偏小。b 相对 n 越大,偏得越狠。 极端情况下 b 等于 n,残差为零,你会得出「噪声为零」这种荒谬结论。 这也解释了为什么「参数多」在统计上要付代价:每多一个参数,就少一个自由度去估噪声。 第 4.3 节的 AIC、交叉验证,本质上都在给「参数多」这件事计价。

五、三条性质各对应一条实践纪律

加基必降,所以不要用训练误差选模型。必须留一份不参与训练的数据,或者用交叉验证。 帽子矩阵幂等,所以记住「模型只能看到子空间」。残差不是失败,是信息: 它告诉你模型的形状覆盖不到哪些变化。看残差图比看总误差有用得多。 无偏但有方差,所以不要相信单次结果。尤其是基接近共线时,系数会剧烈摆动,而预测值可能还算稳。 如果业务要解释系数(比如「这个因素影响多大」),就必须报出方差。 只要预测值,那方差大不是问题,这正是岭回归能用的场景。 「能算出来」和「能解释」是两件事,这一节把它们分开了。

六、动手 Demo:加基必降:0.4742 到 0.0369;帽子矩阵幂等误差 1e-15;偏差 4.4e-02

30 个点、12 个多项式基,真值只有前 5 个非零,噪声标准差 0.3。 先把基的列数从 1 增到 12,看训练 MSE 是否单调;再构造帽子矩阵,检查幂等性与迹; 最后重复 400 次「重新生成噪声、重新求解」,看估计的均值与标准差。

for b in (1, 2, 3, 5, 8, 12):
    A = Phi[:, :b]
    w = np.linalg.lstsq(A, y, rcond=None)[0]
    print(b, np.mean((A @ w - y) ** 2))        # 单调不增

A = Phi[:, :5]
Hm = A @ np.linalg.pinv(A.T @ A) @ A.T        # 帽子矩阵
print(np.abs(Hm @ Hm - Hm).max())              # 幂等:应该近似 0
print(np.trace(Hm))                            # 迹 = 秩 = 5

est = []
for _ in range(400):
    yy = A @ wt[:5] + rg.normal(0.0, 0.3, n)   # 换一批噪声
    est.append(np.linalg.lstsq(A, yy, rcond=None)[0])
print(np.array(est).mean(0), np.array(est).std(0))

实跑输出:

--------------------------------------------------------------------
加基必降:0.4742 到 0.0369;帽子矩阵幂等误差 1e-15;偏差 4.4e-02
--------------------------------------------------------------------
  数据                     30 个点,最多 12 个多项式基
  帽子矩阵                 H 等于 A 乘 (A 转置 A) 的逆乘 A 转置
  幂等误差                 1.50e-15(H 平方减 H 应为 0)
  迹与秩                   迹 5.00,秩 5

  基的个数 b   n 减 b   训练 MSE
  -----------------------------
           1       29     0.4742
           2       28     0.0944
           3       27     0.0655
           5       25     0.0622
           8       22     0.0565
          12       18     0.0369

  真值   400 次估计的均值   标准差
  -------------------------------
   0.5             0.4978   0.0967
  -1.2            -1.1818   0.2790
   0.8             0.8391   0.6267
   0.3             0.2705   0.4234
  -0.4            -0.4445   0.7547

  **第一张表:每加一个基,训练 MSE 一定不增。**
  **这是最小二乘的单调性——新基只补上「原来解释不了的那部分」,旧系数不用动。**
  **但注意 b 从 8 到 12,MSE 从 0.0565 降到 0.0369,而 n 减 b 从 22 掉到 18。**
  **「训练误差必降」不代表「模型必好」,它只是这个解的数学性质。**
  **第二张表是无偏性的实测:五个参数的估计均值都贴着真值,偏差 4.4e-02。**
  **但标准差从 0.10 到 0.75 不等——单跑一次,误差可能是真值的量级。**
  **这就是「无偏但有方差」:平均意义上对,单次不一定对。**
  **帽子矩阵那三个数连起来读:幂等误差 1e-15 说明 H 平方等于 H,迹 5.00 等于秩 5。**
  **迹等于秩,意味着 H 只保留了 5 个自由方向——输入是 30 维,输出被压到 5 维,剩下的 25 维被投影掉了。**
  要说明:**真值参数是我设的**(前 5 个非零),400 次重复是真实跑的。

pinv 而不是 inv。帽子矩阵里 A 转置 A 是 5 乘 5,这里可逆,但写 pinv 更稳: 基一旦共线,inv 会直接报错或给出离谱的数,pinv 给最小范数解。 迹等于 5 这个数,比幂等误差更值得看。它告诉你 H 的秩,也就是模型真正用掉的自由度。 如果有两个基共线,迹会掉到 4——所以「迹」是快速检查基有没有冗余的指标。 第二张表才是这一节的重点。均值一列贴着真值,标准差一列差七倍。 真值 0.3 的那个参数标准差 0.42,真值负 0.4 的那个标准差 0.75。单次估计完全可能给出相反的符号。 为什么这两个方差大?因为它们对应的是 x 的高次项,而多项式基在区间两端高度相关。 A 转置 A 在那一块的逆对角元很大,噪声一放大就摆。这正是共线导致方差爆炸的教科书例子。 要说明:真值参数是我设的(前 5 个非零),400 次重复是真实跑的。 噪声我固定成了高斯分布;换成重尾分布,最小二乘会明显变差,那是第 6 章的内容。

30 秒实验

  1. 把真值前 5 个改成「0.5 和 0.5 两个几乎相同的值」,再看 400 次的标准差。 基接近共线时方差会怎么变?
  2. 把 12 个基全用上,重复 400 次算标准差。 训练误差降到 0.0369 了,标准差是变大还是变小?为什么?
  3. 用「残差平方和除以 n 减 b」估噪声方差,和真值 0.09 比。再把分母换成 n,估出来差多少?

常见误区

  1. 「无偏就一定好」。 无偏说的是期望,方差说的是单次。方差大到一定程度, 无偏的估计还不如一个「稍微有偏但稳定」的估计。岭回归就是用偏差换方差,这是第 4.2 节的主线。
  2. 「帽子矩阵是抽象概念,没什么用」。 它是最小二乘的全部。拟合值等于 H 乘 y,残差等于 (I 减 H) 乘 y,自由度等于 H 的迹。 调参时的有效自由度、影响点诊断,都从这个矩阵来。
  3. 「残差平方和除以 n 就是噪声方差」。 少了 b 个自由度,估出来系统性偏小。b 越大偏得越狠,这是很多人算错误差棒的根源。
  4. 「加基一定让预测更准」。 训练误差必降,预测不一定。加到一定程度,新基主要在拟合噪声,预测误差反而上升, 这就是过拟合。
自测三问(点开对答案) 1. 为什么「加一个基,训练误差必降」? —— **因为可以把这个基相对已有基做正交化,正交化之后它只包含原来残差里的成分。** **用这一部分去拟合残差,误差平方和只会减、不会增,而旧系数完全不用改。** 这是最小二乘作为投影的必然结果。 2. 帽子矩阵的迹为什么等于 A 的秩? —— **因为 H 是投影算子,特征值只有 0 和 1。** **1 的个数就是它能保留的维数,也就是 A 的列张成的子空间维数,即秩。**迹等于特征值之和, 所以迹等于秩。 3. 如果业务要你解释「每一个基的系数是多少」,最小二乘够用吗? —— **要看共线性。**共线时系数方差极大,单次估计可能连符号都不对,直接解释会误导。 **这时候要么报出参数的标准差,要么改用「组」来解释,要么加约束。** **「能算出来」和「能解释」是两件事。**

性质讲完,接下来是工程问题: 当 n 大到内存放不下、b 大到解方程解不动时,怎么办?下一节给出答案: 不看全量,一条一条或一小批一小批地走。

相关笔记