线性回归中的正则化与Pytorch内的正则化实现

为什么需要正则化

在线性回归中容易导致过拟合现象,我们有时候有许多的特征,于是我们的拟合函数就变成了
θ 0 + θ 1 x + θ 2 x 2 + θ 3 x 3 + θ 4 x 4 + . . . . . . + θ n x n \theta_0+\theta_1x+\theta_2x^2+\theta_3x^3+\theta_4x^4+......+\theta_nx^n θ0+θ1x+θ2x2+θ3x3+θ4x4+......+θnxn
这个时候在训练集上很容易产生过拟合,就例如下图所示
在这里插入图片描述
为什么会这样子,因为给的变量太多,训练过程中不断地缩减在训练集上的损失,导致最后的曲线怪绕来贴合训练集的数据,在其他数据集上效果极差,这就是过拟合。
为了防止过拟合,我们有一下两种方式。

  1. 减少特征数:这个方法的坏处显而易见,直接去除了一部分特征,导致这一部分特征带来的影响直接消失。
  2. 正则化:这就是接下来要讲的部分

如何正则化

我们需要一个方法,来抑制变量的影响,但是又不是直接让系数为0(去除变量)。那么我们只需要在损失函数的最后加上一项 λ ∑ i = 1 n θ i 2 即可 \lambda\sum_{i=1}^n\theta_i^2即可 λi=1nθi2即可,这里不一定要是平方,可以是一范数(绝对值),也可以是二范数(平方和)。
加入这一个惩罚项之后,就能让指数更大的项系数更小,具体原因可以看下图,下图展示了,随着阶数的增加,系数处于一个急速增长的状态。那么我们加入这个惩罚项之后,指数越高的地方,系数如果越大就会导致损失变大,因此达到控制高阶系数的效果。
在这里插入图片描述
l o s s = ∑ i = 1 n ( h θ ( x ) − y ) 2 + λ ∑ j = 1 n θ j 2 loss=\sum_{i=1}^n(h_{\theta}(x)-y)^2+\lambda\sum_{j=1}^n\theta_j^2 loss=i=1n(hθ(x)y)2+λj=1nθj2

Pytorch中正则化的实现

在Pytroch中,正则化的实现是在优化器里实现的。

torch.optim.SGD(params, lr=<required parameter>, momentum=0, dampening=0, weight_decay=0, nesterov=False)

随机梯度下降优化器里的weight_decay就是正则化的 λ \lambda λ,默认为0,不进行正则化处理。
在这里插入图片描述
如果去官网查阅文档,可以发现其实每一个优化器都有实现正则化功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

volcanical

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值