在解决回归过拟合中,我们选择正则化。但是对于其他机器学习算法如分类算法来说也会出现这样的问题,除了一些算法本身作用之外(决策树、神经网络),我们更多的也是去自己做特征选择,包括之前说的删除、合并一些特征
<img src="images/006tNbRwly1ga8u2sjcw9j314o0g8wkd.jpg" style="zoom:50%;" />
<img src="images/006tNbRwly1ga8u2tduvuj30zs0kctav.jpg" alt="æ£åå" style="zoom: 33%;" />
在学习的时候,数据提供的特征有些影响模型复杂度或者这个特征的数据点异常较多,所以算法在学习的时候尽量减少这个特征的影响(甚至删除某个特征的影响),这就是正则化
注:调整时候,算法并不知道某个特征影响,而是去调整参数得出优化的结
假设𝐿(𝑊)是未加正则项的损失,𝜆是一个超参,控制正则化项的大小。
则最终的损失函数:$𝐿=𝐿(𝑊)+ \lambda*\sum
作用:用来进行特征选择,主要原因在于L1正则化会使得较多的参数为0,从而产生稀疏解,可以将0对应的特征遗弃,进而用来选择特征。一定程度上L1正则也可以防止模型过拟合。
images/image-20230913145042318.png
对其中的一个参数 $ w_i $ 计算梯度,其他参数同理,α是学习率,sign(wi)是符号函数。
<img src="images/l2_4.png" alt="l2" style="zoom:50%;" />
$\frac{\partial L}{\partial w
LASSO回归: from sklearn.linear_model import Lasso
假设𝐿(𝑊)是未加正则项的损失,𝜆是一个超参,控制正则化项的大小。
则最终的损失函数:$𝐿=𝐿(𝑊)+ \lambda*\sum
优点:越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象
Ridge回归: from sklearn.linear_model import Ridge
plt.scatter(x,y)
plt.plot(np.sort(x),y_predict3[np.argsort(x)],color = 'r')
plt.show()
array([ 1.32292089e+00, 2.03952017e+00, -2.88731664e-01, -1.24760429e+00,
8.06147066e-02, 3.72878513e-01, -7.75395040e-03, -4.64121137e-02,
1.84873446e-04, 2.03845917e-03])
model import Lasso # L1正则
from sklearn.linear
plt.scatter(x,y)
plt.plot(np.sort(x),y
array([ 0.97284077, 0.4850203 , 0. , 0. , -0. ,
0. , -0. , 0. , -0. , 0. ])
l2 = Ridge(alpha=0.005,normalize=True) # 调整alpha 正则化强度 查看正则化效果
estimator
plt.scatter(x,y)
plt.plot(np.sort(x),y
array([ 9.91283840e-01, 5.24820573e-01, 1.57614237e-02, 2.34128982e-03,
7.26947948e-04, -2.99893698e-04, -8.28333499e-05, -4.51949529e-05,
-4.21312015e-05, -8.22992826e-07])