一、什么是OverFitting
我们说一个模型,他可以非常完美的拟合既定的训练数据,也就是代价(损失)函数 ,但是对于新的数据,却不能很好的拟合,也就是不适应于泛化,这样我们就称模型过拟合(over fitting),如下图第三个图所示。此外,还有欠拟合(under fitting),也就是连训练数据也不能够很好地做到拟合,如下图第一个图所示。那么下面中间这个图,我们理想地称之为恰好拟合。
二、什么原因导致的OverFitting呢
这里导致过拟合的主要原因在于,样本的feature过多,也就是说,当样本的特征很多的时候,为了去拟合全部的特征,而不加约束限制的话,有极大的可能,我们的模型会走极端,导致Over Fitting,体现在公式里面,就是诸如上面几个图里面恼人的高次项。当然这只是从我们自身找原因,觉得我们的算法太过于放纵,但是有些外部因素也可能导致过拟合,比如建模样本抽取错误,样本中的噪音过大,等等, 列举出了更多的导致过拟合的因素,可以围观。
三、如何解决因为Feature过多造成的OverFitting呢
1. 减少Feature的数量
· 我们可以通过 手动筛选,哪些是我们想要的Feature,哪些不是,有些Feature可能都是冗余的,比如同样的土地,用不同的单位记录了多个Feature,那么如果这些单位不重要的话,我们觉得这些Feature是很多余的,因而要筛选之。
· 此外,我们还可以通过一个 模型选择算法 来帮助我们筛选Feature,这种神奇的东西,我们留到后面来讲。
但是不管怎么说,我们都是忍痛割爱,为了我们的理想,献出了一部分Feature的生命,因而导致最后的效果可能并不是最理想的。
2. 正则化(Regularization)
通过正则化的思想,我们可以保全所有的Feature,不让他们成为我们理想的牺牲品,我们通过减小代价函数里面的 的大小和数量级,来实现这一目标。
四、如何实现正则化(Regularization)
我们说了,正则化的思想是通过减小代价函数里面的的大小和数量级,那么理所当然的,我们需要对我们的代价函数做一些手脚,在其中给他们加些约束,不让他们过于放纵,导致过拟合。
我们用上面那六个图里面,右上角的那个图举例子。该图中使用了高阶多项式 ,那么我们说正是因为这些恼人的高阶项,导致了过拟合的情况,所以,我们能做的就是使高阶项的系数能变得足够的小,以至于可以将其忽略掉。
这里我们不考虑微积分怎么算出的下述结论,我们形象的做一个比喻,也就是我们之前说的约束,或者称其为惩罚(penalize)。我们想要高阶项的 可以足够的小,那么我们就加大力度对其惩罚,不让他们那样放纵,所以我们将代价函数附加上两项:
这样一来,通过该代价函数梯度下降出来的最优解,所对应的 θ3, θ4 ,就会很小了。
所以我们通过这个例子,进行一次抽象,我们将我们的代价函数写成下面的样子:
其中 λ 又称为正则化参数( Regularization Parameter),如果选择的正则化参数 λ 过大,则会把所有的参数都最小化了,导致模型变成 h θ(x)=θ 0 ,造成矫枉过正的欠拟合 。 注:根据惯例,我们不对 θ 0 进 行惩罚。经过正则化处理的模型与原模型的可能对比如下图所示: