前面我们聊了很多过拟合的话题,而反过来又有一种叫作欠拟合的状态,用英文说是 underfitting。在这种情况下模型的性能也会变差。
一个是过度训练,一个是过度不训练,“刚刚好”是很重要的呀。
嗯,不过要做到“刚刚好”出人意料地难。
欠拟合是与过拟合相反的状态,所以它是没有拟合训练数据的状态吧?
是的。比如用直线对图中这种拥有复杂边界线的数据进行分类的情况(图 4-21),无论怎样做都不能很好地分类,最终的精度会很差。
图 4-21
啊,这样完全不行呀。
出现这种情况的主要原因就是模型相对于要解决的问题来说太简单了。
原因也和过拟合的情况相反。
没错。过拟合与欠拟合基本上是相反关系,原因不同,解决方案也不同。
原来是这样。但是,我们只对模型进行评估,然后根据得到的模型精度就能判断模型是过拟合还是欠拟合吗?
这是一个好问题。我也正想简单聊一下这个事情。
哦?难道我接近问题的核心了?
就像你想的那样,只根据精度不能判断是哪种不好的拟合。
啊,果然如此。那怎么样才能判断到底是过拟合还是欠拟合呢?
我们以数据的数量为横轴、以精度为纵轴,然后把用于训练的数据和用于测试的数据画成图来看一看就知道了。
这是什么意思呢?
我们具体来看一个例子吧。考虑一下使用这样的 10 个训练数据进行回归的场景(图 4-22)。
图 4-22
这些数据似乎用二次函数来拟合比较合适。
是的,不过这里我们先假设
是一次函数。接着,只随便选择其中的 2 个数据用作训练数据。
就 2 个吗?
嗯,你随便选 2 个吧。然后看一看只用这 2 个数据进行训练后,
是什么形状。
哦,随便选就行吗?那
就是这样的(图 4-23)?
图 4-23
没错。在这个状态下,2 个点都完美拟合,误差为 0。
这是只有 2 个训练数据的缘故呀。一次函数肯定会以通过这 2 点为目标去训练的。
那这次把 10 个数据都用来训练呢?
一次函数吗?尽可能地拟合数据……是这样吗(图 4-24)?
图 4-24
是这样的。不过在这种情况下,误差已经无法为 0 了。
是一次函数,这是没有办法的。
是的。这里我想说的就是如果模型过于简单,那么随着数据量的增加,误差也会一点点变大。换句话说就是精度会一点点下降。
嗯,的确是这样。
把这种情况画在刚才所说的以数据的数量为横轴、以精度为纵轴的图上,形状大体上就是这样的(图 4-25)。
图 4-25
我看懂了。一开始精度很高,但随着数据量的增加,精度一点点地变低了。
接下来用测试数据来评估一下。假设在刚才的 10 个训练数据之外,还有测试数据。我们用这些测试数据来评估各个模型,之后用同样的方法求出精度,并画成图。
用测试数据先评估根据 2 个训练数据训练好的模型,再评估根据 10 个训练数据训练好的模型……然后依次求出精度?
对对。训练数据较少时训练好的模型难以预测未知的数据,所以精度很低;反过来说,训练数据变多时,预测精度就会一点点地变高。用图来展示就是这样的(图 4-26)。
图 4-26
我明白了。
将两份数据的精度用图来展示后,如果是这种形状,就说明出现了欠拟合的状态。也有一种说法叫作高偏差,指的是一回事。
这是一种即使增加数据的数量,无论是使用训练数据还是测试数据,精度也都会很差的状态吧?
用语言来描述是这么回事。图中需要注意的点在这里(图 4-27)。
图 4-27
而在过拟合的情况下,图是这样的(图 4-28)。这也叫作高方差。
图 4-28
随着数据量的增加,使用训练数据时的精度一直很高,而使用测试数据时的精度一直没有上升到它的水准。
只对训练数据拟合得较好,这就是过拟合的特征。这张图中需要注意的点在这里(图 4-29)。
图 4-29
原来如此。这两张图分别展示了欠拟合和过拟合的特征。
像这样展示了数据数量和精度的图称为学习曲线。
学习曲线呀。那在知道模型精度低,却不知道是过拟合还是欠拟合的时候,是不是画一下学习曲线就好了?
没错。通过学习曲线判断出是过拟合还是欠拟合之后,就可以采取相应的对策以便改进模型了。
模型评估听上去很简单,但其实有很多内容。我现在知道为什么说只懂得机器学习的算法是不够的了。
关于模型评估的指标和方法,除了今天讲的之外还有其他的,有兴趣的话你自己研究一下哦。
好的,今天太感谢你了!