机器学习基石13-Hazard of Overfitting

注:
文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程。
笔记原作者:红色石头
微信公众号:AI有道

上节课主要介绍了非线性分类模型,通过非线性变换,将非线性模型映射到另一个空间,转换为线性模型,再来进行分类,分析了非线性变换可能会使计算复杂度增加。本节课介绍这种模型复杂度增加带来机器学习中一个很重要的问题:过拟合(overfitting)。

一、What is Overfitting

首先,我们通过一个例子来介绍什么bad generalization。假设平面上有5个点,目标函数\(f(x)\)是2阶多项式,如果hypothesis是二阶多项式加上一些小的noise的话,那么这5个点很靠近这个hypothesis, \(E_{in}\)很小。如果hypothesis是4阶多项式,那么这5点会完全落在hypothesis上,\(E_{in}=0\) 。虽然4阶hypothesis的\(E_{in}\)比2阶hypothesis的要好很多,但是它的\(E_{out}\)很大。因为根据VC Bound理论,阶数越大,即VC Dimension越大,就会让模型复杂度更高, \(E_{out}\)更大。我们把这种\(E_{in}\)很小, \(E_{out}\)很大的情况称之为bad generation,即泛化能力差。
1010007-20190501093044677-191126079.png
回过头来看一下VC曲线:
1010007-20190501093130854-841617834.png
hypothesis的阶数越高,表示VC Dimension越大。随着VC Dimension增大, \(E_{in}\)是一直减小的,而\(E_{out}\)先减小后增大。在\(d^*\)位置,\(E_{out}\)取得最小值。在\(d^*_{VC}\)右侧,随着VC Dimension越来越大,\(E_{in}\)越来越小,接近于0, \(E_{out}\)越来越大。即当VC Dimension很大的时候,这种对训练样本拟合过分好的情况称之为过拟合(overfitting)。另一方面,在\(d^*_{VC}\)左侧,随着VC Dimension越来越小,\(E_{in}\)\(E_{out}\)都越来越大,这种情况称之为欠拟合(underfitting),即模型对训练样本的拟合度太
差,VC Dimension太小了。
1010007-20190501093538265-1121653529.png
bad generation和overfitting的关系可以理解为:overfitting是VC Dimension过大的一个过程,bad generation是overfitting的结果。

一个好的fit, \(E_{in}\)\(E_{out}\)都比较小,尽管\(E_{in}\)没有足够接近零;而对overfitting来说,\(E_{in}\approx 0\),但是\(E_{out}\)很大。那么,overfitting的原因有哪些呢?
举个开车的例子,把发生车祸比作成overfitting,那么造成车祸的原因包括:

  • 车速太快(VC Dimension 太大)
  • 道路崎岖(noise)
  • 对路况的了解程度(训练样本数量\(N\)不够)

也就是说,VC Dimension、noise、\(N\)这三个因素是影响过拟合现象的关键。
1010007-20190501094008640-2086992223.png

二、The Role of Noise and Data Size

为了尽可能详细地解释overfitting,我们进行这样一个实验,试验中的数据集不是很大。首先,在二维平面上,一个模型的分布由目标函数\(f(x)\)\(x\)的10阶多项式)加上一些noise构成,下图中,离散的圆圈是数据集,目标函数是蓝色的曲线。数据没有完全落在曲线上,是因为加入了noise。
1010007-20190501094247094-1814717215.png
然后,同样在二维平面上,另一个模型的分布由目标函数\(f(x)\)\(x\)的50阶多项式)构成,没有加入noise。下图中,离散的圆圈是数据集,目标函数是蓝色的曲线。可以看出由于没有noise,数据集完全落在曲线上。
1010007-20190501100237396-1605638372.png
现在,有两个学习模型,一个是2阶多项式,另一个是10阶多项式,分别对上面两个问题进行建模。首先,对于第一个目标函数是10阶多项式包含noise的问题,这两个学习模型的效果如下图所示:
1010007-20190501100342683-377624419.png
由上图可知,2阶多项式的学习模型\(E_{in}=0.050\)\(E_{out}=0.127\);10阶多项式的学习模型\(E_{in}=0.034\)\(E_{out}=9.00\) 。虽然10阶模型的\(E_{in}\)比2阶的\(E_{in}\)小,但是其\(E_{out}\)要比2阶的大得多,而2阶的\(E_{in}\)\(E_{out}\)相差不大,很明显用10阶的模型发生了过拟合。
然后,对于第二个目标函数是50阶多项式没有noise的问题,这两个学习模型的效果如下图所示:
1010007-20190501100652446-1380718715.png
可以看到,用10阶的模型仍然发生了明显的过拟合。

上面两个问题中,10阶模型都发生了过拟合,反而2阶的模型却表现得相对不错。这好像违背了我们的第一感觉,比如对于目标函数是10阶多项式,加上noise的模型,按道理来说应该是10阶的模型更能接近于目标函数,因为它们阶数相同。但是,事实却是2阶模型泛化能力更强。这种现象产生的原因,从哲学上来说,就是“以退为进”。有时候,简单的学习模型反而能表现的更好。

下面从learning curve来分析一下具体的原因,learning curve描述的是\(E_{in}\)\(E_{out}\)随着数据量\(N\)的变化趋势。下图中左边是2阶学习模型的learning curve,右边是10阶学习模型的learning curve。
1010007-20190501100926042-1950235562.png
在learning curve中,横轴是样本数量\(N\),纵轴是Error。\(E_{in}\)\(E_{out}\)可表示为:\[E_{in}=noiselevel *(1-\frac{d+1}{N})\] \[E_{out}=noiselevel *(1+\frac{d+1}{N})\] 其中\(d\)为模型阶次,左图中\(d=2\),右图中\(d=10\)
本节的实验问题中,数据量\(N\)不大,即对应于上图中的灰色区域。左图的灰色区域中,因为\(d=2\)\(E_{in}\)\(E_{out}\)相对来说比较接近;右图中的灰色区域中,\(d=10\),根据\(E_{in}\)\(E_{out}\)的表达式, \(E_{in}\)很小,而\(E_{out}\)很大。这就解释了之前2阶多项式模型的\(E_{in}\)更接近\(E_{out}\),泛化能力更好。

值得一提的是,如果数据量\(N\)很大的时候,上面两图中\(E_{in}\)\(E_{out}\)都比较接近,但是对于高阶模型,z域中的特征很多的时候,需要的样本数量\(N\)很大,且容易发生维度灾难。

另一个例子中,目标函数是50阶多项式,且没有加入noise(noiselevel很小)。这种情况下,我们发现仍然是2阶的模型拟合的效果更好一些,明明没有noise,为什么是这样的结果呢?
实际上,我们忽略了一个问题:这种情况真的没有noise吗?其实,当模型很复杂的时候,即50阶多项式的目标函数,无论是2阶模型还是10阶模型,都不能学习的很好,这种复杂度本身就会引入一种‘noise’。所以,这种高阶无noise的问题,也可以类似于10阶多项式的目标函数加上noise的情况,只是二者的noise有些许不同,下面一部分将会详细解释。

三、Deterministic Noise

下面我们介绍一个更细节的实验来说明 什么时候要小心overfit会发生。假设我们产生的数据分布由两部分组成:第一部分是目标函数\(f(x)\)\(Q_f\)阶多项式;第二部分是噪声\(\epsilon\),服从Gaussian分布。接下来我们分析的是noise强度不同对overfitting有什么样的影响。总共的数据量是\(N\)
1010007-20190501102039834-45844612.png
那么下面我们分析不同的\((N,\sigma^2)\)\((N,Q_f)\)对overfit的影响。overfit可以量化为\(E_{out}-E_{in}\)。结果如下:
1010007-20190501102221900-227970053.png

上图中,红色越深,代表overfit程度越高,蓝色越深,代表overfit程度越低。先看左边的图,左图中阶数固定为20,横坐标代表样本数量\(N\),纵坐标代表噪声水平\(\sigma^2\)。红色区域集中在\(N\)很小或者\(\sigma^2\)很大的时候,也就是说\(N\)越大,\(\sigma^2\) 越小,越不容易发生overfit。右边图中,横坐标代表样本数量\(N\),纵坐标代表目标函数阶数\(Q_f\)。红色区域集中在\(N\)很小或者\(Q_f\)很大的时候,也就是说\(N\)越大,\(Q_f\) 越小,越不容易发生overfit。上面两图基本相似。

从上面的分析,我们发现\(\sigma^2\)对overfit是有很大的影响的,我们把这种noise称之为stochastic noise。同样地, \(Q_f\)即模型复杂度也对overfit有很大影响,而且二者影响是相似的,所以我们把这种称之为deterministic noise。之所以把它称为noise,是因为模型高复杂度带来的影响。

总结一下,有四个因素会导致发生overfitting:

  • data size \(N\) \(\downarrow\)
  • stochastic noise \(\sigma^2\) \(\uparrow\)
  • deterministic noise \(Q_f\) \(\uparrow\)
  • excessive power \(\uparrow\)

我们刚才解释了如果目标函数\(f(x)\)的复杂度很高的时候,那么跟有noise也没有什么两样。因为目标函数很复杂,那么再好的hypothesis都会跟它有一些差距,我们把这种差距称之为deterministic noise。deterministic noise与stochastic noise不同,但是效果一样。其实deterministic noise类似于一个伪随机数发生器,它不会产生真正的随机数,而只产生伪随机数。它的值与hypothesis有关,且固定点\(x\)的deterministic noise值是固定的。
1010007-20190501103007288-1282321574.png

四、Dealing with Overfitting

现在我们知道了什么是overfitting,和overfitting产生的原因,那么如何避免overfitting呢?避免overfitting的方法主要包括:

  • start from simple model (\(Q_f\))
  • data cleaning/pruning (noise)
  • data hinting (\(N\))
  • regularization
  • validation

这几种方法类比于之前举的开车的例子,对应如下:
1010007-20190501103241496-236767932.png
regularization和validation我们之后的课程再介绍,本节课主要介绍简单的data cleaning/pruning和data hinting两种方法。

data cleaning/pruning就是对训练数据集里label明显错误的样本进行修正(data cleaning),或者对错误的样本看成是noise,进行剔除(data pruning)。data cleaning/pruning关键在于如何准确寻找label错误的点或者是noise的点,而且如果这些点相比训练样本\(N\)很小的话,这种处理效果不太明显。
1010007-20190501103436526-954713487.png

data hinting是针对\(N\)不够大的情况,如果没有办法获得更多的训练集,那么data hinting就可以对已知的样本进行简单的处理、变换,从而获得更多的样本。举个例子,数字分类问题,可以对已知的数字图片进行轻微的平移或者旋转,从而让\(N\)丰富起来,达到扩大训练集的目的。这种额外获得的例子称之为virtual examples。但是要注意一点的就是,新获取的virtual examples可能不再是iid某个distribution。所以新构建的virtual examples要尽量合理,且是独立同分布。
1010007-20190501103450210-1589179672.png

五、总结

本节课主要介绍了overfitting的概念,即当\(E_{in}\)很小,\(E_{out}\) 很大的时候,会出现overfitting。详细介绍了overfitting发生的四个常见原因data size \(N\)、stochastic noise、deterministic noise和excessive power。解决overfitting的方法有很多,本节课主要介绍了data cleaning/pruning和data hinting两种简单的方法,之后的课程将会详细介绍regularization和validation两种更重要的方法。

转载于:https://www.cnblogs.com/SweetZxl/p/10799182.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle执行计划的rows不对,Oracle执行计划——all_rows和first_rows(n)优化器模式

Oracle执行计划——all_rows和first_rows(n)优化器模式0. 环境创建[sql]SQL> create usertest identified by test2 default tablespace users3 temporary tablespace temp4 quota unlimited on users;User created.SQL> grant createsession, resource, alter session t…

从 MVC 到前后端分离

转载自:https://my.oschina.net/huangyong/blog/521891 从MVC到前后端分离 1.理解 MVC MVC是一种经典的设计模式,全名为Model-View-Controller,即模型-视图-控制器。其中,模型是用于封装数据的载体,例如,在…

在.NET中使用SMTP发送邮件

这是一篇转载,可能对大家很有用啊,放首页看看是否有参考价值。本文提到的方案仍然不能算是完全解决所有问题,最佳的dotNET下通过SMTP(带验证)发送邮件的机制是什么,不知道大家有什么好的看法! …

LeetCode || Copy List with Random Pointer

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. 思路1:最傻瓜的方法是首先遍历一次建立next关系的新list。然后第二次遍历处理random关系…

京东布局消费物联网 聚合产业链共建生态

据Gartner发布的数据显示,到2020年,全球联网设备数量将达260亿台,物联网市场规模将达1.9万亿美元。如今,互联网已经从人与人的连接发展到人与物、物与物的连接,物联网时代带来。 5月9日,京东聚合三大运营商…

Shell编程 之 for 循环

1. 语法结构 2. 案例 2.1 批量解压缩 #!/bin/bashcd /root/test/ ls *.tar.gz > ls.log ls *.tgz >> ls.logfor i in $( cat ls.log )dotar -zxf $i &> /dev/nulldone rm -rf ls.log ~ …

8、linux上安装hbase

1.基本信息 版本1.2.4安装机器三台机器账号hadoop源路径/opt/software/hbase-1.2.4-bin.tar.gz目标路径/opt/hbase -> /opt/hbase-1.2.4依赖关系无2.安装过程 1).使用hadoop账号解压到/opt/hadoop目录下并设置软连接: [rootbgs-5p173-wangwenting opt]# su hadoo…

Mountain Number FZU-2109数位dp

Mountain NumberFZU-2109 题目大意:一个大于0的数字x,分写成xa[0]a[1]a[2][3]..a[n]的形式,(比如x1234,a[0]1,a[1]2,a[3]3,a[3]4),Mountain Number要满足对于a[2*i1]要大于等于a[2*i]和a[2*i2],给定范围l,r…

oracle虚拟机字符集,更改虚拟机上的oracle字符集

修改oracle上边的字符集,需要用到DBA数据库管理员的权限,再修改字符集时要注意到修改后的字符集只能范围变大(例如:当前的字符集是GBK,那你修改后可以是UTF-8就是说后者只能比前者大,不能小.因为字符集都是向下兼容的)步骤:第一步:使用DBA身份登录先以绕过日志的方式登录在以然…

mybaits自连接查询

看不太懂,先记录再查,有没有大大解释下 resultmap里的collection设置select字段,看着像递归,没见过这种用法,#{pid}从何而来? 转载于:https://www.cnblogs.com/haon/p/10808739.html

Ajax爬取豆瓣电影目录(Python)

下面的分析相当于一个框架,搞懂之后,对于类似的文字爬取,我们也可以实现。就算不能使用Ajax方法,我们也能够使用相同思想去爬取我们想要的数据。 豆瓣电影排行榜分析 网址:https://movie.douban.com/explore#!typemovi…

正面管教PHP沙龙,正面管教沙龙体会

接触到正面管教这个理念是我们南宁行动派伙伴圈 的圈主西西给大家带来的分享,谢谢西西[爱你]图片发自简书App同时也很感谢亲切温柔,知性优雅的Liliane老师,让我明白表扬和鼓励的区别,非暴力教育……教书育人这个道路上我需要学习的…

20175223 MySQL

目录 完成结果要求 1 :导入world.sql要求 2 :CityWanna.javaCityWanna.java要求 3 :CountryWanna.javaCountryWanna.java要求 4 :LifeWanna.javaLifeWanna.java过程中问题及解决1. XAMPP无法启用 MySQL 程序。目录 完成结果 要求 …

2020运动相机推荐_2020年超有价值入门级微单相机推荐,超高性价比几款入门级微单相机(选购指南)...

学习摄影专业已经3年多啦,自己喜欢拍摄照片,自己还帮助过一些想学习摄影的朋友快速入门,最近发现周围学习摄影的朋友也越来越多了,有一些朋友咨询关于入门微单相机的问题,想让推荐几款不错的入门的微单相机。这篇文章带…

ioslabel阴影,UILabel的内阴影

is it possible to create such a UILabel with inner and outer shadow?i only know shadowColor and shadowOffsetzoomed:thanks!解决方案The answer by dmaclach is only suitable for shapes that can easily be inverted. My solution is a custom view that works with …

Android Coding利器之掌握小技巧,助你Coding更上一层楼~

本文讲的是Android Coding利器之掌握小技巧,助你Coding更上一层楼~,话说前几天在网上浏览到一大牛写的关于Android布局优化的文章,看后感触很深,回过头看看自己写过的代码,发现还是有不少需要改进,今天找不…

linux系统报警怎么办,常见Linux系统故障和解决方法

常见Linux系统故障和解决方法发布时间:2020-06-06 14:48:19来源:亿速云阅读:212作者:Leah栏目:云计算这篇文章给大家分享的是常见的Linux系统故障和解决方法。在使用系统的过程中总会有各种各样的故障,所以…

Vuex 模块化与项目实例 (2.0)

Vuex 强调使用单一状态树,即在一个项目里只有一个 store,这个 store 集中管理了项目中所有的数据以及对数据的操作行为。但是这样带来的问题是 store 可能会非常臃肿庞大不易维护,所以就需要对状态树进行模块化的拆分。 首先贴出一个逻辑比较…

一脸懵逼学习基于CentOs的Hadoop集群安装与配置(三台机器跑集群)

1:Hadoop分布式计算平台是由Apache软件基金会开发的一个开源分布式计算平台。以Hadoop分布式文件系统(HDFS)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。 注…

linux内核epub,Android底层开发技术实战详解——内核、移植和驱动(第2版)[EPUB][MOBI][AZW3][42.33MB]...

内容简介本书从底层原理开始讲起,结合真实的案例向读者详细介绍了Android内核、移植和驱动开发的整个流程。全书分为21章,依次讲解驱动移植的必要性, Goldfish、OMAP内核和驱动解析,显示系统、输入系统、振动器系统、音频系统、视…