查看原文
其他

机器学习(2)之过拟合与欠拟合

2017-06-19 昱良 机器学习算法与Python学习

微信公众号

关键字全网搜索最新排名

【机器学习算法】:排名第一

【机器学习】:排名第二

【Python】:排名第三

【算法】:排名第四

过拟合与欠拟合

上一篇(机器学习(1)之入门概念),我们介绍了机器学习所解决的问题,以及哪些种类的机器学习方法。本文我们主要从模型容量的选择出发,讲解欠拟合和过拟合问题。机器学习的主要挑战任务是我们的模型能够在先前未观测的新输入上表现良好,而不是仅仅在训练数据集上效果良好。这儿,将在先前未观测输入上的表现能力称之为泛化(generalization)。


首先定义几个关于误差的概念,通常情况下,通过训练数据集训练模型后在训练数据上进行的一些误差计算称之为训练误差(training error),通常我们的目前是降低训练误差(为防止过拟合我们通常加一个正则化项,后面会提到)。上述这个问题其实就是一个优化问题,但是优化问题不同于机器学习问题,在进行机器学习建模时我们不仅希望我们的训练误差很小,同时我们的最终目的是使得测试误差(test error)很小,也就是泛化误差(generalization error)很小。通常,我们度量测试数据集在模型中的性能来评估模型的泛化误差。例如,在线性回归中我们通过最小化训练误差最小化来训练模型

但是我们真正关注的是测试误差

由于训练数据集和测试数据集是独立同分布产生于同一个数据生成过程的,这个假设使得我们可以寻找训练误差和测试误差之间的关系。假设我们有概率分布p(x,y),从中进行重复采样生成训练数据集和测试数据集。对于同一个参数W,训练数据集和测试数据集的误差期望是相等的,唯一的区别便是数据集的名称不同而已。但是实际的机器学习应用中,我们不会提前确定固定的参数然后从中进行采样的。以下是决定机器学习算法效果的决定性因素:

  1. 降低训练误差

  2. 缩小训练误差与测试误差之间的差距


其实上述的两个因素真好对应于我们今天所说的欠拟合(underfitting)和过拟合(overfitting)。欠拟合发生在模型不怕能在训练数据集上获得足够小的误差。过拟合发生在训练误差和测试误差之间的差距太大。


通过调整模型的容量,我们可以控制模型是否偏向于过拟合或者欠拟合。通俗而言,模型容量就是指其拟合各种函数的能力。容量低的模型不能或者很难拟合训练数据集;容量很高可能会因为学习了一下干扰特征而出现过拟合。

模型选择

接下来通过多项式函数拟合问题为例说明这个问题(引用:《统计学习方法》(P12))。


给定训练数据集:

其中,xi世输入x的观测值,yi是相应的输出y的观测值,i=1,2,3,...,N。多项式函数拟合的任务是假设给定数据由M次多项式函数生成,选择最有可能产生这些数据的M次多项式。如图所示的10个点数据,用0---9次多项式进行拟合,图中画出了需要用多项式函数曲线拟合的数据。

M次多项式函数拟合问题的例子

设M次多项式为:

解决这一问题的思路可以是这样的,首先确定模型的复杂度;然后在给定模型复杂度的情况下,按照经验风险最小化的策略求解参数,经验风险最小化具体如下

进一步转化为:

对各个参数求导后为

最终求的多项式的系数。


上图中我们给出了M=0,1,3,9时多项式的拟合效果。当M=0时,这就是一条曲线,数据拟合效果很差;当M=1时,多项式是一条直线,拟合效果也很差;当M=9时,多项式通过每个数据点,训练误差为零,从训练数据的拟合效果而言,效果很好。但是因为训练数据本身存在噪声,这种拟合对于未知数据的预测能力往往不是最好的,该现象也就是之前提到的过拟合现象,而M=0,1时存在欠拟合现象。而当M=3时,多项式曲线对训练数据拟和效果足够好,模型也比较简单是一个不错的选择。

训练误差和测试误差与模型复杂度的关系训练误差和测试误差曲线趋势表现的非常不一致。在图的左侧,训练误差和泛化误差都很高,处于欠拟合期;当我们增加模型容量也就是增加模型复杂度时,训练误差减小,但是训练误差和泛化误差之间的差距变大,最终这个间距的大小超过了训练误差的下降,从而进入了过拟合期。


合理的选择模型的复杂度和模型容量,通常采用正则化和交叉验证。


参考资料:

  1. 统计学习方法

  2. 斯坦福大学machine learning

  3. 机器学习

投稿、商业合作

请发邮件到:357062955@qq.com

喜欢,别忘关注~

帮助你在AI领域更好的发展,期待与你相遇!


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存