2.2.5 过拟合与欠拟合
机器学习的一大挑战就是要求算法模型在未观测到的新数据上表现良好,而不仅仅是在训练数据集上表现良好,这种在未观测到的数据上的表现能力称为泛化能力。
通常在训练模型时,优化目标是训练数据集上的误差,也就是训练误差最小,而真正关心的是未知数据集上的泛化误差。通常我们把低训练误差高测试误差的情况称为过拟合,而高训练误差的情况称为欠拟合。如图2.6所示,图2.6(a)是一个合理的模型,图2.6(b)则因为模型的复杂度不够,损失函数的收敛速度很慢,这就使得优化算法做得再好,模型的泛化性能也会很差,因为这条直线在训练集上的误差就很大,这种训练集上不能拟合出来较好的图像,称为欠拟合,或者叫高偏差。图2.6(c)则设定的模型复杂度过高,只要模型的复杂度足够高,拟合后就能完美切合所有训练数据,将训练误差降到非常低,但这并不是最终想要的结果,因为这样的模型把不可估计的随机误差考虑了进来,然后在面临新数据的时候,这些随机误差跟训练数据集中的不一样就会带来较大的偏差,导致测试误差非常大,这就是过拟合。
图2.6 过拟合与欠拟合
欠拟合的解决办法就是寻找更多数据特征,增加模型的复杂度。反之,解决过拟合就需要减少特征属性的数量,此外还有另一种方法就是加入正则化项。
如式(2.12)所示,在目标函数中加入参数的模,用来调整参数的权重。如果参数太多,复杂度太大,目标函数也会随之增加,这样当增加模型复杂度带来训练误差较少的收益,小于参数数量增加带来的开销的时候,算法就会选择复杂度较低的模型。这也就是所谓奥卡姆剃刀原则:在同样能解释已知观测现象的假设中,选择最简单的那个。正则化项可以使用第一范数、第二范数或者其他类型,式(2.12)展示的是添加第二范数之后的损失函数。
关于过拟合和欠拟合的问题不仅出现在线性模型中,在其他模型中,如后面要讲到的树模型、神经网络也常常出现。添加正则化项的方法也已用在神经网络模型中,树模型有与之相对应的解决方法,例如,剪枝。