在我们训练模型的时候经常会遇到过拟合和欠拟合的问题。我们的模型一开始是欠拟合的,正因为如此,才会有优化的空间,需要不断的调整算法来使得模型的表达能力更强。但是优化到一定程度,就需要解决过拟合问题了。

1、过拟合:学习时选择的模型包含的参数过多,以致于出现这一模型对已知数据预测得很好,对未知数据预测得很差的现象。


在Python中拟合优度越高越好吗_欠拟合


     图1.2给出了用多项式去拟合图中的数据点,M是多项式最高次数,图中的另一条曲线为训练集;M=0,M=1,M=3, M=9的多项式拟合的情况,当M=1时,拟合效果很差;当M=9时,多项式曲线通过每一个数据点,训练误差为0,对于给定的训练集来说,效果是这四个图中最好的;但是,原始数据集中本身存在噪声,这个曲线对未知数据拟合往往不是最好的,这就是过拟合现象的发生。


      这也就是说,在模型选择时,不仅要考虑对训练集的预测能力,还要考虑对测试集的预测能力。当M=3时,多项式对训练集拟合的足够好,对测试集拟合的也比较好,模型也比较简单,因此应选M=3。


2、 训练误差和测试误差与模型复杂度的关系。     


在Python中拟合优度越高越好吗_在Python中拟合优度越高越好吗_02

     图1.3描述了训练误差和测试误差与模型复杂度的关系,随着模型复杂度的增加,训练误差逐渐减小,并趋向于0;而测试误差会先减小达到最小值时又增大,当模型的复杂度过大时,过拟合现象就会发生。

3、欠拟合:模型没有很好的捕捉到数据特征,不能够很好的拟合数据。

在Python中拟合优度越高越好吗_在Python中拟合优度越高越好吗_03

  上述中间的图没有很好的拟合数据,中间的图再加上一个二次项,就能够很好的拟合数据了,如右图所示。