23-过犹不及:正则化方法防止过度拟合

Posted on 2017-09-24 19:32  LoveAI  阅读(328)  评论(0编辑  收藏  举报

有时我想:如果我能复制好几份,每个自己都活在不同的平行宇宙多好。人都有永恒不朽的愿望,也有尽善尽美的追求。我们的征途是星辰大海,然而现实中常在泥潭里打滚……想起了一个笑话:Arguing with an Engineer is a lot like wrestling in the mud with a pig, after a couple of hours your realize the pig likes it.很好的自我写照。现实让人焦头烂额,但一味地苛求自己并不是办法,往往还会事倍功半(如前段时间我长期加班后眼睛疼,休息了3天才完全恢复)。古人说”以退为进“是很明智的,有时我们需要给自己的负荷中加上一些反向调节的系数,以使自己不那么紧张、盲目。来日方长,过度执着现在并不能很好地迎合未来。

 

在监督学习的世界里,例如线性回归算法(逻辑回归同理),如果一个曲线对于当前的训练集拟合得堪称完美(特征够多,次数够高),那这是个危险的信号:可能这个模型对于未来的数据点会无所适从。所以我们在原有损失函数的基础上加上一个正则项,来惩罚过于复杂的模型系数。有时相对简单的模型反而适应性强,”中庸“的微妙无处不在。

 

 

还是来看预测房价的这个例子,我们先对该数据做线性回归,也就是左边第一张图。

 

如果这么做,我们可以获得拟合数据的这样一条直线,但是,实际上这并不是一个很好的模型。我们看看这些数据,很明显,随着房子面积增大,住房价格的变化趋于稳定或者说越往右越平缓。因此线性回归并没有很好拟合训练数据。

 

我们把此类情况称为欠拟合(underfitting),或者叫作叫做高偏差(bias)。

 

第二幅图,我们在中间加入一个二次项,也就是说对于这幅数据我们用二次函数去拟合。自然,可以拟合出一条曲线,事实也证明这个拟合效果很好。

 

另一个极端情况是,如果在第三幅图中对于该数据集用一个四次多项式来拟合。因此在这里我们有五个参数θ0到θ4,这样我们同样可以拟合一条曲线,通过我们的五个训练样本,我们可以得到如右图的一条曲线。

 

一方面,我们似乎对训练数据做了一个很好的拟合,因为这条曲线通过了所有的训练实例。但是,这实际上是一条很扭曲的曲线,它不停上下波动。因此,事实上我们并不认为它是一个预测房价的好模型。

 

所以,我们把这类情况叫做过拟合(overfitting),也叫高方差(variance)。

 

正则化的原理:

为了解决 overfitting的问题,最常用的方法叫做 L2 regulatization,即在原来的损失函数基础上再加上一个L2正则项(如下)作为新的损失函数:

 

λ就是 regularization parameter,可以用来控制拟合训练数据的好坏。

 

下面学习如何在scikit-learn库的Logistic Regression方法中使用正则化方法,

还是经典的鸢尾花数据集:

 

 

 

上面数组第一行的3个数值分别代表测试集中第一条特征数据对应的三种鸢尾花的预测概率:0=Iris-Setosa(山鸢尾),1=Iris-Versicolor(杂色鸢尾),2=Iris-Virginica(维尔吉妮卡鸢尾)。

 

下面看看不同的正则化系数对于模型系数的影响:

 

可以看出随着C的增大(即正则化系数λ越来越小),对于模型系数复杂度的惩罚越来越小,模型系数也由0逐渐变得显著(绝对值增大)。

 

下周学习最大间隔分类器SVM,敬请期待:)