机器学习算法中不得不知的欠拟合与过拟合问题

长文|一文读懂什么是机器学习中,介绍了机器学习所解决的问题,以及哪些种类的机器学习方法。还有前面的历史文章中也分享一些机器学习的经典算法。


在机器学习或者训练深度神经网络的时候经常会出现欠拟合和过拟合这两个问题。一开始我们的模型往往是欠拟合的,也正是因为如此才有了优化的空间,我们需要不断的调整算法来使得模型的表达能力更强。然而,优化到了一定程度就需要解决过拟合的问题了,这个问题也在学术界讨论的比较多。


欠拟合 && 过拟合

本文主要从模型容量的选择出发,讲解欠拟合和过拟合问题。机器学习的主要挑战任务是我们的模型能够在先前未观测的新输入上表现良好,而不是仅仅在训练数据集上效果良好。这儿,将在先前未观测输入上的表现能力称之为泛化(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、机器学习

来自 机器学习与Python学习


千淘万漉虽辛苦,吹尽狂沙始到金

更多机器学习视频资料、数据、书籍等在这里~

长按二维码关注


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值