【机器学习基础】过拟合
泛化能力差和过拟合问题
以一维的回归分析为例,输出为目标函数加上一点噪声yn=fn(xn)+noise。如果用高阶多项式去拟合数据的话(比如有五个数据 点,用四次多项式去拟合的话,如果让该多项式曲线均通过这几个数据点的话,则只有唯一解),这种情况可能使得训练误差Ein很小,但是实际的真实误差就可 能很大,这说明我们求解的模型的泛化能力很差(bad generalization),这在训练误差很小的情况下推论到未知的数据的话预测结果就会很糟。
VC bound告诉我们,当vc维很高的时候,就会发生Ein很低,但Eout很高的情形。
从上面这个图可以看出,真实误差Eout有一个先降后升的趋势,如果定义Eout这个曲线的最低点为dvc star为最好的vc维的地方,如果横坐标向右移,这时候Ein下降,但是Eout上升,这种情况我们把fitting做的很好,不过做的太过头了,就产 生了过拟合的现象(over fitting);而如果从dvc star向左移,这样造成了欠拟合(under fitting)。
这里过拟合是很常见,而且很不容易解决的问题。
造成过拟合的原因
过拟合其中一个可能的成因就是模型的vc维过高,使用了过强的模型复杂度(model complexity)的能力。
还有一个原因是数据中的噪声,造成了如果完全拟合的话,也许与真实情景的偏差更大。
最后还有一个原因是数据量有限,这使得模型无法真正了解整个数据的真实分布。
学习曲线(Learning curves)
我们以二次多项式和十次多项式的曲线来对比,由之前了解的学习曲线(learning curves)显示随着数据量的增加,误差是如何变化的。
如果是二次多项式的学习曲线,Ein会比期望误差(expected error)效果好一点,因为我们可以在已知的数据上做优化,Eout要比期望误差高一点,因为有噪声的印象,有可能是两倍噪声的效果。
如果是十次多项式的学习曲线,由于模型复杂度增大(vc维变大),在数据量很小的情况下该假设集合的泛化误差较大。
如果两张图比较,我们可以看出在数据量较小的情况下,H10的图形有较高的Eout,即出现过拟合。
这里告诉我们,在数据量不太多的情况下,比较简单的模型(含有较少的假设)也许不太完美,但泛化效果可能会更好一点。
随机性噪声和决定性噪声(stochastic noise and deterministic noise)
我们把数据分成两个部分,一部分是目标函数,另一部分是高斯噪声。构造数据的影响因素有噪声的强度、目标函数的复杂度、数据量。我们要探讨这三个变量对过拟合有什么影响?
下图中,左图是固定的模型复杂度情况下,噪声和数据量的关系,这里表示的是随机性噪声(stochastic noise)的影响。图形中红色区域是过拟合情况比较严重的,蓝色区域是拟合情况比较好的。图形红色区域集中在左上角,噪声很大且数据量很少的情况;而图 形蓝色区域集中在右下角,是数据很多且噪声很小的情况。
右图是固定噪声的影响,横轴是数据量,纵轴是目标函数的复杂度,颜色的表示意义同左图一 样,在数据量少且模型更复杂的情况容易出现过拟合的现象,在数据量足够且目标函数不太复杂的话拟合效果会比较好,这里表示的是决定性噪声 (deterministic noise)的影响。
从以下这两个图可以看出,在数据量较小、随机性噪声太高、决定性噪声太多(目标函数很复 杂)、dv维太高(例如目标函数是低次多项式,而假设是高次多项式,用这种高次多项式去拟合低次多项式,在有噪声的情况下,高次多项式有可能去拟合这些噪 声,从而造成过拟合现象,这解释了下图右图中左下角的红色区域的过拟合的成因)都会造成过拟合现象。
对付过拟合
为了避免过拟合现象有以下几种可能的解决方式:
- start form simple model,使用简单一点的模型
- data clearning/pruning,做数据的情形和修整,确保数据准确
- data hinting,从现有的数据中获取更多的数据或者提示
- regularization,规则化
- validation,检验
补充:
关于数据的提示(data hinting)的解释,比如手写识别中,可以通过将原来的数据图片做一点旋转,再进行训练来规避数据不够多的情况,但这里要注意的是这里的数据不是独立同分布于一个原始的分布的。
转载请注明作者Jason Ding及其出处
Github博客主页(http://jasonding1354.github.io/)
CSDN博客(http://blog.csdn.net/jasonding1354)
简书主页(http://www.jianshu.com/users/2bd9b48f6ea8/latest_articles)