【机器学习】线性回归 Ridge 回归 Lasso 回归

一、符号说明

符号 含义
n 样本数量
p 特征数量
X n \\times p 的特征矩阵
y n \\times 1 的目标向量
\\beta p \\times 1 的系数向量
\\beta_j j 个特征的系数
\\lambda 正则化强度超参数(≥0)
|\\beta|_2\^2 L2 范数平方: \\sum_{j=1}\^p \\beta_j\^2
|\\beta|_1 L1 范数:$ \sum_{j=1}^p

二、线性回归(Linear Regression)

1. 模型假设

最早,数学家发明线性回归,想法很纯粹:"我用所有特征,最小化误差平方和,找到最优系数。"

它确实完美解决了"拟合"问题

y=Xβ+ϵ y = X\beta + \epsilon y=Xβ+ϵ

2. 损失函数(最小二乘法,OLS)

L(β)=∑i=1n(yi−Xiβ)2=∥y−Xβ∥22 L(\beta) = \sum_{i=1}^{n} (y_i - X_i\beta)^2 = \|y - X\beta\|_2^2 L(β)=i=1∑n(yi−Xiβ)2=∥y−Xβ∥22

为什么不直接用"最短距离"?

模型预设了"x 无误差,y 有误差"的因果关系。线性回归的基本假设是:

特征 x 是准确测量的、没有误差的;只有目标值 y*y* 带有随机误差(噪声)。

因此,我们的任务是:给定一个 x,预测最可能的 y 是多少。

所以误差自然应该是 "预测的 y 和真实的 y 在纵向上的差距",而不是几何上的最短距离------因为几何距离会把 x 的误差也算进去,但我们的假设里 x 没有误差。

3. 求解(闭式解)

\\beta 求导并令为 0:

∂L∂β=−2XT(y−Xβ)=0 \frac{\partial L}{\partial \beta} = -2X^T(y - X\beta) = 0 ∂β∂L=−2XT(y−Xβ)=0

β^=(XTX)−1XTy \boxed{\hat{\beta} = (X^T X)^{-1} X^T y} β^=(XTX)−1XTy

前提条件 X\^T X 可逆(即特征之间不存在完全共线性)。

4. 特点

  • 无偏估计(模型假设正确时)
  • 最小化训练集上的 MSE
  • 对多重共线性敏感,方差大
  • 所有系数非零,不做特征选择

5 致命缺点

致命弱点 1:它太"玻璃心"------对特征相关性极度敏感(多重共线性) :如果两个特征高度相关(比如"房子面积"和"房间数量"),线性回归会犯难:到底把权重给谁?

结果就是,系数变得极大且正负抵消(比如面积系数 +10000,房间数系数 -9999),模型极其不稳定。只要数据稍微变一点,系数就剧烈震荡。

致命弱点 2:它太"贪心"------永远不舍弃任何特征 :即便你有 10000 个特征,其中 9900 个是噪音,线性回归也会强行给每个特征分配一个非零系数。

结果就是模型极其复杂、过拟合严重,放在新数据上一塌糊涂。

致命弱点 3:它太"脆弱"------特征一多就失效(矩阵不可逆) :当特征数 ppp 大于样本数nnn 时,XTX^TXT 不可逆,连数学公式都算不出来,直接"崩溃"。

于是,统计学家们想:我能不能在"追求准确"的同时,给模型加一点"规矩",让它稳定一点、精简一点?

于是,Ridge 和 Lasso 应运而生。


三、Ridge 回归(岭回归)

1. 模型假设

与线性回归相同,但增加约束。

目的:牺牲一点点训练集的准确,换来模型的极度稳定。

  • 你给模型加一条死规矩:"所有系数的平方和不能太大"(L2 惩罚)。
  • 这样一来,即便两个特征相关,模型也不必把系数搞得极大正负抵消,而是大家平摊权重,皆大欢喜。
  • 同时,因为加了 λIλIλI,矩阵 XTX+λIX^TX + λIXTX+λI远可逆,特征再多也能算。

Ridge 的哲学:我承认所有特征都有用,但你们谁都别太出格,整体温和一点。

2. 损失函数(L2 正则化)

L(β)=∥y−Xβ∥22+λ∥β∥22 L(\beta) = \|y - X\beta\|_2^2 + \lambda \|\beta\|_2^2 L(β)=∥y−Xβ∥22+λ∥β∥22

等价形式(约束优化):

min⁡β∥y−Xβ∥22s.t.∥β∥22≤t \min_{\beta} \|y - X\beta\|_2^2 \quad \text{s.t.} \quad \|\beta\|_2^2 \le t βmin∥y−Xβ∥22s.t.∥β∥22≤t

3. 求解(闭式解)

求导:

∂L∂β=−2XT(y−Xβ)+2λβ=0 \frac{\partial L}{\partial \beta} = -2X^T(y - X\beta) + 2\lambda \beta = 0 ∂β∂L=−2XT(y−Xβ)+2λβ=0

β^=(XTX+λI)−1XTy \boxed{\hat{\beta} = (X^T X + \lambda I)^{-1} X^T y} β^=(XTX+λI)−1XTy

关键:加了 \\lambda I 后,即使 X\^T X 奇异,矩阵依然可逆,数值稳定性大大提高。

4. 特点

  • 系数被压缩(Shrinkage)向 0,但严格不等于 0
  • 在多重共线性下表现稳定
  • 保留所有特征,适合特征数量多、且都可能有用的场景
  • 相当于在目标函数中加入了"系数平方和尽量小"的偏好

四、Lasso 回归(套索回归)

1. 模型假设

与线性回归相同,但增加 L1 约束。

目的:牺牲一点点准确,换来自动特征选择和模型简洁。

  • 你给模型加另一条死规矩:"所有系数的绝对值之和不能太大"(L1 惩罚)。
  • 这条规矩的奇妙之处在于,它强迫一些不重要的特征系数直接变为 0
  • 结果就是,模型自动帮你挑出了"核心特征",其余的直接丢弃。模型变得简单、可解释性强。

Lasso 的哲学:我怀疑大部分特征都是噪音,只保留真正关键的少数派。

2. 损失函数(L1 正则化)

L(β)=∥y−Xβ∥22+λ∥β∥1 L(\beta) = \|y - X\beta\|_2^2 + \lambda \|\beta\|_1 L(β)=∥y−Xβ∥22+λ∥β∥1

等价形式(约束优化):

min⁡β∥y−Xβ∥22s.t.∥β∥1≤t \min_{\beta} \|y - X\beta\|_2^2 \quad \text{s.t.} \quad \|\beta\|_1 \le t βmin∥y−Xβ∥22s.t.∥β∥1≤t

3. 求解(无闭式解,迭代法)

常用算法:

  • 坐标下降法(Coordinate Descent):逐个更新每个系数,其他固定
  • 最小角回归(LARS):一种高效的路径算法

Lasso 的系数更新公式(坐标下降,单变量形式):

βj=S(XjT(y−X−jβ−j),λ)XjTXj \beta_j = \frac{S(X_j^T (y - X_{-j}\beta_{-j}), \lambda)}{X_j^T X_j} βj=XjTXjS(XjT(y−X−jβ−j),λ)

其中 S(z, \\lambda) = \\text{sign}(z) \\cdot \\max(\|z\| - \\lambda, 0) 是软阈值函数。

4. 特点

  • 产生稀疏解(大量系数为 0),自动做特征选择
  • 适合特征极多( p \\gg n )、且怀疑很多特征无用的场景
  • 当特征高度相关时,Lasso 会随机选其中一个,不如 Ridge 稳定
  • 模型更简洁、更可解释

五、三者对比总表

对比维度 线性回归 Ridge Lasso
正则化项 L2: \\lambda |\\beta|_2\^2 L1: \\lambda |\\beta|_1
损失函数 |y-X\\beta|\^2 |y-X\\beta|\^2 + \\lambda |\\beta|_2\^2 |y-X\\beta|\^2 + \\lambda |\\beta|_1
闭式解 ✅ 有 ✅ 有 ❌ 无
系数结果 非零,可能很大 非零,被压缩 部分为 0(稀疏)
特征选择 ❌ 否 ❌ 否 ✅ 是
处理共线性 差(方差大) 好(稳定) 一般(随机选一个)
偏差-方差 低偏差,高方差 较高偏差,较低方差 较高偏差,较低方差
适用场景 特征少、独立 特征多、共线性高 特征极多、需稀疏

六、超参数 \\lambda 的选择

统一方法:交叉验证(Cross-Validation)

  • 将训练集分成 K 折(如 5 折或 10 折)
  • 对每个候选 \\lambda ,用 K-1 折训练,在剩余 1 折上验证
  • 选择验证误差最小的 \\lambda

常用实现:

  • RidgeCV(sklearn)
  • LassoCV(sklearn)

扩展:Elastic Net(弹性网)

结合 Ridge 和 Lasso 的优点:

L(β)=∥y−Xβ∥22+λ1∥β∥1+λ2∥β∥22 L(\beta) = \|y - X\beta\|_2^2 + \lambda_1 \|\beta\|_1 + \lambda_2 \|\beta\|_2^2 L(β)=∥y−Xβ∥22+λ1∥β∥1+λ2∥β∥22

或等价形式:

L(β)=∥y−Xβ∥22+λ(α∥β∥1+(1−α)∥β∥22) L(\beta) = \|y - X\beta\|_2^2 + \lambda \left( \alpha \|\beta\|_1 + (1-\alpha) \|\beta\|_2^2 \right) L(β)=∥y−Xβ∥22+λ(α∥β∥1+(1−α)∥β∥22)

其中 \\alpha \\in \[0,1\]

  • \\alpha = 0 → Ridge
  • \\alpha = 1 → Lasso
相关推荐
哦哦~9211 小时前
AI赋能CFD:从Fluent仿真到物理信息机器学习的智能流体工程实战
人工智能·机器学习·cfd·fluent
吾在学习路1 小时前
XSKILL: Continual Learning from Experience and Skills in Multimodal Agents
人工智能·深度学习·机器学习
auto_go1 小时前
大模型实战指南(12)——端侧 AI 助手实战:Ollama + 工具调用,让本地模型真正帮你干活
人工智能·深度学习·机器学习
今天AI了吗2 小时前
AI工作流的自动化趋势:从手动实验到自主Agent的研究范式转变
运维·数据库·人工智能·sql·机器学习·自动化·github
知识分享小能手3 小时前
概理论与数理统计学习教程,从入门到精通,马尔可夫链(25)
学习·机器学习·概率论
浪兎兎3 小时前
【机器学习】朴素贝叶斯 贝叶斯回归
人工智能·机器学习·回归
夫唯不争,故无尤也4 小时前
Agentic Search + RL :打通从RL原理到实际训练全流程
人工智能·深度学习·机器学习·强化学习·rl
大模型码小白13 小时前
AI 对话流性能调优:万级消息的虚拟滚动落地
java·大数据·前端·javascript·人工智能·算法·机器学习