您的位置:首页 > 其它

机器学习笔记-Hazard of Overfitting

2018-01-03 19:41 399 查看
本系列共四篇,为林轩田机器学习基础篇学习笔记。线性模型通过非线性的变换可以得到非线性的模型,增强了模型对数据的认识能力,但这样导致了在机器学习领域中一个很常见的问题,过拟合。为了解决这个问题引入了规则化因子。为了解决规则化因子的选择,模型的选择,参数的选择等问题引入了validation的相关方法。

机器学习笔记-Nonlinear Transformation

机器学习笔记-Hazard of Overfitting

机器学习笔记-Regularization

机器学习笔记-Validation

What is Overfitting

在上一篇中我们讲到将线性模型linear model加上非线性的转换nonlinear transform就可以很方便的产生非线性的模型来扩展我们学习的能力,但是这样做的缺点是要付出额外的模型复杂度model complexity代价。正是这个额外的模型复杂度会造成机器学习中一个很容易出现和很难解决的问题就是过拟合的问题,本小节先分析过拟合产生的原因, 然后给出解决的方法。

Gad Generalization



以上是一个一维的回归分析的例子。一共有5个资料点,x随机产生,y是将x带入一个二次多项式然后再加上一点点noise得到的。所以最佳的回归曲线应该是蓝色的那条二次曲线。但是由于事先是不知道的, 所以有可能会使用四次的多项式来做回归分析对这5个点进行拟合。如何用四次的多项式来做回归呢?4次的特征转换+线性回归就可以得到一个4次的多项式。这样可以得到一个唯一的4次多项式在这5个点上的Ein=0,也就是这个四次多项式会穿过这5个点,也就是图中的红色的线,但是可以知道其实这条线的Eout是非常大的。当VC dimension很大时候,Ein就会很低,此时Eout就会很大,这样的情形被称为是bad generalization,通俗的讲,这样的模型不能很好的举一反三。



从上图可以看出, 随着dvc不断的增大, 会发现Ein在不断的下降,但是model complexity在不断的上升,所以Eout会先降后升。如果dvc从d∗vc再向右移,这时把fitting做好了,但是太过头了,此时Eout升高了, 我们把这种情况叫做overfitting。相对于overfitting来说,还有underfitting, 从d∗vc向左移动就会出现这种情况,但是这种情况是比较好解决的问题,只需要增加模型的复杂度,即使用比较复杂的特征转换就可以解决,这种情况在上一篇中给出了解决方案。



Cause of Overfitting

使用开车出事故来类比过拟合的问题。目的是更加生活化的了解overfitting是怎么一回事。 开车出事故可能是什么原因造成的呢?例如说,可能是因为开太快。对应到在learning中就是我们使用了太过复杂的模型,本来是二次的多项式产生的数据,但是使用了四次多项式去拟合,导致了太大的模型复杂度;另一个overfitting的原因可能是数据本身有noise,这个对应到开车的例子中可以认为是路不平,当路不平但是车开的很快的时候自然就很容易出事故。也就是当数据本身有noise而你使用了太过于复杂的模型的时候就会很容易出现过拟合的情形;另一个我们需要注意的问题是资料量的大小,如果资料量很多的时候,比较不容易会有overfitting的情况出现。例如如果你对路况比较熟悉,那么就算路况不好, 你还是有把握不出事故。

所以当我们对资料的认识是有限的-对路况不是很了解,并且这些资料又是有噪声的-路面又不平,而我们又使用了比较复杂的模型-开车很快,这样就很有可能过拟合-出车祸。

综合以上的说法,过拟合的三个主要的成因是:

使用了太过复杂的模型

存在噪声

数据量不够多

The Role of Noise and Data Size

这节通过一些实验结果来进一步了解overfitting的成因。现在有两笔一维空间中的资料用来做回归分析,

第一笔资料:使用某个10次多项式作为目标函数,即左图中蓝色的那条线,并且在该10次多项式上加上noise, 得到资料点(图中黑色的点)

第二笔资料:使用一个50次多项式作为目标函数,但是不加noise。50次多项式和数据点如右图所示。



我们看看在这样的数据设定下,什么时候会出现overfitting的问题。

假设现在有两个不同的learning model: 第一个只考虑使用所有的二次多项式来对需要学习的数据进行拟合,g2∈H2;另一个考虑使用所有的十次多项式(十次以下也考虑)来对数据进行拟合,g10∈H10。可以理解为有两个人,一个只会做二次的,一个比较厉害会做所有十次以下的,他们分别来对数据进行拟合。

下图是使用二次和十次多项式分别对两种数据进行拟合的结果:



可以看出,虽然g10在Ein上都要小于g2,但是g10的Eout却都很大,所以从g2切换到g10的过程中发生了overfitting。

在目标函数是十次多项式且有噪声的例子中我们看到:

即使原本的数据就是由十次多项式产生的,但是有噪声,那么可能使用十次的假设函数依然得不到很好的效果。反而使用简单的假设函数会得到更好的结果。或者说就算你知道你的目标是十次多项式,但是你用十次多项式来拟合未必就会做的很好。为什么会这样呢?下面给出了使用二次模型和十次模型的学习曲线learning curve:



横轴是数据量的大小,图中的灰色区域代表的是数据量比较少的情形,这个时候可以看到,使用简单的模型或者是假设集H2的情况下Ein和Eout之间的差距比使用复杂的模型或者假设集H10的情况下Ein和Eout之间的差距要小很多。当然当数据量足够多的时候,使用复杂的模型得到的Expected Error是低于使用简单的模型所能得到的。

所以当资料量不多的时候,使用简单的模型可能会更好的解释这些资料。因为有噪声的存在,复杂的模型可能在过多的关注这些噪声,导致“跑偏”了。

目标函数是50次多项式且没有噪声:

为什么在没有noise的情况下,g10还是做的不好呢?



事实上当我们想要学习的东西很复杂的时候,这个复杂度实际上也产生了和noise一样的影响。一个50次多项式产生的数据对于二次多项式和十次多项式来说都是noise。 所以在这个例子中,还是g2做的比较好。

Deterministic Noise

A detailed experiment

我们想要知道的是:什么时候要特别的小心overfitting会发生?

我们把产生资料的过程分成两个部分: 一个是target function;另一个是noise,假设噪声是高斯分布的。

y=f(x)+ϵ∼Gaussian(∑q=0Qfαqxqf(x),σ2)

Qf表示多项式的次数,

N表示资料量,

ϵ2表示noise的强度。

接下来将分析这三个变数对overfitting的影响。同样的我们使用上一小节中的两个模型来对以上产生的数据进行学习,一个是g2∈H2,包含所有的二次多项式的假设集;另一个是g10∈H10,包含所有的十次多项式的假设集。这里我们知道一定有Ein(g10) ≤ Ein(g2)。

现在我们定义一个衡量overfit的指标:Eout(g10) - Eout(g2),如果这个值很大,表示 overfit 很严重。如果这个值不是很大的话表明 overfit 不严重。接下来给出的图将说明的问题是, 在各种不同的条件下:不同的N, 不同的Qf, 不同的ϵ2, 什么时候overfitting最严重。

图中的颜色代表overfit的程度,红色表示过拟合很严重,也就是两个Eout的差距非常的大;蓝色表示过拟合不是很严重,也就是说,g10表现的更好。

结果1

Qf=20



结论:

当资料很少,noise很多的时候,overfit很严重;

当资料很多,noise很少的时候,overfit不严重。

这是一个很容易理解的结果。

结果2

σ2=0.1



上面这个图中,横轴还是资料的量;纵轴表示的是目标函数的复杂度

结论:

当资料很少,目标函数很复杂的时候,overfit很严重;

当资料很多,目标函数不是很复杂的时候,overfit不严重。

综合以上的两个图,高斯噪声对overfit有很大的影响,我们称之为stochastic noise;目标函数的复杂度对于overfit也有很大并且是类似的影响, 我们将其称为deterministic noise。所以我们得到overfit发生的情形可以总结为以下的四点:

资料量太少的时候(两幅图的左侧)

stochastic noise 太大的时候(第一幅图的左上角)

deterministic noise 太多的时候(第二幅图的左上角)

使用的模型的复杂度太高的时候(第二幅图的左下角)

Deterministic Noise



通过上面的谈论可以知道,当noise太过复杂的时候, 其影响和数据中的噪声差不多。例如h∗是假设集中最好的,但是对于很复杂或者是更高次的目标函数来说,很多地方依然capture不到。图中的灰色区域就是我们所说的deterministic noise。 所以从这个意思上来说,目标函数如果太复杂的话和噪声对overfit的影响是差不多的。但是还有有一点的区别的:因为如果我们使用更为复杂的model(假设集)的话,理论上说deterministic noise应该会变小,但是同时模型的复杂度的提升也会造成overfit。

Dealing with Overfitting

下面给出了解决overfitting的一些思路:

从简单的模型开始

data cleaning/data pruning

data hinting

regularization

validation

本篇对data cleaning/data pruning和data hinting进行简单的讲解,regularization和validation将在后续文章中介绍。

Data Cleaning/Pruning



当使用某些手段发现有的样本存在明显错误的时候,例如该样本本身标注是×,但是到其他的×距离很远,或者到其他的◯距离很近,或者利用已经得到的训练器在该样本上划分错误,例如左上角的样本“5”那样,这时可以采取的方法有:

data cleaning:将数据的label修正过来;

data pruning:将数据扔掉。

Data Hinting



在手写数字的识别中,如果手头上的资料不是很多的时候,可以对已有的资料做一些平移,小幅度的旋转等操作,这样可以得到更多的资料,这些资料被称为virtual example。但是要注意的是这样的资料不再是IID的来自原来的distribution。

Summary

本篇介绍了过拟合这个在机器学习中非常重要的问题。当数据存在噪声,当模型的复杂度太高,当数据量不够, 并且如果target function太过于复杂的时候,过拟合都会出现。本篇介绍了简单的面向data的用来减低过拟合的方法,这些方法可能会有效,也可能不会。之后会介绍专门用来解决过拟合的系统的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: