📜  机器学习中的正则化(1)

📅  最后修改于: 2023-12-03 15:10:40.530000             🧑  作者: Mango

机器学习中的正则化

机器学习中的正则化是一种防止过拟合的技术。过拟合是指在训练数据集上表现良好但在测试数据集上表现欠佳的现象。正则化的目的是通过限制模型参数的大小来避免过拟合。

L1 正则化

L1 正则化是指在损失函数中加入模型参数的绝对值之和的惩罚项。L1 正则化可以让一部分参数变为零,从而实现特征选择的效果。

L1 正则化的代价函数为:

$$ J(\theta) = \frac{1}{m}\sum_{i=1}^m\left(y^{(i)} - h_{\theta}(x^{(i)})\right)^2 + \lambda\sum_{j=1}^n|\theta_j| $$

其中,$\lambda$ 是正则化参数,控制正则化的强度。

在具体实现时,需要将代价函数中的 $\sum_{j=1}^n|\theta_j|$ 替换为 $\sum_{j=1}^n\text{abs}(\theta_j)$,同时需要使用 L1 范数函数代替原来的欧几里得范数函数。

from sklearn.linear_model import Lasso

# L1 正则化,alpha 为正则化参数
lasso_reg = Lasso(alpha=0.1)
L2 正则化

L2 正则化是指在损失函数中加入模型参数的平方和的惩罚项。L2 正则化可以让所有参数都比较小,从而实现权值衰减的效果。

L2 正则化的代价函数为:

$$ J(\theta) = \frac{1}{m}\sum_{i=1}^m\left(y^{(i)} - h_{\theta}(x^{(i)})\right)^2 + \frac{\lambda}{2}\sum_{j=1}^n\theta_j^2 $$

其中,$\lambda$ 是正则化参数,控制正则化的强度。

在具体实现时,需要将代价函数中的 $\sum_{j=1}^n\theta_j^2$ 替换为 $\sum_{j=1}^n\text{square}(\theta_j)$,同时需要使用 L2 范数函数代替原来的欧几里得范数函数。

from sklearn.linear_model import Ridge

# L2 正则化,alpha 为正则化参数
ridge_reg = Ridge(alpha=0.1)
弹性网络

弹性网络是 L1 正则化和 L2 正则化的结合体。弹性网络既可以让一部分参数变为零,又可以让所有参数都比较小。

弹性网络的代价函数为:

$$ J(\theta) = \frac{1}{m}\sum_{i=1}^m\left(y^{(i)} - h_{\theta}(x^{(i)})\right)^2 + r\alpha\sum_{j=1}^n|\theta_j| + \frac{1-r}{2}\alpha\sum_{j=1}^n\theta_j^2 $$

其中,$\alpha$ 是正则化参数,控制正则化的强度;$r$ 是 L1 正则化在总正则化中所占的比例,$1-r$ 是 L2 正则化在总正则化中所占的比例。

在具体实现时,只需要设置 L1 比例值即可。

from sklearn.linear_model import ElasticNet

# 弹性网络,alpha 为正则化参数,l1_ratio 为 L1 比例值
elastic_net = ElasticNet(alpha=0.1, l1_ratio=0.5)
总结

正则化是一种非常实用的技术,可以有效避免过拟合问题。在实际使用中,需要根据数据集的特点和实际需求选择合适的正则化方法及参数值。