news 2026/8/28 15:05:08

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【机器学习】线性回归 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 + \epsilony=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^2L(β)=i=1n(yiXiβ)2=yXβ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(yXβ)=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^2L(β)=yXβ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βminyXβ22s.t.β22t

3. 求解(闭式解)

求导:
∂L∂β=−2XT(y−Xβ)+2λβ=0 \frac{\partial L}{\partial \beta} = -2X^T(y - X\beta) + 2\lambda \beta = 0βL=2XT(yXβ)+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\|_1L(β)=yXβ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βminyXβ22s.t.β1t

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(yXjβj),λ)
其中 $ S(z, \lambda) = \text{sign}(z) \cdot \max(|z| - \lambda, 0) $ 是软阈值函数。

4. 特点

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

五、三者对比总表

对比维度线性回归RidgeLasso
正则化项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^2L(β)=yXβ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(β)=yXβ22+λ(αβ1+(1α)β22)
其中 $ \alpha \in [0,1] $:

  • $ \alpha = 0 $ → Ridge
  • $ \alpha = 1 $ → Lasso
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/28 15:03:28

VS Code 更新老失败、版本还各不相同?这 3 个坑踩完就通了

VS Code 更新老失败、版本还各不相同?这 3 个坑踩完就通了 【免费下载链接】vscode Visual Studio Code 项目地址: https://gitcode.com/GitHub_Trending/vscode6/vscode 周一早上,团队三个人打开 VS Code,版本号却各不相同&#xff1…

作者头像 李华
网站建设 2026/8/28 15:02:54

用Python量化文本风格变化:从情感强度到统计检验的完整流程

判断一个群体的表达风格是不是更“凭直觉”了,不能只靠摘出几个亮眼句子下结论。更稳妥的做法,是把两个时期的文本集中起来,用可重复的指标做一次量化对比。这篇文章要讲的就是一套轻量级方法:准备两批语料,抽取情感强…

作者头像 李华
网站建设 2026/8/28 14:59:22

脉冲响应曲线辨识:最小二乘法在Matlab中的实践指南

1. 项目概述:从脉冲响应曲线看透系统本质在工程和科学研究的各个领域,无论是分析一个电路的瞬态特性,评估一个机械结构的阻尼性能,还是理解一个经济政策对市场的滞后影响,我们常常面对一个核心问题:如何在不…

作者头像 李华
网站建设 2026/8/28 14:59:06

从零构建GPT风格LLM:Python与PyTorch实现Transformer大语言模型实战

深度学习和 Python 结合最典型的落地场景,就是用代码从零构建一个大语言模型(LLM)。LLM 并不是一个神秘黑盒,它本质上是一个基于 Transformer 架构的深度神经网络,通过海量文本预测下一个词或字符,逐步学习…

作者头像 李华
网站建设 2026/8/28 14:57:54

C++函数模板:从泛型编程基础到高级实战应用

1. 项目概述:为什么我们需要函数模板?干了这么多年C,从学生时代到带团队做项目,我见过太多重复的代码。最典型的就是,为了处理不同类型的数据,程序员不得不写一堆功能几乎一模一样、只是参数类型不同的函数…

作者头像 李华