线性模型与正则化核心25 分钟kp-008#正则化#岭回归#Lasso

正则化:岭回归、Lasso 与弹性网

进度

一句话定义

正则化在经验风险上加入参数惩罚 λ Ω(w)——L2(岭回归)压缩系数、L1(Lasso)产生稀疏解,本质是「用一点偏差换大幅方差下降」并把先验偏好写进目标函数。

为什么重要

p 大、n 小、特征共线是结构化数据的常态,不正则化的最小二乘在这些场景必然过拟合甚至无解。正则化是所有模型通用的防过拟合旋钮(逻辑回归、SVM、神经网络都有对应物),L1 还顺带完成特征选择(与 kp-028 呼应)。

前置知识

线性回归与最小二乘法 的最小二乘与共线性问题;偏差-方差分解与过拟合 的偏差-方差交易。

核心概念

  • 岭回归(Ridge, L2):‖ w ‖2 惩罚,解 (X^⊤ X + λ I)-1X^⊤ y,系数整体压缩、不为零。
  • Lasso(L1):‖ w ‖1 惩罚,会把部分系数压成精确 0,实现变量选择。
  • 弹性网(Elastic Net):α‖ w‖1 + (1-α)12‖ w ‖2 的混合,兼顾稀疏与共线组效应。
  • 正则强度 λ:核心超参数,λ → 0 退回最小二乘,λ → ∞ 系数全零。
  • 结构风险最小化:R̂(w) + λ Ω(w),对 kp-002 ERM 的直接升级。

直观类比

考卷加分规则:不许学生把所有题目都答满(限制参数「戏份」)。L2 是「每写一页都轻微扣分」——大家均匀少写;L1 是「每开新话题都扣一笔固定分」——干脆只答最有把握的几题(稀疏)。λ 就是扣分力度。

原理与机制

岭回归的代数效应:X^⊤ X 小特征值方向(数据支撑弱的方差来源)被 λ I 抬高,(X^⊤ X + λ I)-1 把这些方向的系数强力压缩——方差的病根被直接切除。贝叶斯解释:L2 对应 w 的高斯先验,L1 对应拉普拉斯先验(尖顶厚腰),先验峰值在零附近,故把小系数「吸」到零。

L1 为什么产生精确零:几何上,L1 球(菱形)的顶点在坐标轴上,约束区域与 RSS 等高线第一次相交几乎总发生在顶点处,该处部分系数恰为 0;L2 球是圆滑的,交点一般不在轴上。KKT 条件视角:L1 次梯度在零点是一个区间 [-λ, λ],系数只要相关量不够大就停留在零。

软阈值:L1 目标可由坐标下降以软阈值算子 soft(z, λ) = sign(z)max(|z| - λ, 0) 高效求解,这是 Lasso 可扩展的原因。

公式与推导

ŵridge = argminw ‖ y - Xw ‖2 + λ ‖ w ‖2 = (X^⊤ X + λ I)-1 X^⊤ y

推导:梯度 -2X^⊤(y - Xw) + 2λ w = 0 ⇒ (X^⊤ X + λ I)w = X^⊤ y。注意 λ I 保证矩阵恒可逆——共线性下最小二乘的无解问题被绕开。

图示

    w₂                w₂
     ▲   ___           ▲    ◇
     │ /   \         │   / \
RSS 等高线─╲ ___ ╱─相交  │──╳──  ← L1 菱形顶点在轴上
     │ \___/          │  ⟨╳⟩  → 交点多在轴 ⇒ w₁=0
     │/     \(圆)    │ /   \
     └──────▶ w₁        └──────▶ w₁
      L2:系数整体缩小     L1:部分系数精确为零

实例或案例

对比三种正则在共线合成数据上的系数与稀疏性:

import numpy as np
from sklearn.linear_model import Ridge, Lasso, ElasticNet, LinearRegression

rng = np.random.default_rng(0)
X = rng.normal(size=(80, 10)); X[:, 1] = X[:, 0] + 0.05 * rng.normal(size=80)   # 人为共线
w_true = np.array([3.0, -2.0] + [0.0] * 8)
y = X @ w_true + rng.normal(scale=0.5, size=80)

for name, m in [("OLS", LinearRegression()), ("Ridge", Ridge(alpha=1.0)),
                ("Lasso", Lasso(alpha=0.05)), ("ENet", ElasticNet(alpha=0.05, l1_ratio=0.5))]:
    m.fit(X, y)
    print(f"{name:>5}: 非零系数 {np.sum(np.abs(m.coef_) > 1e-6):>2}, ‖w−w*‖={np.linalg.norm(m.coef_ - w_true):.2f}")

Lasso/ENet 输出的稀疏系数可直接当特征筛选结果读(谨慎:被压零不代表「无关」,见误区)。

常见误区

  • L1 之前的特征必须先标准化,否则惩罚对不同量纲的特征不公平(大尺度特征先被牺牲)。
  • 把「Lasso 压零」当因果筛选:共线特征组内谁被保留有随机性,重采样下选择不稳定,应看选择频率。
  • 用训练误差选 λ:λ 越大训练误差越高是正常的,必须用交叉验证(如 LassoCV/RidgeCV)选。

与其他知识点的关系

偏差-方差分解与过拟合 提供加偏差换方差的交易框架;特征选择:过滤、包裹与嵌入方法 把 L1 视为嵌入法特征选择的代表;超参数调优:网格、随机与贝叶斯搜索 演示用网格/随机搜索联合调 λ 与其他超参数;软间隔 SVM 与铰链损失 的软间隔 SVM 是「惩罚松弛变量」的同一思想在不同变量上的应用。

自测题

  1. 为什么 L2 能解决共线性而 OLS 不能?

- 要点:λ I 移平谱,(X^⊤ X + λ I) 恒可逆;小特征值方向的方差爆炸被压制。

  1. L1 产生稀疏解的几何与优化两种解释?

- 要点:几何——L1 球顶点在轴上,交点常在顶点;优化——零点处次梯度区间宽,系数可停在零(软阈值)。

  1. λ 过大与过小分别发生什么?

- 要点:过大欠拟合(系数趋零、偏差大);过小回到 OLS、方差大;用 CV 找验证误差最低点。

延伸阅读

Tibshirani, Regression Shrinkage and Selection via the Lasso(JRSS-B, 1996);Hastie 等《The Elements of Statistical Learning》第 3.4 节。