机器学习之过拟合与欠拟合


1 机器学习中的误差

一般地,将学习器(机器学习模型)的实际预测输出与样本的真实输出之间的差异称为“误差”(error)。

统计学习的目的是使学到的模型不仅对已知数据而且对未知数据都能有很好的预测能力。不同的学习方法会给出不同的模型。当损失函数给定时,基于损失函数的模型的训练误差(training error)和模型的测试误差(test error) 就自然成为学习方法评估的标准。注意,统计学习方法具体采用的损失函数未必是评估时使用的损失函数。当然,让两者一致是比较理想的。

2 过拟合与欠拟合

2.1 期望误差

在机器学习三要素中,详见。我们理论上希望期望误差越小越好,但是期望误差又不能直接求得,所以使用经验误差来估计期望误差。因此,希望机器学习模型预测的输出值与真实值间的误差越小。

但是,实际中并不是经验误差(期望误差)越小越好。若经验误差(期望误差)过小,则可能使得模型在训练集中表现的非常好,而在测试集中表现的非常差。也就是说过于强调拟合原始数据,而丢失了算法的本质,若给出一个新的值使之预测,它将表现的很差,将此现象称之为过拟合。

2.2 过拟合与欠拟合

下图是一个回归问题的例子,以此为例进行引入过拟合与欠拟合现象。

第一个模型是一个线性模型,处于欠拟合状态,不能很好地适应我们的训练集;第三个模型是一个四次方的模型,过于强调拟合原始数据,而丢失了算法的本质:预测新数据。我们可以看出,若给出一个新的值使之预测,它将表现的很差,是过拟合,虽然能非常好地适应我们的训练集但在新输入变量进行预测时可能会效果不好;而中间的模型似乎最合适。

分类问题中也存在这样的问题:

第一个模型处于欠拟合状态,不能很好的分类数据;第三个模型处于过拟合状态,对于新的数据集会表现的很差;中间第二个模型最合适。就以多项式理解,x 的次数越高,拟合的越好,但相应的预测的能力就可能变差(第三个模型)。

2.2.1 过拟合

泛化误差可以衡量一个机器学习模型是否可以很好地泛化到未知数据。机器学习的目的是减少泛化误差。

泛化误差一般表现为一个模型在训练集和测试集上的错误率。

模型的过拟合是无法彻底无法避免的,我们所能做的只能是“缓解”或减少其风险。

2.2.1.1 过拟合根本原因

过拟合的根本原因:是特征维度过多,导致拟合的函数完美的经过训练集,但是对新数据的预测结果则较差。即指学习时选择的模型所包含的参数过多,模型复杂度高,以致于出现这一模型对已知数据预测得很好,但对未知数据预测得很差的现象。

模型过拟合时所选模型的复杂度则往往会比真模型更高,在下图中,右边的图处于过拟合状态。函数超参数有5个,特征参数的维度为4维;而左边的图处于恰好合适的状态,函数超参数有3个,特征参数的维度为2维,因此,模型复杂度越高(多项式次数越多),越容易过拟合。

2.2.1.2 假设函数过拟合检验

为了检验算法是否过拟合,我们将数据分成训练集和测试集,通常用70%的数据作为训练集,用剩下30%的数据作为测试集。很重要的一点是训练集和测试集均要含有各种类型的数据,通常我们要对数据进行“洗牌”,然后再分成训练集和测试集。

测试集评估在通过训练集让我们的模型学习得出其参数后,对测试集运用该模型,我们有两种方式计算误差:

1、对于线性回归模型,我们利用测试集数据计算代价函数

2、对于逻辑回归模型,我们除了可以利用测试数据集来计算代价函数外:

误分类的比率,对于每一个测试集实例,计算:

然后对计算结果求平均。

2.2.1.3 过拟合的判断

使用一个测试集来测试每一次迭代的参数在测试集上是否最优,将训练集和测试结的代价函数错误率与迭代次数绘制在同一张图上。比较随着迭代次数的增加,训练误差与测试误差间的关系。

对于训练集,当迭代次数较小时,模型拟合程度更低,训练误差较大;随着迭代次数的增长,拟合程度提高,训练误差减小。

对于测试集或交叉验证集,当迭代次数较小时,模型拟合程度低,测试集或交叉验证集误差较大;但是随着迭代次数的增长,测试集或交叉验证集误差呈现先减小后增大的趋势,转折点是我们的模型开始过拟合训练数据集的时候,此时,应该提前停止训练或测试。

2.2.1.4 过拟合解决方法

问题是,如果我们发现了过拟合问题,应该如何处理?

1、减少特征维度,丢弃一些不能帮助我们正确预测的特征。可以是手工选择保留哪些特征,或者使用一些模型选择的算法来帮忙(例如PCA)

2、正则化。保留所有的特征,但是减少参数θ的大小(magnitude)来影响模型。

3、数据集扩增。需要得到更多的符合要求的数据,即和已有的数据是独立同分布的。

2.2.2 欠拟合

指机器学习模型不能在训练集上获得足够小的误差,即训练误差太大,模型在训练集中没有训练好。

2.2.2.1 欠拟合根本原因

欠拟合的根本原因是特征维度过少,导致拟合的函数无法满足训练集,误差较大,训练不充分。

模型欠拟合时所选模型的复杂度则往往会比真模型更低,在下图中,右边的图处于欠拟合状态。函数超参数有2个,特征参数的维度为1维;而左边的图处于恰好合适的状态,函数超参数有3个,特征参数的维度为2维,因此,模型复杂度越低,越容易欠拟合。

2.2.2.2 欠拟合的判断

使用一个测试集来测试每一次迭代的参数在测试集上是否最优,将训练集和测试结的代价函数错误率与迭代次数绘制在同一张图上。比较随着迭代次数的增加,训练误差与测试误差间的关系。

对于训练集,当迭代次数较小时,模型拟合程度更低,训练误差较大,处于欠拟合状态,随着迭代次数的增加,训练误差减少缓慢或处于平缓状态。

对于测试集,当迭代次数较小时,模型拟合程度低,测试误差较大,处于欠拟合状态,随着迭代次数的增加,训练误差减少缓慢或处于平缓状态。

即主要检查测试集或验证集的误差大小,若测试集或验证集的误差很大,则说明模型处于欠拟合状态。

2.2.2.3 欠拟合的解决方法

通过增加特征维度,即增加训练数据集来解决。

3 偏差与方差

3.1 偏差与方差分解

机器学习中偏差与方差并不是单独存在,而是相互依存。偏差-方差分解解释了偏差、方差和噪音间的关系。偏差-方差分解试图对机器学习算法的期望泛化错误率进行拆解,算法在不同训练集上学得的结果很可能不同,即便这些训练集是来自同一分布。

即泛化误差可以分解为偏差、方差和噪音之和。

偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力;方差度量了同样大小的训练集的变化所导致的学习性能的变化,即刻画了数据扰动所造成的的影响;噪音表达了在当前任务上任何学习算法所能表达到的期望泛化误差下界,即刻画了学习问题本身的难度。

给定学习任务,为了取得好的泛化性能,则需要使得偏差较小,即能够给充分拟合数据,并且是方差较小,即使得数据扰动产生影响小。

下图是偏差-方差关系图。给定学习任务,假定我们能控制学习算法的训练程度,则在训练不足时,学习器的拟合能力不够强,训练数据的扰动不足以使得学习器产生显著的变化,此时偏差主导了泛化误差错误率;随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据发生的扰动渐渐被学习器学到,方差逐渐主导了泛化错误率;在训练数程度充足后,学习器拟合能力已经非常强,训练数据发生轻微的扰动则会导致学习器发生显著的变化,若训练数据自身的、非全局的特性被学习器学到了,则会发生过拟合。

3.2 过拟合、偏差与方差间的关系

在机器学习中,当你运行一个学习算法时,如果这个算法的表现不理想,那么多半是出现两种情况:要么是偏差比较大,要么是方差比较大。换句话说,出现的情况要么是欠拟合,要么是过拟合问题。那么这两种情况,哪个和偏差有关,哪个和方差有关,或者是不是和两个都有关?

以多项式函数为例,多项式的次数越多,模型越复杂。我们通常会通过将训练集和交叉验证集的代价函数误差与多项式的次数绘制在同一张图表上来帮助分析:

对于训练集,当多项式次数d较小,模型较简单时,模型拟合程度更低,误差较大;随着多项式次数d的增长,模型复杂度增加,拟合程度提高,误差减小。

对于交叉验证集,当多项式次数d较小,模型较简单时,模型拟合程度低,误差较大;但是随着多项式次数d的增长,模型复杂度增加,误差呈现先减小后增大的趋势,转折点是我们的模型开始过拟合训练数据集的时候。

如果我们的交叉验证集误差较大,我们如何判断是方差还是偏差呢?根据上面的图表,我们知道:

当训练集误差和交叉验证集误差相近时,训练集误差和测试集误差的偏差很小,模型处于欠拟合状态;即训练集误差和交叉验证集误差近似时:偏差/欠拟合。

当训练集误差和交叉验证集误差相差较大时,训练集误差和交叉验证集误差的方差很大,模型处于过拟合状态;即交叉验证集误差远大于训练集误差时:方差/过拟合。

3.3 偏差与方差的判断

学习曲线就是一种很好的工具,我经常使用学习曲线来判断某一个学习算法是否处于偏差、方差问题。学习曲线是学习算法的一个很好的合理检验(sanity check)。学习曲线是将训练集误差和交叉验证集误差作为训练集实例数量(m)的函数绘制的图表。

即,如果我们有100行数据,我们从1行数据开始,逐渐学习更多行的数据。思想是:当训练较少行数据的时候,训练的模型将能够非常完美地适应较少的训练数据,但是训练出来的模型却不能很好地适应交叉验证集数据或测试集数据。

如何利用学习曲线识别高偏差/欠拟合:作为例子,我们尝试用一条直线来适应下面的数据,可以看出,无论训练集有多么大误差都不会有太大改观:

也就是说在高偏差/欠拟合的情况下,增加数据到训练集不一定能有帮助。

如何利用学习曲线识别高方差/过拟合:假设我们使用一个非常高次的多项式模型,并且正则化非常小,可以看出,当交叉验证集误差远大于训练集误差时,往训练集增加更多数据可以提高模型的效果。

也就是说在高方差/过拟合的情况下,增加更多数据到训练集可能可以提高算法效果。

4 参考资料

[1].《机器学习》 —周志华

[2].《统计学习方法》 —李航

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/290624.html

(0)
上一篇 2022年10月4日 22:44
下一篇 2022年10月4日 22:44

相关推荐

发表回复

登录后才能评论