过拟合

过拟合是指模型在训练过程中学习了所有样本的特征,复杂度高于实际问题。其泛化性能很差,在训练集中表现非常好,但是在测试集上的表现很差。

过拟合的原因
  • 样本的原因,样本太少;样本太过单一不足以代表实际问题;样本噪声很多,训练时学习了很多噪声的特征。
  • 模型选取的问题,模型并不适合该样本的训练。
  • 模型的参数太多,复杂度很高。
  • 决策树模型的话,没有优化树的生成策略,使其完美的匹配训练集数据,而不适应其他数据集的预测。
  • 对于神经网络模型:a)对样本数据可能存在分类决策面不唯一,随着学习的进行,BP算法使权值可能收敛过于复杂的决策面;b)权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征。
过拟合的解决办法

解决办法还从过拟合的原因出发:

  • 优化样本问题:扩充样本,使用更多、更能代表实际问题的训练数据;使用特征工程预处理数据,比如去除噪声数据、通过算法扩充训练样本、去除冗余特征。
  • 选择合适的、符合实际问题的模型来训练数据集。
  • 正则化:在损失函数中加入一定的正则约束。常见的正则化主要有L1正则化和L2正则化,1、带L1正则化的目标函数为:C=C0+λn∑i∣wi∣C = C_0+\frac{\lambda}{n}\sum_i|w_i|C=C0​+nλ​i∑​∣wi​∣为什么L1正则化能防止过拟合呢?
    带L1正则化的目标函数的梯度(导数)为∂C∂w=∂C0∂w+λnsgn(w)\frac{\partial C}{\partial w}=\frac{\partial C_0}{\partial w}+\frac{\lambda}{n}sgn(w)∂w∂C​=∂w∂C0​​+nλ​sgn(w)其中sgn(w)表示取www各个元素的正负号,即:当w>0⇒sgn(w)=1;w=0⇒sgn(w)=0;w<0⇒sgn(w)=−1w>0\Rightarrow sgn(w)=1;w=0\Rightarrow sgn(w)=0;w<0\Rightarrow sgn(w)=-1w>0⇒sgn(w)=1;w=0⇒sgn(w)=0;w<0⇒sgn(w)=−1。
    梯度下降时权重www更新:w→w′=w−ηλnsgn(w)−η∂C0∂ww \to w'=w-\frac{\eta\lambda}{n}sgn(w)-\eta\frac{\partial C_0}{\partial w}w→w′=w−nηλ​sgn(w)−η∂w∂C0​​所以:当w=0w=0w=0时,就是不带正则化的权重更新;当w>0w>0w>0时,sgn(w)=1sgn(w)=1sgn(w)=1梯度下降时更新后的www变小;当w<0w<0w<0时,sgn(w)=−1sgn(w)=-1sgn(w)=−1梯度下降时更新后的www变大。因此,L1正则化使得权重www训练趋于零,使网络中的权重尽可能为0,就相当于减小了模型的复杂度,从而防止过拟合。
    这也就是L1正则化会产生更稀疏(sparse)的解的原因。此处稀疏性指的是最优值中的一些参数为0。L1正则化的稀疏性质已经被广泛地应用于特征选择机制,从可用的特征子集中选择出有意义的特征。
    2、带L2正则化的目标函数:C=C0+λ2n∑iwi2C=C_0+\frac{\lambda}{2n}\sum_iw_i^2C=C0​+2nλ​i∑​wi2​其梯度(导数)为:∂C∂w=∂C0∂w+λnw\frac{\partial C}{\partial w}=\frac{\partial C_0}{\partial w}+\frac{\lambda}{n}w∂w∂C​=∂w∂C0​​+nλ​w梯度下降时权重w更新:w→w−η∂C0∂w−ηλnww \to w-\eta\frac{\partial C_0}{\partial w}-\frac{\eta\lambda}{n}ww→w−η∂w∂C0​​−nηλ​w在权重更新时,权重www 将逐渐减小,趋向于0但不等于0。这也就是权重衰减(weight decay)的由来。
    为什么L2正则化能防止过拟合呢?
    因为L2正则使得权重变小,这样模型相对稳定,不会因为数据的变化使结果发生大的变化。不会过分拟合训练集,从而提高模型的泛化性能。
  • Dropout:Dropout是深度网络模型训练的一种策略,本质就是在训练的过程中将部分神经元的激活函数设为0,使得这些神经元不参与计算更新权重。
    Dropout为什么能防止过拟合呢?
    1、在训练过程中会产生不同的训练模型,不同的训练模型也会产生不同的的计算结果。随着训练的不断进行,计算结果会在一个范围内波动,但是均值却不会有很大变化,因此可以把最终的训练结果看作是不同模型的平均输出。
    2、它消除或者减弱了神经元节点间的联合,降低了网络对单个神经元的依赖,从而增强了泛化能力。
  • Early stopping(提前终止):提前终止就是在模型训练的差不多时结束训练。
    Early stopping为什么能防止过拟合呢?
    因为随机初始化w值的时候,它的值是较小的随机值。当你开始迭代过程,w的值会变得越来越大。到后面时,w的值已经变得十分大了。所以early stopping要做的就是在中间点停止迭代过程。我们将会得到一个中等大小的w参数,会得到与L2正则化相似的结果,选择了w参数较小的神经网络。
    Early stopping的缺点:容易产生欠拟合。
  • 集成学习方法:集成学习是把多个模型集成在一起,来降低单一模型的过拟合风险,如Bagging 方法 。
欠拟合

模型训练不够,没有学习到数据集的特征规律,在训练集上就表现不好。

欠拟合的原因
  • 模型复杂度过低
  • 数据集的特征太少
欠拟合的解决办法
  • 增加新的特征,完善数据集,可以考虑特征工程进行特征组合等数据预处理
  • 增加模型的复杂度,如使用核函数,增加网络层数或神经元的个数
  • 减少正则化参数,正则化是用来防止过拟台的,但当模型出 现欠拟合现象时,则需要高针对性地减小正则化系数。
  • 容量低的模型(模型的容量是指其拟合各种函数的能力)可能很难拟合训练集;使用集成学习方法,如Bagging ,将多个弱学习器Bagging

参考资料:
1、欠拟合、过拟合及如何防止过拟合
2、欠拟合和过拟合出现原因及解决方案
3、百面机器学习P45

模型训练中的过拟合\欠拟合相关推荐

  1. 31,32,33_过拟合、欠拟合的概念、L2正则化,Pytorch过拟合欠拟合,交叉验证-Train-Val-Test划分,划分训练集和测试集,K-fold,Regularization

    1.26.过拟合.欠拟合及其解决方案 1.26.1.过拟合.欠拟合的概念 1.26.1.1.训练误差和泛化误差 1.26.1.2.验证数据集与K-fold验证 1.26.1.3.过拟合和欠拟合 1.2 ...

  2. 06 回归算法 - 损失函数、过拟合欠拟合

    == 损失函数 == 损失函数是衡量一个模型好坏的指标,一般来说损失函数的值越小越好. 0~1损失函数: J(θ)=$begin{cases} 1,Y≠f(X)\ 0,Y=f(X)\ end{case ...

  3. 回归算法-线性回归分析-过拟合欠拟合岭回归

    1.欠拟合与过拟合 机器学习中的泛化,泛化即是,模型学习到的概念在它处于学习的过程中时模型没有遇见过的样本时候的表现.在机器学习领域中,当我们讨论一个机器学习模型学习和泛化的好坏时,我们通常使用术语: ...

  4. 机器学习--过度拟合 欠拟合

    过度拟合(overfitting)是指数据模型在训练集里表现非常满意,但是一旦应用到真实业务实践时,效果大打折扣:换成学术化语言描述,就是模型对样本数据拟合非常好,但是对于样本数据外的应用数据,拟合效 ...

  5. FCN模型训练中遇到的困难

    FCN模型训练中遇到的困难 标签: 深度学习FCN神经网络caffe 2017-02-24 10:54 2675人阅读 评论(6) 收藏 举报  分类: 深度学习(18)  版权声明:本文为博主原创文 ...

  6. ML之FE:在模型训练中,仅需两行代码实现切分训练集和测试集并分离特征与标签

    ML之FE:在模型训练中,仅需两行代码实现切分训练集和测试集并分离特征与标签 目录 仅需两行代码实现切分训练集和测试集并分离特征与标签 输出结果 实习代码 仅需两行代码实现切分训练集和测试集并分离特征 ...

  7. 关于模型训练中显存占用过大的或直接报显存爆炸的解决方法

    模型训练显存爆炸解决方法 在模型训练中,应该理解梯度.反向传播.图层.显存这些概念,在模型训练过程中,一般会分为训练+验证+测试 ,在这些过程中,一般在训练过程中会比较占用显存,因为涉及到反向传播,需 ...

  8. 模型训练中_pickle.PicklingError: Can’t pickle问题解决办法

    模型训练中_pickle.PicklingError: Can't pickle问题解决办法 一.问题描述 二.解决办法 欢迎学习交流! 邮箱: z-@1-6.com 网站: https://zeph ...

  9. 泛化,过拟合,欠拟合素材(part1)--python机器学习基础教程

    学习笔记,仅供参考,有错必纠 文章目录 python机器学习基础教程 泛化.过拟合.欠拟合 模型复杂度与训练集大小的关系 python机器学习基础教程 泛化.过拟合.欠拟合 判断一个算法在新数据上表现 ...

最新文章

  1. 为选择屏幕的字段设置F4帮助
  2. 压力测试后,BCH采用增加
  3. 【BZOJ 1486】 [HNOI2009]最小圈
  4. Cannot add or update a child row: a foreign key constraint fails (`university`.`instructor`, CONSTRA
  5. BZOJ 2728 HNOI2012 与非 高斯消元
  6. Computer Browser服务自动停止
  7. PMP学习笔记之四 第三章 单个项目管理过程
  8. IT大学生成长周报 | 第 2 期
  9. CSS 的 hsl() 和 hsla() 函数(设置颜色的方式之一)
  10. 拯救节日邮件!专属这个节假季的EDM营销方案
  11. 关于webpack登堂入室的必经之路(1)
  12. mongodb 存储过程 遍历表数据_使用MongoDB存储数据
  13. springMVC 面试题整理
  14. Markdown语法文档,Markdown教程,Markdown语法大全,
  15. 华为那个手机是鸿蒙,EMUI 11就是鸿蒙前奏 华为手机全面升级鸿蒙OS稳了
  16. [译] Cilium:基于 BPF+EDT+FQ+BBR 更好地带宽网络管理
  17. 自动生成目录和参考文献上标
  18. MYSQL存储过程怎么写
  19. serialize()方法
  20. Xcode The 'Apple Push Notification' feature is only available to users enrolled in Apple Develo.

热门文章

  1. 李维 《Delphi8范例演示》
  2. cogs 1396. wwww
  3. linux 查看zombie进程
  4. 【小Y学算法】⚡️每日LeetCode打卡⚡️——19.加一
  5. 红黑棋子交换java,象棋大挪移 红黑棋子 红先黑后,输了不臭
  6. 自学PHP与培训PHP的到底有多大的差距?
  7. linux隐藏以点开头文件夹,为什么 UNIX 等系统的隐藏目录以点开头?
  8. 在CentOS下编译VLC源码
  9. HTML如何实现页面中英文切换,关于html页面中怎样实现中英文切换的实例分享
  10. NUC装win10问题