在我们机器学习或者训练深度神经网络的时候经常会出现欠拟合和过拟合这两个问题,但是,一开始我们的模型往往是欠拟合的,也正是因为如此才有了优化的空间,我们需要不断的调整算法来使得模型的表达能拿更强。但是优化到了一定程度就需要解决过拟合的问题了,这个问题也在学术界讨论的比较多。(之前搜了很多有的博客,讲的都不太全,因此我重新整理总结了一遍,同时加入了自己的理解,方便自己和后来人查阅)

首先就是我们在进行模型训练的时候会出现模型不能够很好地拟合数据的情况,这个时候就需要我们来判断究竟现在的模型是欠拟合还是过拟合,那么怎么来判断这两者的情况呢?有两种方法:

首先看一下三种误差的计算方法:

training error

cross validation error

test error

1)学习曲线(learning curves)

学习曲线就是比较 j_train 和 j_cv。如下图所示,为一般的学习曲线,蓝色的线表示训练集上的误差 j_train, 粉色的线表示验证集上的误差 j_cv,横轴表示训练集合的大小。

刚开始处于 “A” 点,表示当训练数据很小时,很容易时训练集上的误差非常小,此时处于过拟合状态。随着训练数据的增加,训练数据上的误差 J_train 越来越大,而验证集上的误差 J_cv 越来越小,J_train 和 J_cv 越来越接近但始终保持 J_cv > J_train.

2)交叉验证(cross-validation)

这里首先解释一下bias和variance的概念。模型的Error = Bias + Variance,Error反映的是整个模型的准确度,Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度,Variance反映的是模型每一次输出结果与模型输出期望之间的误差,即模型的稳定性。

我们可以根据j_cv 与 j_train两个来判断是处于欠拟合还是过拟合。

当观察到 J_cv 很大时,可能处在途中蓝色圆圈中的两个位置,虽然观察到的现象很相似(J_cv都很大),但这两个位置的状态是非常不同的,处理方法也完全不同。

当cross validation error (Jcv) 跟training error(Jtrain)差不多,且Jtrain较大时,即图中标出的bias,此时 high bias low variance,当前模型更可能存在欠拟合。

当Jcv >> Jtrain且Jtrain较小时,即图中标出的variance时,此时 low bias high variance,当前模型更可能存在过拟合。

1. 欠拟合

首先欠拟合就是模型没有很好地捕捉到数据特征,不能够很好地拟合数据,例如下面的例子:

左图表示size与prize关系的数据,中间的图就是出现欠拟合的模型,不能够很好地拟合数据,如果在中间的图的模型后面再加一个二次项,就可以很好地拟合图中的数据了,如右面的图所示。

解决方法:

1)添加其他特征项,有时候我们模型出现欠拟合的时候是因为特征项不够导致的,可以添加其他特征项来很好地解决。例如,“组合”、“泛化”、“相关性”三类特征是特征添加的重要手段,无论在什么场景,都可以照葫芦画瓢,总会得到意想不到的效果。除上面的特征之外,“上下文特征”、“平台特征”等等,都可以作为特征添加的首选项。

2)添加多项式特征,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。例如上面的图片的例子。

3)减少正则化参数,正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。

2. 过拟合

通俗一点地来说过拟合就是模型把数据学习的太彻底,以至于把噪声数据的特征也学习到了,这样就会导致在后期测试的时候不能够很好地识别数据,即不能正确的分类,模型泛化能力太差。例如下面的例子。

上面左图表示size和prize的关系,我们学习到的模型曲线如右图所示,虽然在训练的时候模型可以很好地匹配数据,但是很显然过度扭曲了曲线,不是真实的size与prize曲线。

解决方法:

1)重新清洗数据,导致过拟合的一个原因也有可能是数据不纯导致的,如果出现了过拟合就需要我们重新清洗数据。

2)增大数据的训练量,还有一个原因就是我们用于训练的数据量太小导致的,训练数据占总数据的比例过小。

3)采用正则化方法。正则化方法包括L0正则、L1正则和L2正则,而正则一般是在目标函数之后加上对于的范数。但是在机器学习中一般使用L2正则,下面看具体的原因。

L0范数是指向量中非0的元素的个数。L1范数是指向量中各个元素绝对值之和,也叫“稀疏规则算子”(Lasso regularization)。两者都可以实现稀疏性,既然L0可以实现稀疏,为什么不用L0,而要用L1呢?个人理解一是因为L0范数很难优化求解(NP难问题),二是L1范数是L0范数的最优凸近似,而且它比L0范数要容易优化求解。所以大家才把目光和万千宠爱转于L1范数。

L2范数是指向量各元素的平方和然后求平方根。可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0。L2正则项起到使得参数w变小加剧的效果,但是为什么可以防止过拟合呢?一个通俗的理解便是:更小的参数值w意味着模型的复杂度更低,对训练数据的拟合刚刚好(奥卡姆剃刀),不会过分拟合训练数据,从而使得不会过拟合,以提高模型的泛化能力。还有就是看到有人说L2范数有助于处理 condition number不好的情况下矩阵求逆很困难的问题(具体这儿我也不是太理解)。

4)采用dropout方法。这个方法在神经网络里面很常用。dropout方法是ImageNet中提出的一种方法,通俗一点讲就是dropout方法在训练的时候让神经元以一定的概率不工作。具体看下图:

如上图所示,左边a图是没用用dropout方法的标准神经网络,右边b图是在训练过程中使用了dropout方法的神经网络,即在训练时候以一定的概率p来跳过一定的神经元。

以上就是关于过拟合、欠拟合的解释以及判断和其对应的解决方法。

------EOF------

参考文献:

http://www.veryread.net/n-101-133184.html

http://blog.csdn.net/zouxy09/article/details/24971995

http://blog.csdn.net/wtq1993/article/details/51746847

http://blog.csdn.net/heyongluoyao8/article/details/49429629

http://blog.csdn.net/linkin1005/article/details/42869331

http://ljwsummer.github.io/posts/advice-for-applying-machine-learning.html

转自:http://blog.csdn.net/willduan1/article/details/53070777

过拟合解决方法python_欠拟合、过拟合及其解决方法相关推荐

  1. 过拟合解决方法python_机器学习之过拟合的风险

    假设这些图中的每个点代表一棵树在森林中的位置.图中的两种颜色分别代表以下含义: 1.蓝点代表生病的树 2.橙点代表健康的树 接下来, 我们看看图 1 图1.生病 ( 蓝色 ) 和健康 ( 橙色 ) 的 ...

  2. 过拟合解决方法python_《python深度学习》笔记---4.4、过拟合与欠拟合(解决过拟合常见方法)...

    <python深度学习>笔记---4.4.过拟合与欠拟合(解决过拟合常见方法) 一.总结 一句话总结: 减小网络大小 添加权重正则化 添加 dropout 正则化 1.机器学习的根本问题? ...

  3. 谁来救救过拟合?透过现象看本质,如何利用正则化方法解决过拟合问题

    前言 声明:后期原力计划活动期间的博文都会转入到对应的收费专栏. 博主后续会不断更新该领域的知识: 人工智能AI实战系列代码全解析 手把手教你ML机器学习算法源码全解析 有需要的小伙伴赶紧订阅吧. 在 ...

  4. DL之DNN优化技术:DNN中抑制过拟合/欠拟合、提高泛化能力技术的简介、使用方法、案例应用详细攻略

    DL之DNN优化技术:DNN中抑制过拟合.提高泛化能力技术的简介.使用方法.案例应用详细攻略 目录 抑制过拟合.提高泛化能力技术的简介 1.过拟合现象的表述

  5. 一文区分什么是「过拟合」和「欠拟合」?

    一文区分什么是「过拟合」和「欠拟合」? https://mp.weixin.qq.com/s/_V1Yno4FzhGdGqr6JPscpw 编译:Richard Yang 来源:Towards Dat ...

  6. 什么是欠拟合现象_深度学习中过拟合、欠拟合问题及解决方案

    在进行数据挖掘或者机器学习模型建立的时候,因为在统计学习中,假设数据满足独立同分布(i.i.d,independently and identically distributed),即当前已产生的数据 ...

  7. 什么是欠拟合现象_什么是过拟合?什么是欠拟合?

    原标题:什么是过拟合?什么是欠拟合? 过拟合:1)简单理解就是训练样本的得到的输出和期望输出基本一致,但是样本输出和测试样本的期望输出相差却很大 .2)为了得到一致假设而使假设变得过度复杂称为过拟合. ...

  8. 机器学习中模型泛化能力和过拟合现象(overfitting)的矛盾、以及其主要缓解方法正则化技术原理初探...

    1. 偏差与方差 - 机器学习算法泛化性能分析 在一个项目中,我们通过设计和训练得到了一个model,该model的泛化可能很好,也可能不尽如人意,其背后的决定因素是什么呢?或者说我们可以从哪些方面去 ...

  9. Gps高程拟合matlab代码,几种GPS高程拟合方法分析与比较.doc

    几种GPS高程拟合方法分析与比较 几种GPS高程拟合方法分析与比较 摘 要:文章论述了几种常用的GPS高程拟合的方法,并在MATLAB中编制了相应的程序,建立了相应的GPS高程拟合模型,并通过实例数据 ...

最新文章

  1. 子数组最大值设计02
  2. jQuery(一)初识
  3. CSMA/CD协议分析笔记
  4. C++ 读取单个字符
  5. keras构建卷积神经网络_通过此简单教程学习在网络上构建卷积神经网络
  6. html 样式优先级,CSS样式优先级
  7. 强大的CHM电子书或CHM帮助文件的快速制作工具Easy CHM
  8. 上三角矩阵法Matlab,在MATLAB中重塑/变换上三角矩阵
  9. HG8120C 端口映射 配置家用服务器
  10. 浅析信息安全风险评估(CCRC)的重要性
  11. html简历如何转换成pdf,将拉勾的HTML简历转成PDF
  12. HTML---网页编程(2)
  13. java计算机毕业设计楼宇管理系统源码+数据库+lw文档+系统
  14. 画意三峡---先睹为快
  15. “北上广曹”商标被抢注,商标过期后企业可以抢注吗?
  16. 浅析语音识别技术的工作原理及发展
  17. ARM嵌入式主板之路
  18. 基于springboot的课堂考勤签到打卡小程序
  19. 编写程序计算长方体的体积python_【自学编程】C语言编程简单的小程序,计算长方体体积!...
  20. Win10 防止电脑变卡的优化方法

热门文章

  1. git-注册与激活-创建一个测试用途的仓库-github
  2. Mysql count 的多种使用方式性能比较
  3. 前端2018年12月9日 前端开发路上的小白心得--励志当个领路人
  4. 数据库历险记(三) | 缓存框架的连环炮
  5. 京东家电渠道赋能战略加速落地,助力家电品牌打通人、货、场间隔
  6. SQL Case When Then
  7. DELPHI GetClassName - 获取指定窗口的类名
  8. [JavaScript]使用document.createDocumentFragment优化性能
  9. Spring Boot Initilizr - 使用IDE或IDE插件
  10. Spring教程 - Spring核心框架教程