← 返回模块
Q2.6.1.4beta 可读 · 未来付费校验通过内容版本 2026-05-26

正则化与模型选择

2.6.1 · 监督学习基础 · 数学与统计能力

正则化与模型选择

Hook:一次「翻牌」事件

你在上海一家私募基金负责沪深300 选股策略。上周你按第 3 课的做法,用普通最小二乘(ordinary least squares, OLS)把 5 个 Barra 风格因子——估值、质量、动量、规模、低波动——回归到下一期超额收益上,得到一组 β^OLS\hat{\beta}_{\mathrm{OLS}}。这周把估计窗口前移 5 个交易日重跑,价值因子载荷从 +0.18+0.18 翻成 0.05-0.05,质量因子从 +0.04+0.04 跳到 +0.21+0.21。研究员第一反应是「数据是不是错了」。你回查原始数据:估值因子与质量因子的样本相关系数稳定在 0.72,正规方程(normal equations)里那个 XXX^\top X 的条件数(condition number)超过 600。结论不是 OLS 「算错了」,而是它的协方差矩阵(covariance matrix) σ2(XX)1\sigma^2 (X^\top X)^{-1} 在共线性方向上被放大了几十倍。这一课要回答:对 OLS 做最小限度的改动,把这个方差压下来,应该怎么改?答案分两步——岭回归(ridge regression)控制方差,5 折交叉验证(5-fold cross-validation)选择控制强度。

把 ERM 加一项罚

第 1 课的经验风险最小化(empirical risk minimization, ERM)只看训练误差:

h^ERM=argminhHR^n(h).\hat{h}_{\mathrm{ERM}} = \arg\min_{h \in \mathcal{H}}\, \widehat{R}_n(h).

只要 H\mathcal{H} 容量够大,R^n(h)\widehat{R}_n(h) 总能压到 0——这就是第 2 课的过拟合现象。正则化 ERM 在目标函数上多加一项​​复杂度惩罚​ Ω(h)\Omega(h)

h^λ=argminhH{R^n(h)+λΩ(h)}.\hat{h}_\lambda = \arg\min_{h \in \mathcal{H}} \Big\{ \widehat{R}_n(h) + \lambda\, \Omega(h) \Big\}.

λ0\lambda \geq 0 是杠杆:λ=0\lambda = 0 退化回 ERM,λ\lambda \to \infty 把所有 hh 压成 Ω(h)\Omega(h) 的最小元(线性类下就是 β=0\beta = 0)。把第 2 课的偏差-方差曲线翻过来看,调大 λ\lambda 就是在曲线上从右往左挪,用更大的偏差换更小的方差。

岭回归:闭式解、SVD 与贝叶斯

在线性类 h(x)=βxh(x) = \beta^\top x 上取 Ω(β)=12β22\Omega(\beta) = \tfrac{1}{2}\|\beta\|_2^2,正则化目标变成

β^ridge(λ)=argminβ{12nyXβ22+λ2β22}.\hat{\beta}_{\mathrm{ridge}}(\lambda) = \arg\min_\beta \Big\{ \tfrac{1}{2n}\|y - X\beta\|_2^2 + \tfrac{\lambda}{2}\|\beta\|_2^2 \Big\}.

β\beta 求导并置零,得到

β^ridge(λ)=(XX+λI)1Xy.\hat{\beta}_{\mathrm{ridge}}(\lambda) = (X^\top X + \lambda I)^{-1} X^\top y.

和第 3 课的正规方程唯一差别是 Hessian 上加了 λI\lambda I。这一项保证了 XX+λIX^\top X + \lambda I 的最小特征值不低于 λ\lambda,条件数立刻被夹住——你上周看到的载荷翻牌就此止血。

​SVD 视角​​。对 X=UΣVX = U \Sigma V^\top 做奇异值分解(singular value decomposition, SVD)后展开:

β^ridge(λ)=jσjσj2+λujyvj.\hat{\beta}_{\mathrm{ridge}}(\lambda) = \sum_j \frac{\sigma_j}{\sigma_j^2 + \lambda}\, u_j^\top y \, v_j.

对比 OLS 形式 jσj1ujyvj\sum_j \sigma_j^{-1} u_j^\top y\, v_j,每个奇异方向上的系数都被乘了一个收缩因子 σj2/(σj2+λ)\sigma_j^2 / (\sigma_j^2 + \lambda)σj\sigma_j 小的方向——也就是共线性方向——收缩最猛。第 3 课结尾那项 σj2\sigma_j^{-2} 的方差爆炸,被替换成了有限值。下面这个滑块拖动 λ\lambda,观察单个方向上的收缩因子如何随 λ\lambda 由 1 衰到 0:

Formula Explorer

sigma^2 / (sigma^2 + lambda)

​贝叶斯视角​​。把噪声写成 yβN(Xβ,σ2I)y \mid \beta \sim \mathcal{N}(X\beta, \sigma^2 I),给 β\beta 一个独立同分布的高斯先验 βN(0,τ2I)\beta \sim \mathcal{N}(0, \tau^2 I)。对数后验等于

logp(βy)=12σ2yXβ2212τ2β22+const.\log p(\beta \mid y) = -\tfrac{1}{2\sigma^2}\|y - X\beta\|_2^2 - \tfrac{1}{2\tau^2}\|\beta\|_2^2 + \mathrm{const}.

整体乘以 2σ2-2\sigma^2,最大化后验就等价于最小化 yXβ22+(σ2/τ2)β22\|y - X\beta\|_2^2 + (\sigma^2/\tau^2)\|\beta\|_2^2——也就是岭回归在 λ=σ2/τ2\lambda = \sigma^2/\tau^2 处的解。所以岭回归就是高斯先验下的极大似然估计(maximum likelihood estimation, MLE)推广 MAP(maximum a posteriori),λ\lambda 越大等价于先验越尖、越相信 β\beta 接近 0。

Lasso:L1 罚与稀疏性

Ω(β)=β1\Omega(\beta) = \|\beta\|_1 代入,得到 Lasso 目标:

β^lasso(λ)=argminβ{12nyXβ22+λβ1}.\hat{\beta}_{\mathrm{lasso}}(\lambda) = \arg\min_\beta \Big\{ \tfrac{1}{2n}\|y - X\beta\|_2^2 + \lambda \|\beta\|_1 \Big\}.

L1 球的「角」落在坐标轴上,λ\lambda 足够大时最优解的若干分量会被​​精确推到 0​​——这是岭做不到的稀疏性(sparsity),等价于自动变量选择。代价是 1\|\cdot\|_1 不可导,闭式解不存在。求解算法(坐标下降、软阈值算子、近端梯度)由 2.5.2 模块 regularized-least-squares-ridge-and-lasso 专门处理,这里只用它的结论。

用 5 折交叉验证选 λ\lambda

λ\lambda 是超参数(hyperparameter),不能用训练集上的 ERM 来选——训练误差关于 λ\lambda 单调递增,最小值永远落在 λ=0\lambda = 0。标准做法是 5 折交叉验证:

  1. nn 条样本随机打乱后划成 5 等分 F1,,F5\mathcal{F}_1, \dots, \mathcal{F}_5
  2. 在候选网格 Λ={λ1,,λm}\Lambda = \{\lambda_1, \dots, \lambda_m\} 中遍历。对每个 λ\lambda
    1. k=1,,5k = 1, \dots, 5,用 jkFj\bigcup_{j \neq k} \mathcal{F}_j 训练 β^ridge(λ)\hat{\beta}_{\mathrm{ridge}}(\lambda),在 Fk\mathcal{F}_k 上算均方误差 MSEk(λ)\mathrm{MSE}_k(\lambda)
    2. 求平均 CV(λ)=15k=15MSEk(λ)\mathrm{CV}(\lambda) = \tfrac{1}{5}\sum_{k=1}^{5} \mathrm{MSE}_k(\lambda),并记标准误 SE(λ)\mathrm{SE}(\lambda)
  3. λ=argminλCV(λ)\lambda^\star = \arg\min_\lambda \mathrm{CV}(\lambda)

回到沪深300 5 因子样本,2024 年初的一次跑结果可能是这样:

λ\lambdaCV 均方误差标准误 SE\mathrm{SE}
0.0011.0480.062
0.011.0120.058
0.10.987λ\lambda^\star0.054
1.01.005 ←λ1se\lambda_{1\mathrm{se}}0.051
10.01.0630.049

λ=0.1\lambda^\star = 0.1,但 λ=1.0\lambda = 1.0 的 CV 误差只比最优高 0.018,远小于一个标准误(0.054)。

​一倍标准误规则​​(one-standard-error rule):在 CV(λ)\mathrm{CV}(\lambda) 与最小值之差不超过 SE(λ)\mathrm{SE}(\lambda^\star) 的候选里,挑出​​最简单​​(λ\lambda 最大)的那个。在线性回归里「最简单」等于压缩最猛,于是选 λ1se=1.0\lambda_{1\mathrm{se}} = 1.0。代价是 CV 误差略升,回报是样本外因子载荷更稳定——你下周再前移 5 个交易日重跑,载荷的翻牌幅度会从 ±0.2 量级压回 ±0.03 量级,对应的信息比率(information ratio, IR)也更稳健。

把它和​​单次​ train / validation / test 拆分对比:后者的方差完全取决于那一个验证集——在 1000 条样本、5 因子这种小样本规模下,单次拆分的 λ\lambda 选择波动远大于 5 折平均。​​信息准则​ AIC、BIC、Mallows CpC_p 走另一条路——用模型自由度的解析估计替代留出集,便宜但只在模型族正确时无偏;本课点名,推导留给 2.2.2。

练习

Exercise

给定

X=(1111.0110.9911),y=(2,2.05,1.97,2).X = \begin{pmatrix} 1 & 1 \\ 1 & 1.01 \\ 1 & 0.99 \\ 1 & 1 \end{pmatrix},\qquad y = (2,\, 2.05,\, 1.97,\, 2)^\top.
  1. β^ridge(λ)=(XX+λI)1Xy\hat{\beta}_{\mathrm{ridge}}(\lambda) = (X^\top X + \lambda I)^{-1} X^\top y 计算 λ=0,0.1,1\lambda = 0,\, 0.1,\, 1 三处的 β^\hat{\beta}
  2. 比较三个 β^\hat{\beta} 第二分量的绝对值。λ\lambda 增大时方差量级如何变化?
  3. 一个 3 点 CV 曲线给出 CV(λ)=(0.50,0.48,0.51)\mathrm{CV}(\lambda) = (0.50,\, 0.48,\, 0.51)SE(λ)=(0.04,0.04,0.04)\mathrm{SE}(\lambda) = (0.04,\, 0.04,\, 0.04),对应 λ=(0.1,1,10)\lambda = (0.1,\, 1,\, 10)。用一倍标准误规则挑出 λ\lambda
提示
先把 XXX^\top X 写出来:第二列几乎全是 1,XXX^\top X 接近秩 1,OLS 时几乎不可逆——这是给你看「岭一加 λI\lambda I 病就好」的玩具版。手算 2×22 \times 2 逆矩阵即可。
提示
一倍标准误规则两步:先找 λ=argminCV\lambda^\star = \arg\min \mathrm{CV};再在 CV(λ)CV(λ)+SE(λ)\mathrm{CV}(\lambda) \leq \mathrm{CV}(\lambda^\star) + \mathrm{SE}(\lambda^\star) 的候选里挑 λ\lambda 最大者。这里阈值是 0.48+0.04=0.520.48 + 0.04 = 0.52

通往下一课

到这里,你能在一个 5 因子沪深300 回归上跑完整套「岭 + 5 折 CV + 一倍标准误」流程,并把结论讲给基金经理听。下一课把目标从「下期连续超额收益」换成「下期是否跑赢基准」——一个 0/1 标签。同样的正则化 ERM + CV 框架原样保留,但平方损失被换成交叉熵(cross-entropy),预测空间从 R\mathbb{R} 收到 [0,1][0,1] 上的概率单纯形。换损失之后岭与 Lasso 直接搬过来,就成了带 L2 / L1 正则化的 Logistic 回归——这是模块 2.6.1 的最后一站。