目录

简介

如何确定模型是否过拟合?

如何防止过拟合

交叉验证

用更多数据进行训练

移除特征

早停

正则化

Dropout

总结

参考


简介

在机器学习中,过拟合(overfitting)会使模型的预测性能变差,通常发生在模型过于复杂的情况下,如参数过多等。本文对过拟合及其解决方法进行了归纳阐述。

正如巴菲特所言:「近似的正确好过精确的错误。」

在机器学习中,如果模型过于专注于特定的训练数据而错过了要点,那么该模型就被认为是过拟合。该模型提供的答案和正确答案相距甚远,即准确率降低。这类模型将无关数据中的噪声视为信号,对准确率造成负面影响。即使模型经过很好地训练使损失很小,也无济于事,它在新数据上的性能仍然很差。欠拟合是指模型未捕获数据的逻辑。因此,欠拟合模型具备较低的准确率和较高的损失。

如何确定模型是否过拟合?

构建模型时,数据会被分为 3 类:训练集、验证集和测试集。训练数据用来训练模型;验证集用于在每一步测试构建的模型;测试集用于最后评估模型。通常数据以 80:10:10 或 70:20:10 的比率分配。

在构建模型的过程中,在每个 epoch 中使用验证数据测试当前已构建的模型,得到模型的损失和准确率,以及每个 epoch 的验证损失和验证准确率。模型构建完成后,使用测试数据对模型进行测试并得到准确率。如果准确率和验证准确率存在较大的差异,则说明该模型是过拟合的。

如果验证集和测试集的损失都很高,那么就说明该模型是欠拟合的。

如何防止过拟合

交叉验证

交叉验证是防止过拟合的好方法。在交叉验证中,我们生成多个训练测试划分(splits)并调整模型。K-折验证是一种标准的交叉验证方法,即将数据分成 k 个子集,用其中一个子集进行验证,其他子集用于训练算法。

交叉验证允许调整超参数,性能是所有值的平均值。该方法计算成本较高,但不会浪费太多数据。交叉验证过程参见下图:

用更多数据进行训练

用更多相关数据训练模型有助于更好地识别信号,避免将噪声作为信号。数据增强是增加训练数据的一种方式,可以通过翻转(flipping)、平移(translation)、旋转(rotation)、缩放(scaling)、更改亮度(changing brightness)等方法来实现。

移除特征

移除特征能够降低模型的复杂性,并且在一定程度上避免噪声,使模型更高效。为了降低复杂度,我们可以移除层或减少神经元数量,使网络变小。

早停

对模型进行迭代训练时,我们可以度量每次迭代的性能。当验证损失开始增加时,我们应该停止训练模型,这样就能阻止过拟合。

下图展示了停止训练模型的时机:

正则化

正则化可用于降低模型的复杂性。这是通过惩罚损失函数完成的,可通过 L1 和 L2 两种方式完成,数学方程式如下:

L1 惩罚的目的是优化权重绝对值的总和。它生成一个简单且可解释的模型,且对于异常值是鲁棒的。

L2 惩罚权重值的平方和。该模型能够学习复杂的数据模式,但对于异常值不具备鲁棒性。

这两种正则化方法都有助于解决过拟合问题,读者可以根据需要选择使用。

Dropout

Dropout 是一种正则化方法,用于随机禁用神经网络单元。它可以在任何隐藏层或输入层上实现,但不能在输出层上实现。该方法可以免除对其他神经元的依赖,进而使网络学习独立的相关性。该方法能够降低网络的密度,如下图所示:

总结

过拟合是一个需要解决的问题,因为它会让我们无法有效地使用现有数据。有时我们也可以在构建模型之前,预估到会出现过拟合的情况。通过查看数据、收集数据的方式、采样方式,错误的假设,错误表征能够发现过拟合的预兆。为避免这种情况,请在建模之前先检查数据。但有时在预处理过程中无法检测到过拟合,而是在构建模型后才能检测出来。我们可以使用上述方法解决过拟合问题。

参考

https://mahithas.medium.com/overfitting-identify-and-resolve-df3e3fdd2860

六种方法帮你解决模型过拟合问题

【Python】过拟合解决相关推荐

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

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

  2. 无法激活“Pylance“扩展, 因为它依赖于未加载的 Python 扩展。解决办法

    "无法激活 "Pylance" 扩展, 因为它依赖于未加载的 "Python" 扩展.解决办法 卸载Python扩展(如果你有pylance先卸载它) ...

  3. Python学习之解决python下载第三方依赖速度慢的问题

    Python学习之解决python下载第三方依赖速度慢的问题 参考文章: (1)Python学习之解决python下载第三方依赖速度慢的问题 (2)https://www.cnblogs.com/su ...

  4. 首次安装Pycharm出现No Python interpreter selected解决方法

    首次安装Pycharm出现No Python interpreter selected解决方法 参考文章: (1)首次安装Pycharm出现No Python interpreter selected ...

  5. python pip安装解决方法

    python pip安装解决方法 参考文章: (1)python pip安装解决方法 (2)https://www.cnblogs.com/nykuo/p/11294297.html 备忘一下.

  6. 机器学习中常见的过拟合解决方法

    机器学习中常见的过拟合解决方法 参考文章: (1)机器学习中常见的过拟合解决方法 (2)https://www.cnblogs.com/jiangxinyang/p/9281107.html 备忘一下 ...

  7. python: 关于解决‘\u‘开头的字符串转中文的方法

    python: 关于解决'\u'开头的字符串转中文的方法 参考文章: (1)python: 关于解决'\u'开头的字符串转中文的方法 (2)https://www.cnblogs.com/hahaxz ...

  8. python函数拟合不规则曲线_python曲线拟合

    Python曲线拟合 前言 这篇文章的由来:前几天在做大学物理居家实验水滴法测量声速的时候需要使用phyphox软件导出的数据拟合y=1/(a+b*x)曲线.虽然老师要求使用Origin软件拟合,但是 ...

  9. Python:通过执行100万次打印来比较C和python的性能,以及用C和python结合来解决性能问题的方法 .

    Python:通过执行100万次打印来比较C和python的性能,以及用C和python结合来解决性能问题的方法 . 参考文章: (1)Python:通过执行100万次打印来比较C和python的性能 ...

  10. PyCharm无法找到已安装的Python类库的解决方法

    PyCharm无法找到已安装的Python类库的解决方法 参考文章: (1)PyCharm无法找到已安装的Python类库的解决方法 (2)https://www.cnblogs.com/yanqin ...

最新文章

  1. 使用Restful、Guns、SpringBoot实现前后端分离
  2. Ceryx —— 基于 OpenResty 的动态反向代理
  3. matlab向量与x正方向的夹角_MIT—线性代数笔记25 对称矩阵和正定性
  4. java中File的使用
  5. APP开发手记01(app与web的困惑)
  6. 2016年考研数学一真题pdf ​​​
  7. linux使用tar命令,Linux的tar命令使用简介
  8. 【全志V3s / LicheePi Zero / 荔枝派】Air724合宙4G模块RNDIS拨号
  9. 中国医药流通行业深度分析及十四五发展规划咨询建议报告2022-2028年版
  10. 记录每天学习的新知识: Android 前台服务
  11. 数据库连接中的等值连接、自然连接、外连接、左外连接和右外连接
  12. 大数据入门最全组件思维导图
  13. LeetCode 香槟塔
  14. Python学习笔记7-函数
  15. Flex ANE介绍
  16. Windows卸载easyconnect
  17. ReacNative:报错Cannot add a child that doesn’t have a YogaNode to a parent without a measure function!
  18. 更新域内计算机时间,Word2013如何自动更新文档中的日期和时间?如何设置打印前自动更新域...
  19. android开发笔记之有用软件列表
  20. 司新颖:当番茄遭遇鸡蛋

热门文章

  1. linux软连接-python软连接创建、删除、查看
  2. 利用免费Excel控件来制作Excel报表
  3. emf文件解析处理EMR_RESERVED_108格式记录
  4. 火影几点服务器维护完,火影忍者手游7.8更新到几点?7月8日停机更新内容一览...
  5. 代码画年兽,虎年祝大家虎虎生威
  6. 使用sql自动生成测试数据
  7. android长截图工具下载,Android实现长截屏功能
  8. find命令 查找指定后缀文件
  9. 使用bootstarp前端组件集成的table 分页组件 ;简单上手使用实现前端分页功能
  10. pythonmatplotlib显示数值_4.10Python数据处理篇之Matplotlib系列(十)---文本的显示