L1正则化和L2正则化的区别
【摘要】 L1正则化和L2正则化是机器学习中常用的两种正则化方法,它们通过在损失函数中添加不同的惩罚项来约束模型复杂度,防止过拟合。两者的核心区别体现在惩罚项形式、权重效果、几何解释、计算复杂度以及适用场景上。以下是详细对比: 1. 惩罚项形式L1正则化(Lasso):惩罚项为模型权重的绝对值之和,数学形式为:[\lambda \cdot \sum_{i=1}^{n} |w_i|]其中,(\lambd...
L1正则化和L2正则化是机器学习中常用的两种正则化方法,它们通过在损失函数中添加不同的惩罚项来约束模型复杂度,防止过拟合。两者的核心区别体现在惩罚项形式、权重效果、几何解释、计算复杂度以及适用场景上。以下是详细对比:
1. 惩罚项形式
-
L1正则化(Lasso):
惩罚项为模型权重的绝对值之和,数学形式为:
[
\lambda \cdot \sum_{i=1}^{n} |w_i|
]
其中,(\lambda) 是正则化系数,(w_i) 是模型权重(不包括偏置项)。 -
L2正则化(岭回归/权重衰减):
惩罚项为模型权重的平方和,数学形式为:
[
\lambda \cdot \frac{1}{2} \sum_{i=1}^{n} w_i^2
]
(\frac{1}{2}) 是为了简化求导过程(导数后变为 (w_i))。
2. 权重效果
-
L1正则化:
- 稀疏性:L1倾向于将部分权重直接压缩为0,产生稀疏解(即部分特征被完全忽略)。
- 特征选择:通过稀疏性,L1可以自动进行特征选择,适用于高维数据或特征冗余的场景。
-
L2正则化:
- 权重衰减:L2会使权重向0收缩,但不会完全变为0(除非(\lambda)极大)。
- 平滑性:权重分布更均匀,适用于特征均相关但无冗余的场景。
3. 几何解释
-
L1正则化:
- 约束条件为权重的菱形(L1球)。在二维情况下,菱形的顶点更容易与损失函数的等高线相交,导致权重在坐标轴上(即部分权重为0)。
(菱形顶点与等高线相交,对应稀疏解)
- 约束条件为权重的菱形(L1球)。在二维情况下,菱形的顶点更容易与损失函数的等高线相交,导致权重在坐标轴上(即部分权重为0)。
-
L2正则化:
- 约束条件为权重的欧氏球面(L2球)。在二维情况下,球面与等高线的切点通常不在坐标轴上,因此权重不会完全为0。
(球面与等高线相切,权重非零)
- 约束条件为权重的欧氏球面(L2球)。在二维情况下,球面与等高线的切点通常不在坐标轴上,因此权重不会完全为0。
4. 计算复杂度
-
L1正则化:
- 损失函数在0点不可导(绝对值函数的尖点),需使用次梯度法或坐标下降法优化。
- 计算复杂度较高,尤其是特征维度大时。
-
L2正则化:
- 损失函数是二次的,可通过解析方法(如岭回归的闭式解)直接求解,或使用梯度下降高效优化。
- 计算效率更高,适合大规模数据。
5. 适用场景
-
L1正则化:
- 特征选择:当数据存在冗余特征或需要自动筛选重要特征时(如文本分类、基因选择)。
- 高维数据:特征数量远大于样本数量时(如(p \gg n)的场景)。
- 可解释性:稀疏模型更易解释哪些特征对预测起关键作用。
-
L2正则化:
- 特征均相关:当特征之间存在相关性但无冗余时(如图像处理、时间序列分析)。
- 数值稳定性:需要防止权重过大导致数值不稳定时(如深度学习中的权重衰减)。
- 解析解需求:需要快速求解闭式解时(如岭回归)。
6. 对比总结表
| 特性 | L1正则化(Lasso) | L2正则化(岭回归) |
|---|---|---|
| 惩罚项 | (\lambda \cdot \sum | w_i |
| 权重效果 | 稀疏性(部分权重为0) | 权重衰减(趋近于0但不等于0) |
| 几何解释 | 约束在菱形(L1球)上 | 约束在欧氏球面(L2球)上 |
| 计算复杂度 | 高(需次梯度或坐标下降) | 低(可解析解或梯度下降) |
| 适用场景 | 特征选择、高维数据、可解释性 | 特征相关、数值稳定、解析解需求 |
| 典型算法 | Lasso回归、弹性网络(Elastic Net) | 岭回归、神经网络权重衰减 |
7. 代码示例对比
(1) 线性回归中的L1和L2正则化(Scikit-learn)
from sklearn.linear_model import Lasso, Ridge
# L1正则化(Lasso)
lasso = Lasso(alpha=0.1) # alpha=λ
lasso.fit(X_train, y_train)
# L2正则化(岭回归)
ridge = Ridge(alpha=0.1) # alpha=λ
ridge.fit(X_train, y_train)
(2) 神经网络中的L1和L2正则化(Keras)
from tensorflow.keras import regularizers
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# L1正则化
model_l1 = Sequential([
Dense(64, activation='relu',
kernel_regularizer=regularizers.l1(0.01)), # L1惩罚
Dense(10, activation='softmax')
])
# L2正则化
model_l2 = Sequential([
Dense(64, activation='relu',
kernel_regularizer=regularizers.l2(0.01)), # L2惩罚
Dense(10, activation='softmax')
])
8. 如何选择?
- 需要特征选择或高维数据 → 优先选L1(如Lasso)。
- 特征相关但无冗余,或需要数值稳定 → 优先选L2(如岭回归)。
- 两者结合:弹性网络(Elastic Net)同时使用L1和L2惩罚,平衡稀疏性和稳定性。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)