码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 欠拟合、过拟合现象,及解决办法


    @创建于:2022.05.27
    @修改于:2022.05.27

    文章目录

      • 1、过拟合与欠拟合
      • 2、欠拟合
        • 2.1 出现的原因
        • 2.2 解决的办法
      • 3、过拟合
        • 3.1 出现的原因
        • 3.2 解决的办法
      • 4. Early stopping
      • 5、Dropout
      • 6、L1 和 L2 正则化
      • 7、参考资料

    1、过拟合与欠拟合

    机器学习中模型的泛化能力强的模型才是好模型。对于训练好的模型:

    • 若在训练集表现差,不必说在测试集表现同样会很差,这可能是欠拟合导致;
    • 若模型在训练集表现非常好,却在测试集上差强人意,则这便是过拟合导致的。

    过拟合与欠拟合也可以用 Bias 与 Variance 的角度来解释:

    • 欠拟合会导致高 Bias
    • 过拟合会导致高 Variance

    所以模型需要在 Bias 与 Variance 之间做出一个权衡。

    现象训练集表现验证集表现导致后果
    欠拟合不好不好高 Bias
    过拟合好不好高 Variance
    适度拟合好好Bias 和 Variance 的折中

    在这里插入图片描述

    2、欠拟合

    2.1 出现的原因

    使用的模型复杂度过低
    使用的特征量过少
    【其他的,如果您知道,请告诉我!感谢】

    2.2 解决的办法

    1、对于机器学习

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

    2、对于深度学习
    欠拟合的原因以及解决办法(深度学习)

    • 对原始数据做归一化处理,这个会加速模型的收敛
    • 减少使用正则化,减少的dropout
    • 增加单层的神经元个数,加深网络层次
    • 正确使用激活函数

    3、过拟合

    3.1 出现的原因

    1、对于机器学习

    • 建模样本选取有误,如样本数量太少,选样方法错误,样本标签错误等,导致选取的样本数据不足以代表预定的分类规则

    • 样本噪音干扰过大,使得机器将部分噪音认为是特征从而扰乱了预设的分类规则

    • 假设的模型无法合理存在,或者说是假设成立的条件实际并不成立
      参数太多,模型复杂度过高

    • 对于决策树模型,如果我们对于其生长没有合理的限制,其自由生长有可能使节点只包含单纯的事件数据(event)或非事件数据(no event),使其虽然可以完美匹配(拟合)训练数据,但是无法适应其他数据集

    2、对于神经网络模型

    • a)对样本数据可能存在分类决策面不唯一,随着学习的进行,BP算法使权值可能收敛过于复杂的决策面;
    • b)权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征

    3.2 解决的办法

    • 正则化(Regularization)(L1和L2)
    • 数据扩增,即增加训练数据样本(Data augmentation)
    • Dropout
    • Early stopping
    • 降低模型复杂度
    • 使用交叉验证

    4. Early stopping

    深度学习入门四----过拟合与欠拟合

    在这里插入图片描述
    在训练期间验证损失(validation loss)可能会开始增加,为了防止这种情况,在验证损失(validation loss)不再减少时停止训练。以这种方式中断训练称为early stopping。

    一旦检测到验证损失开始再次上升,可以将权重重置为最小值出现的位置。这可确保模型不会继续学习噪声和过度拟合数据。

    提前停止训练也意味着不太可能在网络完成学习信号之前过早停止训练。所以除了防止过拟合训练时间过长之外,提前停止还可以防止欠拟合训练时间不够长。只需将您的训练时期设置为一个较大的数字(比您需要的多),早期停止将处理其余部分。

    5、Dropout

    深度学习入门五----Dropout and Batch Normalization
    过拟合的原因以及解决办法(深度学习)
    在训练的每一步随机丢弃层输入单元的一部分,使网络更难学习训练数据中的那些虚假模式。相反,它必须搜索广泛的、通用的模式,其权重模式往往更加稳健。

    在这里插入图片描述

    6、L1 和 L2 正则化

    L1正则化就是在loss function后边所加正则项为L1范数,加上L1范数容易得到稀疏解(0比较多)。L2正则化就是loss function后边所加正则项为L2范数的平方,加上L2正则相比于L1正则来说,得到的解比较平滑(不是稀疏),但是同样能够保证解中接近于0(但不是等于0,所以相对平滑)的维度比较多,降低模型的复杂度。
    在这里插入图片描述

    7、参考资料

    机器学习防止欠拟合、过拟合方法
    欠拟合和过拟合出现原因及解决方案

    深度学习入门四----过拟合与欠拟合
    深度学习入门五----Dropout and Batch Normalization

    欠拟合的原因以及解决办法(深度学习)
    过拟合的原因以及解决办法(深度学习)

    机器学习中正则化项L1和L2的直观理解
    L1正则化与L2正则化

  • 相关阅读:
    vue 鼠标移入移出事件执行多次(尤其ie)
    Spring5学习笔记
    小白学爬虫:通过商品ID或商品链接封装接口获取淘宝商品销量数据接口|淘宝商品销量接口|淘宝月销量接口|淘宝总销量接口
    Android开发知识学习——编码、加密、Hash、序列化和字符集
    集合_Collection_HashSet简述
    Synopsys Sentaurus TCAD系列教程之-Tcl《1》
    SpringCloud系列(16)--将服务提供者Provider注册进Zookeeper
    【Springboot 入门培训】#14 WebJars 样式包BootStrap 5架构
    Pytorch Lighting 库的学习 mvsplat 的笔记
    软件测试/测试开发丨接口测试学习笔记-常见的接口协议
  • 原文地址:https://blog.csdn.net/chenhepg/article/details/125008004
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号