如何直观地理解过拟合与欠拟合那些事~ | 数盟社区

作者:浩彬老撕

在上前几期中,我们曾谈到过在我们希望借助统计学习方法,能够在现有的数据当中掌握规律,从而能够对未来/未知进行预测控制。虽然是说从现有的数据当中掌握规律,但是很显然地,我们的重心还是在于预测上。

既然我们是在做预测,不可避免地,就存在对错的问题,就存在这预测准确率的问题。若是用了精度不够的模型,轻则可能影响生产,重则也是有可能造成事故~当年,要是孔明先生不能准确预测东风,就是不是大事可成,而是万事休矣~

那当然,预测精准率高不仅仅指的是,通过学习得到这个模型对已有的数据有很好的预测能力,更重要的是对未来,未知的数据也能够有很好的预测能力。但是在具体的执行层面,由于我们并没有未来的数据,为了能够充分评价模型的性能,因此我们一般可以会把现有的数据集简单划分为两个部分:一部分数据用作训练集,进行模型训练;剩下的数据用作测试集,用于模型性能评估。(具体的划分比例需要根据实际情况进行调整,一般的做法,我们会将大约60% ~ 80%的数据用于训练,剩下的样本用于测试)。

其实,我们需要把数据划分为训练集合测试的原因很好理解,如果我只有一个训练数据集合,无论是模型训练还是模型测试,都是在训练集上执行的话,这就有点类似于运动会上,咱们既当运动员又当裁判,这事儿怎么看都透着这么点诡异了。

一般地,我们把在训练集上的计算得到误差称之为训练误差,在测试集上计算得到的称为测试误差(也称作为泛化误差)。一般来说,我们通过比较测试误差的高低从而进行模型的选择。

举个简单例子说明,例如我们在研究客户流失,在集合D中我们有1000个样本,我们利用随机抽样的方法从中抽取800个样本作为训练集,剩下的200个作为测试集。划分出集合后,我们就可以在训练集S上进行模型训练,再在测试集T上评估结果。假如在训练集中,我们有700个样本被正确分类,那么训练集的正确率就有700/800*100%=87.5%,而在测试集中,假如我们只有150个样本被正确分类,那么测试集的正确率绩则是150/200*100%=75%.

虽然,一般来说,训练集的准确率都是高于测试集,但是,我们认为训练集测预测准确率不能很好地评估模型的预测能力,直观地说,就类似上面所说这样会带来‘即是裁判又是运动员的问题’。进一步地说,这样很可能会导致过拟合的问题。

让我们再看看如下的例子,对包含10个样本的数据集进行线性回归,分别构建多项式:M=1,M=3,M=5以及M=9(注M=9,因为含有常数项的话,实际上已经包含有10个参数

(1)首先,我们选择了一个一次项的回归模型,我们拟合出一条直线,可以看到数据拟合的效果并不好,不但与训练数据偏差较远,而且变动情况也没有很好的拟合出来,可以想象得到,该模型无论是在训练集上还是在测试集上,误差都比较大。由于变量考虑不足或者对模型形式估计不足,这种对训练数据基本特征都不能够很好拟合的情况,我们称之为“欠拟合”。

(2)进一步地,当我们选取M=3的时候,尽管拟合曲线并没有能够完美拟合出所有的点,但已基本能够把数据趋势很好地拟合出来,基本能够反映出自变量与因变量的关系,该模型在训练集以及测试集的误差可能都比较低,这个状态相对合适。

(3)接下来,我们进一步考擦,当我们选取M=6的时候,我们发现曲线的拟合效果进一步提高,已经非常接近实际数据;当最后,我们选择M=9,可以发现拟合曲线穿过所有的样本点,效果达到最好状态,训练误差为0。尽管,这是在训练集当中最好的状态,但是正因为把样本数据学习得太好了,将会导致我们的泛化能力大大的下降,要知道在我们的训练集中,也是存在噪声的!这种把训练集中数据所有特性(包括噪声特性)都学习起来的状态,我们称之为‘过拟合’。过拟合状态往往在测试集的数据上都表现都要比训练集效果差得多;

 

实际上,当我们选择M=3的时候,就已经把训练数据的基本特征学习到了,并且这个时候模型也相对简单,因此我们可以选取多项式(M=3)作为最终选择。

从上面的例子,我们可以看到,随着模型复杂度的提高(例如更多的参数),训练误差也会随之减少,直至趋向于0(甚至等于0)。但对于测试误差来说,则不是,一开始随着模型复杂度的增加,测试误差逐渐降低,直至模型符合现实数据情况达到最低,如果在这个基础上模型复杂度继续增加,那么测试误差就会从最低点又开始增大。

下图展示了模型复杂度与模型误差之间的关系。

从上图,我们就可以明显看出,模型复杂度并不是越高越好。实际上,模型越复杂,出现“过拟合”的可能性就越大,因此一般而言,我们更喜欢“简单”的模型,而这种思想确实又与众所周知的奥卡姆剃刀原理”是不谋而合的。

“奥卡姆剃刀原理”是有14世纪逻辑学家奥卡姆的威廉所提出,简单来说就是“如无必要,勿增实体”。而放在统计学习领域里面,我们则可以翻译为“若有两个预测能力相当的模型时,我们应该选择其中较为简单的一个”

一般来说,欠拟合的问题比较清楚明了,不外乎是由于所选择的特征不足够或者所选择的学习算法学习能力不够强大。相反,过拟合的问题就比较复杂了,很多时候我们并不清楚问题是否由过拟合引起,或者说过拟合所带来的问题有多严重,因为我们总是不可能避免过拟合的出现。因此,怎们选进行合适的模型选择就变得重中之重。

因此综合来说,为了能准确评估模型性能,我们就可以把整个数据集集分成两个部分,一部分用于训练模型,得到估计参数(训练集);另一部分用于评估模型误差,得到准确率(测试集)

更进一步,在有些实践当中,如在分类问题上,我们往往在事先不知道那种算法是最优的,并且不同的算法里面也包含大量的需要人为设定的超参数。在这些情况下,我们往往需要再划分多一个验证集,用于选择具体超参数,因此也可以把数据集划分为训练集,验证集以及测试集。

步骤:

(1)首先按照一定比例划分为广义训练集A以及测试集T

(2)由于我们还需要一个验证集,所以我们再从广义训练集A再按比例划分训练集S以及验证集V;

(3)我们在训练集S上分别采用不同的算法/参数得出模型,再利用验证集V评估各个模型的性能。经过这一步,我们已经得到了最优的算法/参数配置;

(4)根据得到的最优配置,我们在广义训练集A上(即S+V)重新构建模型,得到最终模型;

(5)把最终模型用于测试集T检验结果,进行评估测试。

注意点:

a):在步骤(3)中,利用随机方法把广义训练集A直接划分为训练集S以及验证集V我们一般称之为留出法,这里的划分方法不但可以使用随机抽样也可以选择分层抽样,这样可以一定程度保持分布的一致性;

b):针对留出法只是直接切割划分,可能会为模型带来一定的不确定性,因此这阶段我们可以选择交叉检验(Cross Validation,简称CV)进行代替;

c):可以在第四步中的广义训练集A得到的模型作为最终模型,也可以在确认算法及超参数的配置后,用整个数据集(A+T)作为最终模型。

End.

作者:浩彬老撕 (中国统计网特邀认证作者)

注:转载文章均来自于公开网络,仅供学习使用,不会用于任何商业用途,如果侵犯到原作者的权益,请您与我们联系删除或者授权事宜,联系邮箱:contact@dataunion.org。转载数盟网站文章请注明原文章作者,否则产生的任何版权纠纷与数盟无关。
期待你一针见血的评论,Come on!

不用想啦,马上 "登录"  发表自已的想法.