【Python】过拟合解决
目录
简介
如何确定模型是否过拟合?
如何防止过拟合
交叉验证
用更多数据进行训练
移除特征
早停
正则化
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】过拟合解决相关推荐
- 过拟合解决方法python_《python深度学习》笔记---4.4、过拟合与欠拟合(解决过拟合常见方法)...
<python深度学习>笔记---4.4.过拟合与欠拟合(解决过拟合常见方法) 一.总结 一句话总结: 减小网络大小 添加权重正则化 添加 dropout 正则化 1.机器学习的根本问题? ...
- 无法激活“Pylance“扩展, 因为它依赖于未加载的 Python 扩展。解决办法
"无法激活 "Pylance" 扩展, 因为它依赖于未加载的 "Python" 扩展.解决办法 卸载Python扩展(如果你有pylance先卸载它) ...
- Python学习之解决python下载第三方依赖速度慢的问题
Python学习之解决python下载第三方依赖速度慢的问题 参考文章: (1)Python学习之解决python下载第三方依赖速度慢的问题 (2)https://www.cnblogs.com/su ...
- 首次安装Pycharm出现No Python interpreter selected解决方法
首次安装Pycharm出现No Python interpreter selected解决方法 参考文章: (1)首次安装Pycharm出现No Python interpreter selected ...
- python pip安装解决方法
python pip安装解决方法 参考文章: (1)python pip安装解决方法 (2)https://www.cnblogs.com/nykuo/p/11294297.html 备忘一下.
- 机器学习中常见的过拟合解决方法
机器学习中常见的过拟合解决方法 参考文章: (1)机器学习中常见的过拟合解决方法 (2)https://www.cnblogs.com/jiangxinyang/p/9281107.html 备忘一下 ...
- python: 关于解决‘\u‘开头的字符串转中文的方法
python: 关于解决'\u'开头的字符串转中文的方法 参考文章: (1)python: 关于解决'\u'开头的字符串转中文的方法 (2)https://www.cnblogs.com/hahaxz ...
- python函数拟合不规则曲线_python曲线拟合
Python曲线拟合 前言 这篇文章的由来:前几天在做大学物理居家实验水滴法测量声速的时候需要使用phyphox软件导出的数据拟合y=1/(a+b*x)曲线.虽然老师要求使用Origin软件拟合,但是 ...
- Python:通过执行100万次打印来比较C和python的性能,以及用C和python结合来解决性能问题的方法 .
Python:通过执行100万次打印来比较C和python的性能,以及用C和python结合来解决性能问题的方法 . 参考文章: (1)Python:通过执行100万次打印来比较C和python的性能 ...
- PyCharm无法找到已安装的Python类库的解决方法
PyCharm无法找到已安装的Python类库的解决方法 参考文章: (1)PyCharm无法找到已安装的Python类库的解决方法 (2)https://www.cnblogs.com/yanqin ...
最新文章
- 使用Restful、Guns、SpringBoot实现前后端分离
- Ceryx —— 基于 OpenResty 的动态反向代理
- matlab向量与x正方向的夹角_MIT—线性代数笔记25 对称矩阵和正定性
- java中File的使用
- APP开发手记01(app与web的困惑)
- 2016年考研数学一真题pdf ​​​
- linux使用tar命令,Linux的tar命令使用简介
- 【全志V3s / LicheePi Zero / 荔枝派】Air724合宙4G模块RNDIS拨号
- 中国医药流通行业深度分析及十四五发展规划咨询建议报告2022-2028年版
- 记录每天学习的新知识: Android 前台服务
- 数据库连接中的等值连接、自然连接、外连接、左外连接和右外连接
- 大数据入门最全组件思维导图
- LeetCode 香槟塔
- Python学习笔记7-函数
- Flex ANE介绍
- Windows卸载easyconnect
- ReacNative:报错Cannot add a child that doesn’t have a YogaNode to a parent without a measure function!
- 更新域内计算机时间,Word2013如何自动更新文档中的日期和时间?如何设置打印前自动更新域...
- android开发笔记之有用软件列表
- 司新颖:当番茄遭遇鸡蛋
热门文章
- linux软连接-python软连接创建、删除、查看
- 利用免费Excel控件来制作Excel报表
- emf文件解析处理EMR_RESERVED_108格式记录
- 火影几点服务器维护完,火影忍者手游7.8更新到几点?7月8日停机更新内容一览...
- 代码画年兽,虎年祝大家虎虎生威
- 使用sql自动生成测试数据
- android长截图工具下载,Android实现长截屏功能
- find命令 查找指定后缀文件
- 使用bootstarp前端组件集成的table 分页组件 ;简单上手使用实现前端分页功能
- pythonmatplotlib显示数值_4.10Python数据处理篇之Matplotlib系列(十)---文本的显示