台湾大学林轩田机器学习基石课程学习笔记13 -- Hazard of Overfitting
来源:互联网 发布:田岛7.0绣花软件 编辑:程序博客网 时间:2024/06/18 16:13
上节课我们主要介绍了非线性分类模型,通过非线性变换,将非线性模型映射到另一个空间,转换为线性模型,再来进行分类,分析了非线性变换可能会使计算复杂度增加。本节课介绍这种模型复杂度增加带来机器学习中一个很重要的问题:过拟合(overfitting)。
一、What is Overfitting?
首先,我们通过一个例子来介绍什么bad generalization。假设平面上有5个点,目标函数f(x)是2阶多项式,如果hypothesis是二阶多项式加上一些小的noise的话,那么这5个点很靠近这个hypothesis,
我们回过头来看一下VC曲线:
hypothesis的阶数越高,表示VC Dimension越大。随着VC Dimension增大,
bad generation和overfitting的关系可以理解为:overfitting是VC Dimension过大的一个过程,bad generation是overfitting的结果。
一个好的fit,
我们举个开车的例子,把发生车祸比作成overfitting,那么造成车祸的原因包括:
车速太快(VC Dimension太大);
道路崎岖(noise);
对路况的了解程度(训练样本数量N不够);
也就是说,VC Dimension、noise、N这三个因素是影响过拟合现象的关键。
二、The Role of Noise and Data Size
为了尽可能详细地解释overfitting,我们进行这样一个实验,试验中的数据集不是很大。首先,在二维平面上,一个模型的分布由目标函数f(x)(x的10阶多项式)加上一些noise构成,下图中,离散的圆圈是数据集,目标函数是蓝色的曲线。数据没有完全落在曲线上,是因为加入了noise。
然后,同样在二维平面上,另一个模型的分布由目标函数f(x)(x的50阶多项式)构成,没有加入noise。下图中,离散的圆圈是数据集,目标函数是蓝色的曲线。可以看出由于没有noise,数据集完全落在曲线上。
现在,有两个学习模型,一个是2阶多项式,另一个是10阶多项式,分别对上面两个问题进行建模。首先,对于第一个目标函数是10阶多项式包含noise的问题,这两个学习模型的效果如下图所示:
由上图可知,2阶多项式的学习模型
然后,对于第二个目标函数是50阶多项式没有noise的问题,这两个学习模型的效果如下图所示:
由上图可知,2阶多项式的学习模型
上面两个问题中,10阶模型都发生了过拟合,反而2阶的模型却表现得相对不错。这好像违背了我们的第一感觉,比如对于目标函数是10阶多项式,加上noise的模型,按道理来说应该是10阶的模型更能接近于目标函数,因为它们阶数相同。但是,事实却是2阶模型泛化能力更强。这种现象产生的原因,从哲学上来说,就是“以退为进”。有时候,简单的学习模型反而能表现的更好。
下面从learning curve来分析一下具体的原因,learning curve描述的是
我们的第9次课的笔记 NTU林轩田机器学习基石课程学习笔记9 – Linear Regression已经介绍过了learning curve。在learning curve中,横轴是样本数量N,纵轴是Error。
其中d为模型阶次,左图中d=2,右图中d=10。
本节的实验问题中,数据量N不大,即对应于上图中的灰色区域。左图的灰色区域中,因为d=2,
值得一提的是,如果数据量N很大的时候,上面两图中
机器学习中的维度灾难
另一个例子中,目标函数是50阶多项式,且没有加入noise。这种情况下,我们发现仍然是2阶的模型拟合的效果更好一些,明明没有noise,为什么是这样的结果呢?
实际上,我们忽略了一个问题:这种情况真的没有noise吗?其实,当模型很复杂的时候,即50阶多项式的目标函数,无论是2阶模型还是10阶模型,都不能学习的很好,这种复杂度本身就会引入一种‘noise’。所以,这种高阶无noise的问题,也可以类似于10阶多项式的目标函数加上noise的情况,只是二者的noise有些许不同,下面一部分将会详细解释。
三、Deterministic Noise
下面我们介绍一个更细节的实验来说明 什么时候小心overfit会发生。假设我们产生的数据分布由两部分组成:第一部分是目标函数f(x),
那么下面我们分析不同的
上图中,红色越深,代表overfit程度越高,蓝色越深,代表overfit程度越低。先看左边的图,左图中阶数
从上面的分析,我们发现
总结一下,有四个因素会导致发生overfitting:
data size N
↓ stochastic noise
σ2↑ deterministic noise
Qf↑ excessive power
↑
我们刚才解释了如果目标函数f(x)的复杂度很高的时候,那么跟有noise也没有什么两样。因为目标函数很复杂,那么再好的hypothesis都会跟它有一些差距,我们把这种差距称之为deterministic noise。deterministic noise与stochastic noise不同,但是效果一样。其实deterministic noise类似于一个伪随机数发生器,它不会产生真正的随机数,而只产生伪随机数。它的值与hypothesis有关,且固定点x的deterministic noise值是固定的。
四、Dealing with Overfitting
现在我们知道了什么是overfitting,和overfitting产生的原因,那么如何避免overfitting呢?避免overfitting的方法主要包括:
start from simple model
data cleaning/pruning
data hinting
regularization
validataion
这几种方法类比于之前举的开车的例子,对应如下:
regularization和validation我们之后的课程再介绍,本节课主要介绍简单的data cleaning/pruning和data hinting两种方法。
data cleaning/pruning就是对训练数据集里label明显错误的样本进行修正(data cleaning),或者对错误的样本看成是noise,进行剔除(data pruning)。data cleaning/pruning关键在于如何准确寻找label错误的点或者是noise的点,而且如果这些点相比训练样本N很小的话,这种处理效果不太明显。
data hinting是针对N不够大的情况,如果没有办法获得更多的训练集,那么data hinting就可以对已知的样本进行简单的处理、变换,从而获得更多的样本。举个例子,数字分类问题,可以对已知的数字图片进行轻微的平移或者旋转,从而让N丰富起来,达到扩大训练集的目的。这种额外获得的例子称之为virtual examples。但是要注意一点的就是,新获取的virtual examples可能不再是iid某个distribution。所以新构建的virtual examples要尽量合理,且是独立同分布的。
五、总结
本节课主要介绍了overfitting的概念,即当
注明:
文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程
- 台湾大学林轩田机器学习基石课程学习笔记13 -- Hazard of Overfitting
- 机器学习基石-Hazard of Overfitting
- 台湾大学林轩田机器学习基石课程学习笔记14 -- Regularization
- 台湾大学林轩田机器学习基石课程学习笔记15 -- Validation
- 台湾大学林轩田机器学习基石课程学习笔记
- 机器学习基石——第13-14讲.Hazard of Overfitting
- 台湾大学林轩田机器学习基石课程学习笔记3 -- Types of Learning
- 台湾大学林轩田机器学习基石课程学习笔记4 -- Feasibility of Learning
- 台湾大学林轩田机器学习基石课程学习笔记6 -- Theory of Generalization
- 台湾大学林轩田机器学习基石课程学习笔记2 -- Learning to Answer Yes/No
- 台湾大学林轩田机器学习基石课程学习笔记5 -- Training versus Testing
- 台湾大学林轩田机器学习基石课程学习笔记7 -- The VC Dimension
- 台湾大学林轩田机器学习基石课程学习笔记8 -- Noise and Error
- 台湾大学林轩田机器学习基石课程学习笔记9 -- Linear Regression
- 台湾大学林轩田机器学习基石课程学习笔记10 -- Logistic Regression
- 台湾大学林轩田机器学习基石课程学习笔记11 -- Linear Models for Classification
- 台湾大学林轩田机器学习基石课程学习笔记12 -- Nonlinear Transformation
- 台湾大学林轩田机器学习基石课程学习笔记16(完结) -- Three Learning Principles
- SDUT 3806 离散题目12
- SQLite学习手册(C/C++接口简介)
- 设置input中placeholder的字体颜色及属性
- 第二十二章 集成验证码——《跟我学Shiro》
- Openssl命令行生成公私钥
- 台湾大学林轩田机器学习基石课程学习笔记13 -- Hazard of Overfitting
- Oracle用一个表的一个字段值去更新另一张表的某个字段值
- java Swing 获取frame中的控件信息
- 机器学习笔记二十:拉格朗日函数/对偶
- 000031:将各变量隐式转换
- 百度统计
- 通用的进程监控脚本process_monitor.sh使用方法
- 使用MiniDumpWriteDump API 来生成程序的Dump
- SQLite学习手册(数据表和视图)