一 .过拟合
之前我们有提到过拟合的概念,在计算模型时,我们希望经验误差可以尽可能的小,甚至是0。但是,这样并不是最好的模型,当学习器把训练样本学习的太好了的时候,很可能已经把训练样本自身的一些特点当成了所有潜在样本都会具有的性质,这会导致泛化能力下降,泛化误差增大,这种现象叫做过拟合。
我们来看下图:
第一个模型是一个线性模型,欠拟合,不能很好地适应我们的训练集。
第二个模型恰到好处。
第三个模型是一个四次方的模型,它通过了所有样本点,过于拟合原始数据。这个模型把每个样本的特性当成了所有样本的共性,会导致泛化能力差,预测准确性低。
![](https://img.haomeiwen.com/i10902146/aea71ffcc72bda7e.png)
二. 什么情况下容易发生过拟合
过度拟合的问题通常发生在变量(特征)因子过多,而训练数据又较少的时候。这种情况下训练出的方程总是能很好的拟合训练数据,也就是说,我们的代价函数可能非常接近于 0 或者就为 0。
三. 如何处理过拟合
过拟合发生时,函数图像一般比较复杂,而处理过拟合问题就是要简化函数,使函数不那么复杂。导致函数复杂的原因,一般是函数项过多以及存在高指数的项。所以我们可以从这2方面入手:
1.减少特征变量
我们可以人工检查每一项变量,并以此来确定哪些变量更为重要,然后,保留那些更为重要的特征变量。至于,哪些变量应该舍弃,我们以后在讨论,这会涉及到模型选择算法,这种算法是可以自动选择采用哪些特征变量,自动舍弃不需要的变量。这类做法非常有效,但是其缺点是当你舍弃一部分特征变量时,你也舍弃了问题中的一些信息。
2.正则化
正则化的思想是不舍弃任何特征变量,但是降低高指数变量的系数(θ)。具体做法是在代价函数中加入惩罚项。这样做的话,我们在尝试最小化代价时也需要将这个惩罚纳入考虑中,并最终导致选择较小一些的参数。
举个栗子:
比如第三个模型中,曲线很复杂,我们要惩罚高阶项的系数,θ3和θ4是我们要惩罚的目标,我们可以修改代价函数如下![](https://img.haomeiwen.com/i10902146/1ffaf901352f16be.png)
1000 只是我随便写的某个较大的数字而已。现在,如果我们要最小化这个函数,那么为了最小化这个新的代价函数,我们要让 θ3 和 θ4 尽可能小。因为,如果你在原有代价函数的基础上加上 1000 乘以 θ3 这一项 ,那么这个新的代价函数将变得很大,所以,当我们最小化这个新的代价函数时, 我们将使 θ3 的值接近于 0,同样 θ4 的值也接近于 0,就像我们忽略了这两个值一样。如果我们做到这一点( θ3 和 θ4 接近 0 ),那么我们将得到一个近似的二次函数,从而完成了简化函数。
更一般的情况:
更一般的情况,我们并不知道 θ3 和 θ4 是高阶多项式的项。所以,如果我们有一百个特征,我们并不知道如何选择关联度更好的参数,如何缩小参数的数目等等。因此在正则化里,我们要做的事情,就是减小所有的参数值,因为我们并不知道是哪一个或哪几个要去缩小。因此,我们需要修改代价函数,在这后面添加一项,就像我们在方括号里的这项。当我们添加一个额外的正则化项的时候,我们收缩了每个参数。![](https://img.haomeiwen.com/i10902146/3ff808fffb80abc0.png)
我们来看一下这个正则化项:
![](https://img.haomeiwen.com/i10902146/8dd3116ef31be747.png)
- λ是正则化参数,它控制惩罚的程度,λ太小,惩罚度不够,没起到简化函数的作用;λ太大,惩罚太严重,所有系数都趋近于0,最后得到一条直线,严重欠拟合。
- 注意正则化项是从j=1开始的,惩罚系数不包含常数项θ0,这是惯例,约定俗成的。
总结
正则化的目的就是简化函数,使函数变得平滑。实际上,参数的值越小,通常对应于越光滑的函数,也就是更加简单的函数。因此就不易发生过拟合的问题。
网友评论