python机器学习——正则化
我们在训练的时候经常会遇到这两种情况:
1、模型在训练集上误差很⼤。
2、模型在训练集上误差很⼩,表现不错,但是在测试集上的误差很⼤
我们先来分析⼀下这两个问题:
对于第⼀个问题,明显就是没有训练好,也就是模型没有很好拟合数据的能⼒,并没有学会如何拟合,可能是因为在训练时我们选择了较少的特征,或者是我们选择的模型太简单了,不能稍微复杂的拟合数据,我们可以通过尝试选取更多的特征、增加⼀些多项式特征或者直接选⽤⾮线性的较复杂的模型来训练。
对于第⼆个问题,可以说是第⼀个问题的另外⼀个极端,就是模型对训练集拟合的太好了,以⾄于把训练集数据中的那些⽆关紧要的特征或者噪⾳也学习到了,导致的结果就是当我们使⽤测试集来评估模型的泛化能⼒时,模型表现的很差。打个不恰当⽐⽅就是你平时把作业都背下来了,但是其实你并没有学会如何正确解题,所以遇到考试就考的很差。解决⽅法就是增加训练集的数据量或者减少特征数量来尝试解决。
第⼀个问题我们叫做⽋拟合(underfitting),第⼆个问题我们叫做过拟合(overfitting)
这两个问题还存在⼀种解决⽅法,就是我接下来要说的正则化。
我们之前说模型学习的过程也就是调整权重参数的过程,通过训练集中的数据来将模型的权重参数调整到⼀个使得损失函数最⼩的值。
对于⼀个分布较复杂的样本,如果训练得到的权重参数维度太少或者参数过⼩,也就是特征项很少,⼀些重要的特征没有起到作⽤,那么这条拟合曲线就会变得很简单,我们看上图的⽋拟合图像,⾥⾯的拟合曲线是⼀条直线,这就是权重参数维度太少的结果。⽽如果权重参数维度过多或者参数过⼤,导致拟合曲线过于复杂,如上图的过拟合图像,拟合曲线可以完美的将两类不同的样本点区分开,但是我们也可以看出这条曲线很复杂,权重参数的项数⼀定很多。
现在进⼊正题,对于正则化,我们常见的形式是L2正则:
λ
2‖w‖2=λ
2
m ∑j=1w2j
这⾥的
λ
就是正则化系数。
我们将正则项直接添加到损失函数后即可使⽤,⽐如对于逻辑回归模型,带有L2正则项的损失函数为:
J(w)=
n
正则化的具体做法∑
i=1−y(i)log(ϕ(z(i)))−(1−y(i))log(1−ϕ(z(i)))+
λ
2‖w‖2
我们通过控制正则化系数来控制权重参数的⼤⼩。⼀般正则化⽤于解决模型过拟合的问题,我们的训练
⽬标是为了使损失函数最⼩,但是如果权重参数过⼤会导致过拟合,模型泛化能⼒下降,那么为了解决这个问题,将正则项加到损失函数后⾯,组成⼀个新的损失函数,为了最⼩化这个新的损失函数,我们在训练过程中不仅要使得误差⼩,还要保证正则项不能太⼤,于是如果我们选择⼀个较⼤的正则化系数,那么为了保证正则项不能太⼤,就会使得权重参数变⼩,这也就是我们的最终⽬的:在保证误差不⼤的情况下,使得权重参数也不能太⼤,缓解了过拟合问题。正则化系数越⼤,正则化越强,权重参数越⼩。
所以对于⽋拟合的模型,我们也可以尝试减⼩正则化系数来增⼤权重参数,⽽对于过拟合模型,我们尝试增⼤正则化系数来减⼩权重参数。
[]
Processing math: 100%
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论