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

正则化最小二乘:岭回归与 Lasso

2.5.2 · 迭代法与正则化方法 · 数学与统计能力

深圳某私募的多因子研究员手头有 60 个交易日的沪深300 成分股横截面收益,外加一份「因子动物园」(factor zoo)清单:动量、价值、质量、低波,再加上 70 多个另类与基本面因子,合计 p=80p = 80 个候选预测变量、n=60n = 60 个观测——一个典型的 p>np > n 病态设计矩阵。她直接套用上一模块的普通最小二乘(ordinary least squares, OLS),解正规方程(normal equations) XXβ=XyX^\top X \beta = X^\top y,结果 β^\hat\beta 每周翻号:上周动量系数 +0.31+0.31,这周变 0.12-0.12,下周价值因子再翻一次。问题不在因子本身,而在 XXX^\top X 已经奇异——它根本不可逆,即便强行用伪逆,条件数(condition number)也大到任何一笔小扰动都会被放大到系数符号上。本课把这条不稳定的 OLS 信号驯服成可入库的因子模型——核心工具是正则化(regularization)。

一、病态的 XXX^\top X 与岭回归

设设计矩阵 XRn×pX \in \mathbb{R}^{n \times p}、响应 yRny \in \mathbb{R}^n。当 pnp \geq n 或多列高度相关时,XXX^\top X 是半正定(positive semidefinite, PSD)的但​​不正定​​——存在零特征值,正规方程 XXβ=XyX^\top X \beta = X^\top y 解不唯一。即使勉强可逆,条件数 κ(XX)=λmax/λmin\kappa(X^\top X) = \lambda_{\max} / \lambda_{\min} 可以高达 10810^8 量级,数值上完全不可信。

岭回归(ridge regression)把目标函数改为

minβ  12yXβ22+λ2β22\min_\beta \;\tfrac{1}{2}\|y - X\beta\|_2^2 + \tfrac{\lambda}{2}\|\beta\|_2^2

β\beta 求梯度并置零,得到

β^ridge=(XX+λI)1Xy\hat\beta_{\text{ridge}} = (X^\top X + \lambda I)^{-1} X^\top y

加上 λI\lambda I 等于把 XXX^\top X 的每个特征值抬升 λ\lambda,矩阵立刻变成严格正定可逆——条件数从 λmax/λmin\lambda_{\max} / \lambda_{\min} 降到 (λmax+λ)/(λmin+λ)(\lambda_{\max} + \lambda) / (\lambda_{\min} + \lambda),数值稳定性肉眼可见。统计上还有一层解读:若把先验 βN(0,σ2/λI)\beta \sim \mathcal{N}(0, \,\sigma^2/\lambda \cdot I) 与高斯噪声似然合在一起,β^ridge\hat\beta_{\text{ridge}} 恰是后验众数(maximum a posteriori, MAP)估计。λ\lambda 究竟取多大、用什么准则挑——属于 2.6.1 监督学习基础里的交叉验证框架,这里只承认一句:本课不讨论怎么选 λ\lambda,只把 λ>0\lambda > 0 给定后的几何与数值机制讲清。

二、Lasso 与 L1L^1 几何

L2L^2 惩罚换成 L1L^1,得到 Lasso 目标:

minβ  12yXβ22+λβ1\min_\beta \;\tfrac{1}{2}\|y - X\beta\|_2^2 + \lambda \|\beta\|_1

几何上,L2L^2 球面光滑,残差等高线最先触到球面任意一点;L1L^1 球是带尖角的菱形,顶点位于坐标轴上。一旦半径调整到让椭圆等高线第一次触到菱形,这个触点高概率正好落在顶点——也就是说,若干分量精确为零。这就是 Lasso 自动做变量选择(variable selection)的几何来源:从 80 个候选因子里只挑出 5–10 个真正进入模型,其余系数严格归零。

β1\|\beta\|_1βj=0\beta_j = 0 处不可微,因此 Lasso ​不存在​​像岭那样的闭式解。目标函数仍然是凸的——可分块凸性让逐坐标下降(coordinate descent)成为实务首选。

三、软阈值算子与坐标下降更新

固定其他坐标,对 βj\beta_j 做单变量最小化。令 rj=ykjXkβkr_j = y - \sum_{k \neq j} X_{\cdot k} \beta_k 为去除其它列后的部分残差,zj=Xjrj/Xj22z_j = X_{\cdot j}^\top r_j / \|X_{\cdot j}\|_2^2。最优更新由​​软阈值算子​​(soft-threshold operator)给出:

Sλ(z)=sign(z)max(zλ,0)S_\lambda(z) = \operatorname{sign}(z)\, \max(|z| - \lambda,\, 0)

也就是说,若 zjλ|z_j| \leq \lambda,直接把 βj\beta_j 置零;否则朝零方向收缩 λ\lambda 的幅度。一步同时完成​​收缩​​与​​选择​​,与岭的纯收缩区分得很干净。

Formula Explorer

S_\lambda(z) = \operatorname{sign}(z)\, \max(|z| - \lambda,\, 0)

四、近端梯度法:ISTA 与 FISTA

更一般地,把 Lasso 目标拆成可微的 f(β)=12yXβ22f(\beta) = \tfrac{1}{2}\|y - X\beta\|_2^2 与不可微的 h(β)=λβ1h(\beta) = \lambda \|\beta\|_1。​​近端算子​​(proximal operator)定义为

proxλh(z)=argminx{h(x)+12λxz22}\operatorname{prox}_{\lambda h}(z) = \arg\min_x \left\{ h(x) + \tfrac{1}{2\lambda}\|x - z\|_2^2 \right\}

h(x)=x1h(x) = \|x\|_1,直接展开就能验证 proxλh\operatorname{prox}_{\lambda h} 正是上一节的软阈值。​​近端梯度法​​(proximal gradient method, 近端梯度法)就是「沿 ff 走一步梯度,再做一次 prox」,套到 Lasso 即为 ISTA(Iterative Shrinkage-Thresholding Algorithm):

βk+1=Sλt ⁣(βktX(Xβky))\beta_{k+1} = S_{\lambda t}\!\left(\beta_k - t\, X^\top (X\beta_k - y)\right)

其中步长 t1/XX2t \leq 1/\|X^\top X\|_2。FISTA 在 ISTA 外面套一层 Nesterov 加速,把收敛率从 O(1/k)O(1/k) 提到 O(1/k2)O(1/k^2),直接继承本模块第三课的加速思路。坐标下降的全局收敛性证明在此只作示意——细节属于专门一章的优化理论。

五、n=5, p=8n = 5,\ p = 8 数值对照

把开头的故事缩到一个能手算的例子。构造 XR5×8X \in \mathbb{R}^{5 \times 8}:前两列是同一真实信号的近重复(ρ0.99\rho \approx 0.99),第 3–8 列纯噪声。y=Xβ+εy = X \beta^* + \varepsilon,真值 β=(1,0,0,0,0,0,0,0)\beta^* = (1, 0, 0, 0, 0, 0, 0, 0)^\top,εN(0,0.12I)\varepsilon \sim N(0, 0.1^2 I)。三种解法并列:

系数OLS(伪逆)λ=1\lambda = 1Lasso λ=0.3\lambda = 0.3
β^1\hat\beta_1+2.7+2.7+0.58+0.58+0.86+0.86
β^2\hat\beta_21.9-1.9+0.41+0.4100
β^3\hat\beta_3+0.8+0.80.04-0.0400
β^4\hat\beta_41.1-1.1+0.07+0.0700
β^5\hat\beta_5+0.6+0.60.05-0.0500
β^6\hat\beta_60.4-0.4+0.03+0.0300
β^7\hat\beta_7+0.2+0.20.02-0.0200
β^8\hat\beta_80.3-0.3+0.06+0.0600

读这张表:OLS 伪逆把两根共线列的系数​​对撞放大​​到 ±2\pm 2 量级、第 3–8 列在噪声里漂出 ±1\pm 1 量级,与真值已经不再对应;岭把所有方向均匀向零收缩,共线对 β1,β2\beta_1, \beta_2 共担一半信号但​​没有归零​​;Lasso 只把 β1\beta_1 留在 +0.86+0.86,其余精确归零——一份能直接接入下游协方差矩阵(covariance matrix)估计或组合优化(portfolio optimization)管线的稀疏因子表。

六、量化落地的两条主线

岭与 Lasso 在 CN 私募 量化研究台已是默认工具,两条主线值得明确分开:

  • ​协方差侧。​ Ledoit-Wolf 协方差收缩可以读作岭式正则化的协方差矩阵版本——把样本协方差与一个结构性目标(常数对角阵或单因子模型)做凸组合,确保结果半正定且条件数受控。下游均值方差优化(mean-variance optimization)在岭收缩过的 Σ^\hat\Sigma 上跑出来的权重比裸样本协方差稳一个量级,这就是沪深300 universe 上 私募 组合的标准化前处理。
  • ​信号侧。​ Lasso 从因子动物园挑稀疏子集,直接给出可解释、可监控、可归因的因子配方——某个因子被归零意味着它在当前 λ\lambda 下不进入模型,无需事后做检验。把 Lasso 选出的稀疏因子集喂给均值方差优化的预期收益输入,是最干净的端到端串联方式。

七、练习

Exercise

XRn×2X \in \mathbb{R}^{n \times 2} 的两列已标准化为单位范数且互相正交,即 XX=IX^\top X = I。考虑 Lasso 目标 12yXβ22+λβ1\tfrac{1}{2}\|y - X\beta\|_2^2 + \lambda \|\beta\|_1,令 z=Xy=(z1,z2)z = X^\top y = (z_1, z_2)

(a) 写出 Lasso 在 βj0\beta_j \neq 0βj=0\beta_j = 0 两种情形下的 KKT 式最优性条件——用 X(yXβ)X^\top(y - X\beta) 与次梯度 β1\partial \|\beta\|_1 表示。

(b) 取 z1=0.7, z2=0.2, λ=0.3z_1 = 0.7,\ z_2 = 0.2,\ \lambda = 0.3,逐坐标手算 β^1,β^2\hat\beta_1, \hat\beta_2,展示一步软阈值。

(c) 说明 Lasso 把哪个系数严格归零、哪个保留,并写出保留后的值。

提示
正交设计 XX=IX^\top X = I 让坐标可分离:第 jj 坐标的目标退化成单变量函数 12(βjzj)2+λβj\tfrac{1}{2}(\beta_j - z_j)^2 + \lambda |\beta_j|。先把这条「单变量带 L1L^1 罚」的标准形式写出来,后面只需逐坐标套软阈值。
提示
KKT 分两种:βj0\beta_j \neq 0Xj(yXβ)=λsign(βj)X_{\cdot j}^\top (y - X\beta) = \lambda \operatorname{sign}(\beta_j);βj=0\beta_j = 0Xj(yXβ)λ|X_{\cdot j}^\top (y - X\beta)| \leq \lambda。代入 XX=IX^\top X = I 即得软阈值 β^j=Sλ(zj)\hat\beta_j = S_\lambda(z_j):zj>λ|z_j| > \lambda 保留,否则归零。
提示
代入数:z1=0.7>0.3=λ|z_1| = 0.7 > 0.3 = \lambda,故 β^1=sign(0.7)(0.70.3)=0.4\hat\beta_1 = \operatorname{sign}(0.7)(0.7 - 0.3) = 0.4;z2=0.20.3|z_2| = 0.2 \leq 0.3,故 β^2=0\hat\beta_2 = 0。所以 Lasso 把 β2\beta_2 严格归零,只保留 β^1=0.4\hat\beta_1 = 0.4——一次同时完成的收缩 + 选择。

八、通往下一站

到这里你已经掌握把不稳定 OLS 变成可入库因子模型的两条主路径:岭做均匀收缩 + 数值稳定,Lasso 做稀疏选择 + 变量挑选。还有两条线索本课刻意未展开,但下游模块会承接:其一,λ\lambda 到底取多少——属于 2.6.1 监督学习基础里的交叉验证框架,那里把样本切割、风险估计、超参选择一并搭好;其二,挑选好的稀疏因子如何进入产线——在 4.x 组合构造模块里,你会看到 Lasso 选出的因子直接喂入均值方差优化的预期收益输入,而岭收缩过的协方差矩阵则替换掉样本协方差,把权重对估计误差的敏感性一次性按住。本模块到此结课:迭代法、加速、正则化、近端梯度,四件工具齐了,下个模块开始把它们装到真正的资金线上。