机器学习基石 Lecture13: Hazard of Overfitting
What is Overfitting?
有时候会发现某些情况下模型对训练数据的拟合很好,但是对于训练数据之外的数据拟合很差。这种情况表明模型有比较差的泛化性能。比如下图中只有5个样本点,如果使用一个4阶的曲线来拟合,就会与原本2阶的目标函数差距太远,也就导致
E
o
u
t
E_{out}
Eout很大。
如果
E
o
u
t
−
E
i
n
E_{out}-E_{in}
Eout−Ein太大,就叫做bad generalization。从一个合理的VC维模型转换到VC维太小的模型而无法表示出目标函数的变化叫做underfitting。反过来叫做overfitting。
如果把overfitting比如成开车出车祸,那么它有几个影响因素,分别是太大的VC维,较多的噪音和较少的数据量。
The Role of Noise and Data Size
下面来研究数据量和噪音对过拟合的影响。有下面两个例子,分别是一个10阶函数带噪音的数据以及一个50阶带噪音的数据。那么从2阶的假设空间转到50阶的假设空间时是否会发生过拟合呢?
从下图可以看出,这两种情况都发生了过拟合。
这可能有些费解,因为两个产生数据的目标函数都是比较高阶的函数,为何使用2阶假设反而更好呢?
我们知道这里有一部分是因为噪音的存在导致的。但是对于没有噪音的数据,同样是2阶的模型表现得更好一些,这又是为什么呢?
Deterministic Noise
可以看一个比较详细的实验。产生数据的函数可以看成是一个均值是目标函数结果而方差是噪音方差的高斯分布。目标函数的复杂度用
Q
f
Q_{f}
Qf表示,下面看看数据集大小,噪音大小与模型复杂度究竟如何影响过拟合。
这个实验里评价过拟合的方式是将10阶的假设空间的结果对应的
E
o
u
t
E_{out}
Eout减去2阶的
E
o
u
t
E_{out}
Eout。
分别使用了不同的x和y坐标画出了对应部分的过拟合程度的图:
从图中可以总结出,导致过拟合的几大原因:1.数据集数量较小 2.随机噪声 3.目标函数复杂度带来的确定性噪声 4.假设函数的vc维太大(表现在右图左下角)。
而确定性噪声,是由于目标函数本身的复杂度带来的。对于太复杂的目标函数而言,与假设函数的结果之间必然存在一些难以拟合的部分,这部分的影响与随机噪声类似。虽然是确定性的,但是类似随机数发生器,起的效果依然是随机的。
这里告诉我们一个训练模型的守则,训练一个啥都不会的模型,不应该使用复杂函数产生的数据。
Dealing with Overfitting
根据实际情况,有大致五种方式来减少过拟合。其中正则化与交叉验证在以后的课里。每种方式也使用了开车时候的一个比喻:
其中data cleaning大致是手动去修正数据集中的一些错误的数据。data pruning是直接将不合理的数据移除。可以使用一些outlier的检测方式。
data hinting是指在当前已有的数据基础上,进行一些调整加入人类的知识或者其它有利的指示。比如手写数字识别的问题里,将图片旋转一定的小角度来增加一些数据的量等等。
不过要注意data hinting的方式有可能会导致新加的数据与原来的数据以及之外的数据不是独立同分布的,也就可能不一定会带来更好的效果。