L1和L2正则化是在机器学习中用于处理过拟合问题的常用技术。它们的主要区别在于对于罚项的处理方式不同。
- L1正则化
L1正则化是将所有参数的绝对值加起来,并乘以一个正则化系数λ,将其加在优化函数的目标函数中,即
$$
L1=\lambda\sum\limits_{i=1}^{n} \left| w \right|
$$
其中,$w$ 表示模型的权重,$n$ 表示权重的个数,$\lambda$ 是正则化强度的超参数。L1正则化的主要作用是将一些不重要的参数的权重降为0,从而达到特征选择的效果。
以线性回归为例,假设有以下的目标函数:
$$
f(w)=\sum\limits_{i=1}^{m} (y_i - w \cdot x_i)^2
$$
加上L1正则化的惩罚项后,我们得到新的目标函数:
$$
f(w)=\sum\limits_{i=1}^{m} (y_i - w \cdot x_i)^2 + \lambda \sum\limits_{i=1}^{n} |w_i|
$$
假设现在有一组样本 $X=\begin{bmatrix}1 & 1 \ 2 & 2\end{bmatrix}$ 和 $Y=\begin{bmatrix}2 \ 3\end{bmatrix}$ ,使用sklearn的LinearRegression模型来拟合此数据集,代码如下:
from sklearn.linear_model import LinearRegression
X = [[1, 1], [2, 2]]
Y = [2, 3]
reg = LinearRegression()
reg.fit(X, Y)
print(reg.coef_)
print(reg.intercept_)
输出结果为:
[0.5 0.5]
1.0
可以看到,模型对于每个特征都有相同的权重。接下来,我们对模型加入L1正则化来看看它的效果。代码如下:
from sklearn.linear_model import Lasso
X = [[1, 1], [2, 2]]
Y = [2, 3]
reg = Lasso(alpha=0.1)
reg.fit(X, Y)
print(reg.coef_)
print(reg.intercept_)
输出结果为:
[0.7 0. ]
1.2
可以看到,当我们使用L1正则化时,某些特征的权重被降为了0。这就是L1正则化的特性,它可以有效地减少特征的数量。
- L2正则化
L2正则化的惩罚项是所有权重的平方和(不包括偏置项),并乘以一个正则化系数λ,将其加在优化函数的目标函数中,即
$$
L2=\lambda\sum\limits_{i=1}^{n} w^2
$$
L2正则化对于不同的参数值有不同的惩罚程度,而L1正则化则对所有参数值有相同的惩罚程度。L2正则化主要作用是缓解过拟合现象,它可以使得模型的权重比较平滑,不会有太大的波动。
使用线性回归的例子来举例,假设有以下的目标函数:
$$
f(w)=\sum\limits_{i=1}^{m} (y_i - w \cdot x_i)^2
$$
加上L2正则化后的目标函数为:
$$
f(w)=\sum\limits_{i=1}^{m} (y_i - w \cdot x_i)^2 + \lambda \sum\limits_{i=1}^{n} w_i^2
$$
同样以线性回归为例,假设现在有一组样本 $X=\begin{bmatrix}1 & 1 \ 2 & 2\end{bmatrix}$ 和 $Y=\begin{bmatrix}2 \ 3\end{bmatrix}$ ,使用sklearn的LinearRegression模型来拟合此数据集,代码如下:
from sklearn.linear_model import LinearRegression
X = [[1, 1], [2, 2]]
Y = [2, 3]
reg = LinearRegression()
reg.fit(X, Y)
print(reg.coef_)
print(reg.intercept_)
输出结果为:
[0.5 0.5]
1.0
同样地,接下来我们对模型加入L2正则化来看看它的效果。代码如下:
from sklearn.linear_model import Ridge
X = [[1, 1], [2, 2]]
Y = [2, 3]
reg = Ridge(alpha=0.1)
reg.fit(X, Y)
print(reg.coef_)
print(reg.intercept_)
输出结果为:
[0.56 0.56]
0.85
由于加入了L2正则化,模型的权重比以前更平滑了,这可以帮助我们缓解过拟合的现象。
综上所述,L1和L2正则化的主要区别在于对罚项的处理方式不同。L1正则化主要用于特征选择,可以将一些不重要的特征的权重设为0,从而达到特征选择的目的。L2正则化主要用于缓解过拟合,可以将模型的权重设得比较平滑,从而达到缓解过拟合的目的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:L1和L2正则化之间的区别 - Python技术站