文章目录

  • 1 过拟合原因
  • 2 判断是否过拟合
  • 3 欠拟合--解决方法
  • 4 过拟合--解决方法
  • 5 神经网络过拟合解决方案

在机器学习或者深度神经网络中经常会出现:欠拟合和过拟合。这些问题的出现原因以及解决之道如下文。

1 过拟合原因

(1)建模样本抽取错误,包括(但不限于)样本数量太少,抽样方法错误, 抽样时没有足够正确考虑业务场景或业务特点,不能有效足够代表业务逻辑或业务场景。

(2)样本里的噪音数据干扰过大,模型学习了噪音特征,反而忽略了真实的输入输出间的关系。

(3)建模时的“逻辑假设”到了模型应用时已经不能成立了。 任何预测模型都是在假设的基础上才可以搭建和应用的。常用的假设包括:

  • 假设历史数据可以推测未来,
  • 假设业务环节没有发生显著变化,
  • 假设建模数据与后来的应用数据是相似的,等等。
  • 如果上述假设违反了业务场景的话,根据这些假设搭建的模型当然是无法有效应用的。

(4)参数太多、模型复杂度高。

(5)决策树模型。

  • 如果我们对于决策树的生长没有合理的限制和修剪的话, 决策树的自由生长有可能每片叶子里只包含单纯的事件数据(event)或非事件数据(no event), 可以想象,这种决策树当然可以完美匹配(拟合)训练数据, 但是一旦应用到新的业务真实数据时,效果是一塌糊涂。

(6)神经网络模型。

  • 由于对样本数据,可能存在隐单元的表示不唯一,即产生的分类的决策面不唯一,随着学习的进行, BP算法使权值可能收敛过于复杂的决策面,并至极致。
  • 权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征.
2 判断是否过拟合
  • 首先看一下三种误差的计算方法:
    training error (训练误差)
    J t r a i n ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J_{train}(\theta) = \frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2 Jtrain​(θ)=2m1​i=1∑m​(hθ​(x(i))−y(i))2
    cross validation error (交叉验证误差)
    J c v ( θ ) = 1 2 m c v ∑ i = 1 m c v ( h θ ( x c v ( i ) ) − y c v ( i ) ) 2 J_{cv}(\theta) = \frac{1}{2m_{cv}}\sum_{i=1}^{m_{cv}}(h_\theta(x_{cv}^{(i)})-y_{cv}^{(i)})^2 Jcv​(θ)=2mcv​1​i=1∑mcv​​(hθ​(xcv(i)​)−ycv(i)​)2
    test error (测试误差)
    J t e s t ( θ ) = 1 2 m t e s t ∑ i = 1 m t e s t ( h θ ( x t e s t ( i ) ) − y t e s t ( i ) ) 2 J_{test}(\theta) = \frac{1}{2m_{test}}\sum_{i=1}^{m_{test}}(h_\theta(x_{test}^{(i)})-y_{test}^{(i)})^2 Jtest​(θ)=2mtest​1​i=1∑mtest​​(hθ​(xtest(i)​)−ytest(i)​)2
  • 判断究模型否过拟合方法:
1)学习曲线(learning curves)

学习曲线就是比较 j t r a i n j_{train} jtrain​ 和 j c v j_{cv} jcv​。

如下图所示,为一般的学习曲线,蓝线:训练误差 j t r a i n j_{train} jtrain​ , 粉色的线:验证集上的误差 j c v j_{cv} jcv​,横轴表示训练集合的大小。

2)交叉验证(cross-validation)

模型的Error = Bias + Variance
Error反映的是整个模型的准确度
Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度
Variance反映的是模型每一次输出结果与模型输出期望之间的误差,即模型的稳定性。

3 欠拟合–解决方法

首先欠拟合就是模型没有很好地捕捉到数据特征,不能够很好地拟合数据。

解决方法:

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

  2. 添加多项式特征,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。

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

4 过拟合–解决方法

通俗一点地来说过拟合就是模型把数据学习的太彻底(强行拟合),以至于把噪声数据的特征也学习到了, 这样不能够很好的分离(识别)测试数据,模型泛化能力太差。例如下面的例子:

解决方法:

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

  2. 增大数据的训练量,之前用于训练的数据量太小导致的,训练数据占总数据的比例过小。

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

    1. L0 范数是指向量中非0的元素的个数。

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

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

5 神经网络过拟合解决方案
  1. 权值衰减.它在每次迭代过程中以某个小因子降低每个权值,这等效于修改E的定义,
    加入一个与网络权值的总量相应的惩罚项,此方法的动机是保持权值较小,避免weight decay, 从而使学习过程向着复杂决策面的反方向偏。

  2. 适当的stopping criterion (如图)
    在二次误差函数的情况下,关于早停止和权值衰减类似结果的原因说明。
    椭圆给出了常数误差函数的轮廓线,Wml表示误差函数的最小值。
    如果权向量的起始点为原点,按照局部负梯度的方向移动,那么它会沿着曲线给出的路径移动。
    通过对训练过程早停止,我们找到了一个权值向量w。
    定性地说,它类似于使用检点的权值衰减正则化项,然后最小化正则化误差函数的方法得到的权值。

  3. 验证数据
    一个最成功的方法是在训练数据外再为算法提供一套验证数据,
    应该使用在验证集合上产生最小误差的迭代次数,不是总能明显地确定验证集合何时达到最小误差.
    (通常30%的训练模式;每个时期检查验证集错误;如果验证错误上升,停止训练)

  4. 交叉验证
    交叉验证方法在可获得额外的数据提供验证集合时工作得很好,但是小训练集合的过度拟合问题更为严重.

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

参考资料:
https://blog.csdn.net/willduan1/article/details/53070777
https://blog.csdn.net/tansuo17/article/details/79129504

欠拟合、过拟合——解决方法相关推荐

  1. 欠拟合和过拟合的一般解决方法

    欠拟合和过拟合的一般解决方法 参考文章: (1)欠拟合和过拟合的一般解决方法 (2)https://www.cnblogs.com/excellent-ship/p/9090949.html 备忘一下 ...

  2. 百面机器学习 #2 模型评估:07 过拟合和欠拟合及其常用解决方法

    如何有效地识别"过拟合"和"欠拟合"现象,并有针对性地进行模型调整,是不断改进机器学习模型的关键. 过拟合 模型对于训练数据拟合呈过当的情况 反映到评估指标上, ...

  3. 深度学习中过拟合、欠拟合现象以及解决方法

    一.过拟合 1.过拟合现象 过拟合(overfitting)是指在模型参数拟合过程中的问题,由于训练数据包含抽样误差,训练时,复杂的模型将抽样误差也考虑在内,将抽样误差也进行了很好的拟合.具体表现就是 ...

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

    欠拟合.过拟合及其解决方法 参考文章: (1)欠拟合.过拟合及其解决方法 (2)https://www.cnblogs.com/alan666/p/8311809.html 备忘一下.

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

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

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

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

  7. 过拟合与欠拟合及解决方法

    (1)什么是过拟合与欠拟合 过拟合是指模型对于训练数据拟合呈过当的情况,反映到评估指标上,就是模型在训练集上的表现很好,但在测试集和新数据上的表现较差.欠拟合指的是模型在训练和预测时表现都不好的情况. ...

  8. 解决欠拟合和过拟合的几种方法

    深度学习 欠拟合和过拟合的问题 ... 如何解决欠拟合和过拟合的问题? 深度学习 前言 一.介绍 二.如何解决欠拟合问题 三.如何解决过拟合问题 总结 前言   我们可以将搭建的模型是否发生欠拟合或者 ...

  9. 什么是欠拟合现象_欠拟合和过拟合是什么?解决方法总结

    欠拟合与过拟合 欠拟合是指模型在训练集.验证集和测试集上均表现不佳的情况: 过拟合是指模型在训练集上表现很好,到了验证和测试阶段就大不如意了,即模型的泛化能力很差. 欠拟合和过拟合一直是机器学习训练中 ...

最新文章

  1. 深入理解javascript原型和闭包(16)——完结
  2. 服务端第八次上课:mongodb,redis
  3. OpenCV imgproc直方图的实例(附完整代码)
  4. [Python图像识别] 四十六.图像预处理之图像去雾详解(ACE算法和暗通道先验去雾算法)
  5. CDN技术之--流媒体CDN系统的组成
  6. double 保留两位小数
  7. 32位与64位应用程序速度分析
  8. SPH(光滑粒子流体动力学)流体模拟实现:算法总览
  9. Liver Writer打开以前的日志/页面
  10. python 解析html 模块_使用 Python 模块—— HTMLParser 解析 HTML 文档元素
  11. 如何在Angular 2项目中使用Bootstrap css库
  12. python程序打包_python之程序打包
  13. Eclipse中最有用的快捷键组合
  14. centos 6.5 安装 phpmyadmin
  15. 泰格收银系统_泰格超市收银系统
  16. Android截屏工具类的使用
  17. cocos creator制作微信小游戏排行榜构建发布步骤
  18. 软路由硬件, 研究了一圈还是J1900 , i211网卡又如何
  19. ios 发光字体文字的实现
  20. JumpServer登录提示连接WebSocket失败

热门文章

  1. 新造车,程序员的糖、工程师的泪
  2. 十位院士眼中的智慧城市!
  3. 工作时间看股票:采用Excel RTD技术获取和讯网的实时股票行情及深沪港最新指数...
  4. 漫谈MCMC与Gibbs采样(一)—— 采样背后的逻辑
  5. 【Unity探究】物理碰撞实验
  6. c语言与单片机技术试卷与答案,哈尔滨工业大学《单片机原理及应用》课件、各章习题解答、试题及答案...
  7. syncnavigator百度云|syncnavigator使用说明|SyncNavigator注册机
  8. 计算机组成原理 思维导图 +《王道考研》习题总结(期末复习)
  9. tomcat为什么无法关闭
  10. Openjudge 1.7.16