初学机器学习和深度学习的时候,我们常常会遇到 "过拟合" 和 ''欠拟合" 这两个看似不明所以的数学概念,今天我就专门讲一讲它们具体是怎么一回事。

拟合(fitting)

要理解过拟合和欠拟合,我们首先要明白什么是 "拟合"。通俗来讲,当我们想要了解平面中样本点所具有的统一规律时,或者说通过一条怎样的光滑曲线可以更贴切地描述黄色样本点时,拟合就是我们要使用的手段或方法。如上面中间图所示,我们如何将一条蓝色的线尽可能多的穿过黄色的样本点,以便尽可能的表示黄色点的共性(一般地要求时让所有的样本点 尽量等可能且均匀的 分布在曲线的两边),这就是拟合的过程。

需要特别注意的一点是,拟合虽然是取样本点进行的,但拟合的最终目的,其实是找到能描述所有数据点(不单单样本点本身)的曲线或公式。这是区分拟合好坏的关键(也是后面谈到的过拟合的问题所在所在!!!)

可见,中间图中的蓝色曲线就非常恰当的描述了黄色样本点的走势,我们就说它 "拟合的恰到好处" (Just right! )。可以假设蓝色曲线公式的二次的 :y= ax^2+b

而左图和右图中的蓝色曲线虽然也做了类似的尝试,但我们总觉得有点 "不太合宜":

左图的蓝色直线显得太过草率,感觉就像随便画了一笔,它只描绘出了直线周边的点,但却忽略了 "两端散落的点" 。这种只拟合了部分点的拟合方式,我们称之为 "欠拟合 (Under-fitting)"。假设蓝色曲线的公式为一次的:y=ax+b。

反之,右图中弯弯曲曲的蓝色曲线几乎穿过了所有的黄色样本点,相比于前两种,看起来它应该是"最完美" (同时也最复杂)的描绘到了所有的样本点,然而问题恰恰就在于这个完美上。一方面,我们这里用到的是样本点,既然是样本点,就表明它只能是代表所有的数据点,但不能涵盖数据的全部可能。可以想象的是,当再有新来的样本点加入到图中时,就很有可能不会落在这条"完美曲线"上了,也就是对所有数据点的通用性不强。另一方面,因着曲线的复杂性,它的表达公式也就相应的复杂,公式越复杂,构建模型和调优时的计算量就会越大。无论对计算机性能还是效率成本,都是很大的负担。这种拟合方式,我们称为,过度拟合,也就是 "过拟合(Over-fitting)"而因为过拟合,不能将样本点的特性去反映整个数据点的特性的现象,我们称为 "泛化能力差"。假设曲线公式为五次方(曲线拐点越多次方越高):y = ax^5+bx^4+cx^3+dx^2+ex+f。

过拟合和欠拟合的产生原因

过拟合和欠拟合的产生都是有原因的,这也跟选择的模型有关,有些模型容易过拟合,有些因为特殊的属性则不容易产生过拟合现象。但总有一些情况,是适用于所有模型的,无论是机器学习还是深度学习。

对于过拟合现象,主要有以下几个常见的原因:

  • 训练集(TriainingSet) 中的样本量太少,代表性差。比如,全部数据集是一堆挤成圆形的点,但是提供的训练集却是一条直线上的点,那么无论怎么对训练集进行拟合,都不会得到圆形的曲线或拟合结果。针对这种情况,只能增加训练集的样本量,提高样本的代表性(让样本的分布尽量跟原数据的分布一致)。
  • 训练模型太复杂,原数据集量级太低。(反之就是欠拟合比如,我们的数据量是固定的1000个,用一个简单的机器学习模型可以很好的拟合,但如果非要用数据量级上百万的深度学习模型来拟合,肯定会过拟合。这里体现出了根据数据选择合适模型的重要性。类比上图,就是右图曲线转中图,从5次曲线换到2次曲线 (对线性模型来说,模型复杂度降低,可以简单的看为公式的次数降低)。

对于欠拟合现象,一般会体现在训练刚开始,参数还没有调好的情况下,常见的原因也有几个:

  • 训练模型太简单,原数据集量级太高。比如,上千万级的训练数据集,用简单的机器学习模型训练。类似上图,拿一次线性曲线函数拟合需要二次曲线的数据。
  • 特征量太少。比如,只用 "身高" 去描述一个人外表的时候,显然太片面,这时候我们需要适当增加 "性别", "体重","三围",以及相关面貌特征。

防止过拟合和欠拟合的方法

减少过拟合:

  • 1. 增加训练集样本量,提高样本的代表性。
  • 2. 如果相比于数据量来说,模型过于复杂,就换用更简单的模型来训练。
  • 3. 深度学习,可以加入dropout方法,即每批次训练减少部分神经元的参与。
  • 4. 引入正则化项(Regularization),包括R1和R2,相当于降低部分样本点的权重,反映在图上就是让曲线少穿过一些样本点。

减少欠拟合:

  • 1. 数据量足够大的情况下,换用更复杂的模型来训练。
  • 2. 相应的增加特征值(考验的主要是对业务的理解)。
  • 3. 如果已经使用正则化,就相应的减少正则化参数,降低它的影响。

以上内容可能会有不正确或不恰当的地方,欢迎各位同学朋友前来指正,谢谢!

过拟合(Over-fitting) 和 欠拟合(Under-fitting)相关推荐

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

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

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

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

  3. 过拟合解决方法python_欠拟合、过拟合及其解决方法

    在我们机器学习或者训练深度神经网络的时候经常会出现欠拟合和过拟合这两个问题,但是,一开始我们的模型往往是欠拟合的,也正是因为如此才有了优化的空间,我们需要不断的调整算法来使得模型的表达能拿更强.但是优 ...

  4. 如何理解过拟合=高方差、欠拟合=高偏差

    欠拟合=高偏差还好理解一些,一直不太明白过拟合和高方差有什么关系,那么我们首先就要理解各种 '差' 的定义 定义: 我们评价一个模型好不好,是通过测试集的数据来评价的,而不是训练集或者交叉验证集,如果 ...

  5. pytorch_lesson13.2 模型拟合度概念介绍+模型欠拟合实例+单隐藏层激活函数性能比较+相同激活函数不同隐藏层数结果对比+神经网络结构选择策略

    提示:仅仅是学习记录笔记,搬运了学习课程的ppt内容,本意不是抄袭!望大家不要误解!纯属学习记录笔记!!!!!! 文章目录 前言 一.模型拟合度概念介绍与实验 1.测试集的"不可知" ...

  6. 过拟合、欠拟合的原因和解决办法

    目录 偏差和方差 过拟合 原因 解决办法 欠拟合 原因 解决办法 偏差和方差 偏差用来描述模型输出结果的期望和样本真实结果的差距. 方差用来描述模型对于给定值的输出稳定性. 具体的可以看下图: 过拟合 ...

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

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

  8. 过拟合(overfitting)和欠拟合(underfitting)出现原因及如何避免方案

    文章目录 欠拟合 一.什么是欠拟合? 二.欠拟合出现原因 三.解决欠拟合(高偏差)的方法 过拟合 一.什么是过拟合? 二.过拟合出现原因 三.解决过拟合(高方差)的方法 欠拟合 一.什么是欠拟合? 欠 ...

  9. 偏差与方差,欠拟合与过拟合

    机器学习的核心在于使用学习算法建立模型,对已建立模型的质量的评价方法和指标不少,本文以准确率(也称为精度)或判定系数(Coefficient of Determination)作为性能指标对模型的偏差 ...

  10. 使用学习曲线(Learning curve),判断机器学习模型过拟合、欠拟合,与解决过拟合、欠拟合的问题

    文章目录 1.基本概念 过拟合与欠拟合 根据学习曲线判断过拟合.欠拟合 2.示例代码:绘制学习曲线 3.解决过拟合.欠拟合 解决过拟合 解决欠拟合 4. 过拟合.欠拟合的深层理解 1.基本概念 过拟合 ...

最新文章

  1. 几个简化算法理解的网站,进来收藏!
  2. pytorch环境下“No module named SimpleITK”的解决办法
  3. Inspector a ProgressBar(定制属性面板)
  4. VTK:图片之ImageEllipsoidSource
  5. VS 2013 Preview 自定义 SharePoint 2013 列表 之 两个Bug
  6. windows和linux加密u盘,linux挂载windows的各种格式U盘
  7. centos下载mysql_python数据分析之路——centos下载并配置mysql与navicat的使用
  8. php 上传word文件 源码,THINKPHP中word文档的上传与下载
  9. ZeroMQ(java)之负载均衡
  10. leetcode:Minimum Path Sum(路线上元素和的最小值)【面试算法题】
  11. 【集群仿真】基于matlab固定翼无人机集群仿真演示平台【含Matlab源码 1497期】
  12. 数据结构、栈和队列、树和二叉树
  13. 公司年终总结新年计划PPT模板
  14. webWorker 异步加载
  15. DBA职业规划技术成长路线
  16. python - 03【列表/元组/字符串】
  17. 不搞仿真,能不能搞好智能?
  18. android String文件中修改部分字体颜色
  19. 【Java基础】包、类、接口、常量、方法、变量的命名规则
  20. 2022年互联网企业性能测试面试题(出现的频率相当高)

热门文章

  1. Oracle中金额替换方式,oracle使用regexp_replace实现金额格式统一
  2. 设计师必备的png免抠素材网,真的纯免费。
  3. zabbix 图形是点状的_Zabbix与RRDtool绘图篇(0)_图形展示二次开发构思
  4. 关于模型融合Stacking的一些改进思路
  5. jeecg-boot中popup实现动态传参
  6. 30、 移动端常用开发框架
  7. 欲穷千里目 更上一层楼!
  8. oracle查询表空间和用户名,教你查询Oracle中的表空间
  9. matlab 微积分计算 自用1
  10. 使用jQuery制作轮播图