「五分钟机器学习:进阶篇」机器学习中的Overfit和Underfit
五分钟机器学习
2020年07月16日 13:19

大家好,我是爱讲故事的某某某。 欢迎来到今天的「五分钟机器学习:进阶篇」机器学习中的Overfit和Underfit

如果你看过之前一期视频【五分钟机器学习】Adaboost:前人栽树后人乘凉,你一定还记得这个模型的主要特点是顺序级联的机构可以使后续的Learner更专注于解决之前不能解决的问题。但是这样做会有一个明显的缺点就是他很容易Overfit。

那什么是Overfit呢?本期的专栏将会解答什么是Overfit以及与之相对应的Underfit

  1. Overfit, Underfit的讲解

  2. 如何判断学到的模型是不是Overfit了呢?或者如何阻止Overfitting呢?


Overfit, Underfit 的讲解

大部分机器学习算法的主要目的,是学到数据中的大致分布(General Pattern),从而将这个分布应用于未知的情况以得到符合规律的结果。

举个例子,假设一家公司很受欢迎,每天都能收到上百份的求职者简历。为了快速过滤优质不合标准的求职者(Binary Classification Task)从而减少面试成本,公司从100 个简历及其结果的数据集(即训练集)中训练了一个机器学习模型。在训练过程之后,我们有了对于数据分布的估算,再将这个分布,用于预测没参与训练的数据(即测试样本)从而期望得到符合规律的结果。

Overfit: 对于这个例子,我们假设在训练的过程之后,这家公司又在同样的训练集上使用了刚才训练的模型,得到了99.99%的准确度。看起来非常棒。

但是问题来了。当该公司把这个训练好的模型应用到其他没参与训练的数据上(测试集)时,准确度只有50%。而对于一个Binary Classification模型(预测结果是优质或者是劣质),50%的准确度等同于盲猜。也就是说,这个模型其实是什么都没学到。

对于上面这种情况,从训练集的很好的模型性能,迁移到未参与训练的测试数据后得到很糟糕的结果,说明了这个模型不能很好的推广,也就是模型学到的Pattern不够General。对于这种情况就被称作过拟合,Overfitting。

Underfit: 相对应的,我们假设在训练的过程之后,这家公司又在训练集和测试集上使用了刚才训练的模型,得到了只有60%的准确度。如前文所述而对于一个Binary Classification模型,50%的准确度等同于盲猜。也就是说,这个模型学到的非常有限,仅仅比盲猜好一点

对于上面这种情况,模型在训练集和测试集的表现都一般,也就是模型学到的Pattern不够好。对于这种情况就被称作Underfitting。

如果用图来比较Overfitting, Underfitting,和一个好的学习例子:

Fig1. 各种情况的比较

可以看到,一个好的学习例子,学到的分布往往不会过于复杂或者过于简单。过于复杂,会导致模型的分布不具备推广性,即Lack of Generalization,也就容易造成Overfit;相应的,学到的分布过于简单,会导致真实样本和模型实际输出间的误差过大,从而导致Bad Fitting Example,也就是Underfit。

这里皮一下:

Fig2. Overfitting example. Source from: https://towardsdatascience.com/three-crazily-simple-recipes-

如何判断学到的模型是不是Overfit了呢?或者如何阻止Overfitting呢?

判断一个模型是否Overfitting很简单,你只需要把训练好的模型,同时输入训练集和测试集,并且比较他们的Performance是否差别过大。比如对于一个Classification任务,如果你的Training Accuracy 有90%,但是Test Acc只有50%,这就明显的是一个Overfitting。但是如果你的Training Acc 有90%,且Test Acc有80%+,这就不叫Overfitting,因为你的模型具备了一定的Generalization,可以处理他没有见过的问题。

过拟合主要有两个原因造成的,数据太少和模型太复杂。为了解决这个问题阻止Overfitting,我们可以采用以下几种:

  1. 加大数据集(Training and test Set)使模型在训练的过程中尽可能多的见到更多的问题,从而使学到的分布更加全面更加General。比如采集更多的样本,或者采取Data Augmentation的方法。

  2. 改进你的模型。 2.1. 比如将你的模型进行简化,从而减少一些不重要的参数和属性。比如如果你使用神经网络,你可以减少Hidden Layer,或者减少每个Hidden Layer中的神经元数量(Dropout等);或者如果你使用Adaboost这类的Ensemble Learning方法,你可以减少模型所包含的Weak Learner的数量,并且尽可能的简化每一个Weak Learner。 2.2 你也可以采取一些Regularization的方法主动地调节模型的参数值,比如L1, L2 Norm等等。采用这类方法,可以很大程度的惩罚模型内部的参数,从而阻止Overfitting的发生。(之后的专栏会有介绍)。

  3. 提前结束无意义的训练 Early Stop。比如当我们训练一个Logistic Regression时,我们的目标是专注于找到合适的参数,使Loss(error)尽可能的小。如果重复过多次数的训练,会导致训练出来的模型过分专注于解决训练集,从而使模型不具备Generalization。如下图,可以看到,过多的training iteration,确实可以降低Training Loss,但是也会使模型过分专注于training Samples,从而使Test Loss提高(即Overfit)。这时候我们需要提前结束训练,阻止Test Error的提升。

Fig3. Early Stop


以上就是今天的【五分钟机器学习:进阶篇】机器学习中的Overfit和Underfit的主要内容了。

如果你觉得本期内容有所帮助,欢迎素质三连。

您的支持将是我继续发电的最大动力~

我是某某某