欠拟合和过拟合出现原因及解决方案

机器学习的基本问题是利用模型对数据进行拟合,学习的目的并非是对有限训练集进行正确预测,而是对未曾在训练集合出现的样本能够正确预测。模型对训练集数据的误差称为经验误差,对测试集数据的误差称为泛化误差。模型对训练集以外样本的预测能力就称为模型的泛化能力,追求这种泛化能力始终是机器学习的目标

过拟合(overfitting)欠拟合(underfitting)是导致模型泛化能力不高的两种常见原因,都是模型学习能力与数据复杂度之间失配的结果。“欠拟合”常常在模型学习能力较弱,而数据复杂度较高的情况出现,此时模型由于学习能力不足,无法学习到数据集中的“一般规律”,因而导致泛化能力弱。与之相反,“过拟合”常常在模型学习能力过强的情况中出现,此时的模型学习能力太强,以至于将训练集单个样本自身的特点都能捕捉到,并将其认为是“一般规律”,同样这种情况也会导致模型泛化能力下降。过拟合与欠拟合的区别在于,欠拟合在训练集和测试集上的性能都较差,而过拟合往往能较好地学习训练集数据的性质,而在测试集上的性能较差。在神经网络训练的过程中,欠拟合主要表现为输出结果的高偏差,而过拟合主要表现为输出结果的高方差

图示

欠拟合

欠拟合出现原因

  1. 模型复杂度过低
  2. 特征量过少

欠拟合的情况比较容易克服,常见解决方法有

  1. 增加新特征,可以考虑加入进特征组合、高次特征,来增大假设空间
  2. 添加多项式特征,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强
  3. 减少正则化参数,正则化的目的是用来防止过拟合的,但是模型出现了欠拟合,则需要减少正则化参数
  4. 使用非线性模型,比如核SVM 、决策树、深度学习等模型
  5. 调整模型的容量(capacity),通俗地,模型的容量是指其拟合各种函数的能力
  6. 容量低的模型可能很难拟合训练集;使用集成学习方法,如Bagging ,将多个弱学习器Bagging

过拟合

过拟合出现原因

  1. 建模样本选取有误,如样本数量太少,选样方法错误,样本标签错误等,导致选取的样本数据不足以代表预定的分类规则
  2. 样本噪音干扰过大,使得机器将部分噪音认为是特征从而扰乱了预设的分类规则
  3. 假设的模型无法合理存在,或者说是假设成立的条件实际并不成立
  4. 参数太多,模型复杂度过高
  5. 对于决策树模型,如果我们对于其生长没有合理的限制,其自由生长有可能使节点只包含单纯的事件数据(event)或非事件数据(no event),使其虽然可以完美匹配(拟合)训练数据,但是无法适应其他数据集
  6. 对于神经网络模型:a)对样本数据可能存在分类决策面不唯一,随着学习的进行,,BP算法使权值可能收敛过于复杂的决策面;b)权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征

过拟合的解决方案

  1. 正则化(Regularization)(L1和L2)
  2. 数据扩增,即增加训练数据样本
  3. Dropout
  4. Early stopping

正则化

在模型训练的过程中,需要降低 loss 以达到提高 accuracy 的目的。此时,使用正则化之类的方法直接将权值的大小加入到 loss 里,在训练的时候限制权值变大。训练过程需要降低整体的 loss,这时候,一方面能降低实际输出与样本之间的误差,也能降低权值大小

数据扩增

这是解决过拟合最有效的方法,只要给足够多的数据,让模型「看见」尽可能多的「例外情况」,它就会不断修正自己,从而得到更好的结果

如何获取更多数据,可以有以下几个方法

  1. 从数据源头获取更多数据
  2. 根据当前数据集估计数据分布参数,使用该分布产生更多数据:这个一般不用,因为估计分布参数的过程也会代入抽样误差
  3. 数据增强(Data Augmentation):通过一定规则扩充数据。如在物体分类问题里,物体在图像中的位置、姿态、尺度,整体图片明暗度等都不会影响分类结果。我们就可以通过图像平移、翻转、缩放、切割等手段将数据库成倍扩充

Dropout

在训练时,每次随机(如50%概率)忽略隐层的某些节点;这样,我们相当于随机从 \(2^n\)(n个神经元的网络) 个模型中采样选择模型

Early stopping

Early stopping便是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合

具体做法是,在每一个Epoch结束时计算validation data的accuracy,当accuracy不再提高时,就停止训练。当然我们并不会在accuracy一降低的时候就停止训练,因为可能经过这个Epoch后,accuracy降低了,但是随后的Epoch又让accuracy又上去了,所以不能根据一两次的连续降低就判断不再提高。一般的做法是,在训练的过程中,记录到目前为止最好的validation accuracy,当连续10次Epoch(或者更多次)没达到最佳accuracy时,则可以认为accuracy不再提高了。此时便可以停止迭代了(Early Stopping)。这种策略也称为“No-improvement-in-n”,n即Epoch的次数,可以根据实际情况取,如10、20、30……

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小小挖掘机

这两年:我的数据竞赛之路

大家好,我是鱼遇雨欲语与余,本次我将带来不一样的分享,这将是我的个人竞赛历程。将从三个部分展开分享,主要竞赛经历、关于我的竞赛和未来竞赛的我。一位竞赛小白是如何...

16720
来自专栏AI科技评论

放大的艺术 | 基于深度学习的单图超分辨

本文为 AI 研习社社区用户 @月本诚 独家投稿内容,欢迎扫描底部社区名片访问 @月本诚 的主页,查看更多动态。

47330
来自专栏Jerry的SAP技术分享

使用SAP Cloud Platform Leonardo机器学习的测试控制台

选中一个需要进行测试的Leonardo机器学习服务,点击Configure Environments:

5000
来自专栏SAMshare

推荐收藏 | 一个画出高大上的机器学习图的神器scikit-plot

https://github.com/reiinakano/scikit-plot

14930
来自专栏零维领域

《机器学习》-- 第三章 线性回归

线性模型形式简单、易于建模,但却蕴涵着机器学习中一些重要的基本思想,许多功能更为强大的非线性模型(nonlinear model)可在线性模型的基础上通过引入层...

9610
来自专栏木东居士的专栏

AI研发工程师成长指南

关于作者:Japson。某人工智能公司AI平台研发工程师,专注于AI工程化及场景落地。持续学习中,期望与大家多多交流技术以及职业规划。

14230
来自专栏Jerry的SAP技术分享

使用SAP Cloud Platform Leonardo机器学习的测试控制台

选中一个需要进行测试的Leonardo机器学习服务,点击Configure Environments:

5300
来自专栏Golang开发

Spark MLlib

机器学习是用数据或以往的经验,并以此来优化程序的性能指标。 机器学习本质思想:使用现有的数据,训练出一个模型,然后在用这个模型去拟合其他的数据,给未知的数据做...

9760
来自专栏机器学习与统计学

深度学习初探:使用Keras创建一个聊天机器人

【导读】本篇文章将介绍如何使用Keras(一个非常受欢迎的神经网络库来构建一个Chatbot)。首先我们会介绍该库的主要概念,然后将逐步教大家如何使用它创建“是...

15320
来自专栏Python数据科学

决策树,逻辑回归,PCA-算法面经

决策树是一种自上而下,对样本数据进行树形分类的过程,由节点和有向边组成。节点分为内部节点和叶节点,其中每个内部节点表示一个特征或属性,叶节点表示类...

10510

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励