深入探讨机器学习中的过拟合现象及其解决方法

news2024/11/17 23:54:23

1. What❓

过拟合Overfitting)是指在机器学习中,模型在训练集上表现较好,但在测试集或实际应用中表现较差的现象。过拟合发生时,模型过于复杂地学习了训练集中的噪声、异常值或特定模式,从而导致对新样本的泛化能力下降。

过拟合通常是由于模型在训练过程中过于强调训练集上的表现,将训练集中的噪声或特定模式也当作了普遍规律而过度拟合。过拟合可能导致模型过于复杂,过于依赖训练集中的特定样本,从而在面对新样本时无法进行准确的预测,从而降低了模型的泛化性能。

过拟合的表现通常包括训练集上的误差较低,但测试集上的误差较高,模型在训练集上的表现比在测试集上要好,模型对噪声或异常值敏感,对新样本的预测不准确等。

上图中,模型的训练误差以蓝色显示,验证误差以红色显示。随着模型的训练周期增大,验证误差增加(正斜率)而训练误差稳步下降(负斜率),则模型可能发生了过度拟合的情况。 最好的预测和拟合模型将是验证误差具有其全局最小值的地方,也就是图中的虚线位置。

2. Solutions❗️

为了解决或者是缓解过拟合问题,以下是一些常用的方法:

2.1 数据增强

  • 数据增强Data Augmentation)是一种在机器学习和深度学习中用于增加训练数据量的技术。它通过对原始训练数据进行一系列变换操作,生成新的训练样本,从而扩增了训练数据的规模和多样性。数据增强可以帮助模型更好地学习到数据中的模式和特征,从而提高模型的泛化性能,减少过拟合的风险。
  • 数据增强技术可以应用于各种类型的数据,包括图像、文本、语音等。常用的图像数据增强操作包括随机翻转、随机旋转、随机缩放、随机裁剪、色彩变换等,如下图所示。对于文本数据,数据增强可以包括随机删除、随机替换、随机插入等操作。对于语音数据,数据增强可以包括加入噪声、变换语速、变换音调等操作。
  • 通过数据增强,可以生成具有多样性的训练样本,从而提高模型的鲁棒性,使其对于新的、未见过的数据更具泛化性能。数据增强也可以减少模型在训练过程中对于少量标注数据的依赖,从而在数据量较小的情况下仍能训练出效果较好的模型。

2.2 正则化

  • 正则化Regularization):在损失函数中引入正则化项,如 L1 正则化(Lasso)、L2 正则化(Ridge)等,用于限制模型参数的大小,减小模型的复杂度,从而减少过拟合。
  • L1 正则化可以将一些模型参数稀疏化,即将一些参数设为零,从而实现特征选择的效果;而 L2 正则化会使得模型参数向零的方向收缩,从而减小参数的幅度,降低模型的复杂性。
    L 1 : N e w L o s s F u n c t i o n    =    O r i g i n a l L o s s F u n c t i o n    +    λ ∗ ∥ w ∥ 1 L1\text{:}NewLossFunction\,\,=\,\,OriginalLossFunction\,\,+\,\,\lambda *\left\| w \right\| _1 L1NewLossFunction=OriginalLossFunction+λw1
    L 2 : N e w L o s s F u n c t i o n    =    O r i g i n a l L o s s F u n c t i o n    +    λ ∗ ∥ w ∥ 2 2 L2\text{:}NewLossFunction\,\,=\,\,OriginalLossFunction\,\,+\,\,\lambda *{\left\| w \right\| _2}^2 L2NewLossFunction=OriginalLossFunction+λw22
  • L1 正则化(Lasso 正则化):Original 是原始的损失函数(例如均方误差、交叉熵等),λ 是正则化参数(用于控制正则化项的权重),w 是模型的参数向量,||w||₁ 是参数向量 w 的 L1 范数(绝对值之和)。
  • L2 正则化(Ridge 正则化):其中,损失函数、λ 和 w 的定义与 L1 正则化相同,但是这里的正则化项是参数向量 w 的 L2 范数的平方(参数的平方和)。
  • 需要注意的是,正则化参数 λ 的选择对于正则化技术的效果非常关键,λ 越大,正则化项对模型的惩罚越强,模型的复杂性越低;而 λ 越小,正则化项对模型的惩罚越弱,模型的复杂性越高。因此,在实际应用中,需要根据具体问题和数据集的情况,合理选择正则化参数的取值。

2.3 早停策略

  • 早停策略Early Stopping):在训练过程中,根据验证集的性能表现,在验证集上性能不再提升时提前停止训练,从而防止模型在训练集上过拟合。
  • 如上图所示,我们通常在验证集的误差曲线或者准确率曲线的拐点处停止训练,从而防止模型的过拟合。

2.4 随机丢弃

  • 随机丢弃Dropout):在训练过程中,随机丢弃一些神经元的输出来减少神经元之间的依赖性,也就是输出置为零,如下图所示,这样可以强制网络在训练时学习多个独立的子网络,从而增加模型的泛化能力。
  • Dropout 的设置大小通常是一个超参数,需要在训练过程中进行调优。一般情况下,随机丢弃的大小在 0.1 到 0.5 之间比较常见,但最佳的设置大小取决于具体的问题和模型架构。
  • 在实践中,可以通过尝试不同的丢弃率进行模型训练,然后使用验证集上的性能指标来选择最佳的丢弃率。通常情况下,较大的丢弃率可以提供更强的正则化效果,但可能会降低模型的训练速度和预测性能,而较小的丢弃率则可能不足以减少过拟合。因此,建议从较小的丢弃率开始,例如 0.1 或 0.2,然后逐渐增加丢弃率,直到在验证集上达到最佳性能为止。

2.5 增加训练数据量

  • 通过增加训练数据量,从而减少模型在训练集上的过拟合风险,提高模型的泛化能力。
  • 给模型来一点大数据(Big Data)的调教。😆😆😆

2.6 其他

  • 模型复杂度控制:通过减少模型的层数、节点数或卷积核的个数等方式降低模型的复杂度,从而减小过拟合的风险。
  • 批标准化Batch Normalization):在网络的每一层输入进行归一化,从而加速网络的收敛速度,降低模型在训练数据上的过拟合风险。
  • 模型集成Model Ensemble):通过组合多个不同的模型,如集成学习、模型融合等方式,从而提高模型的泛化能力。
  • 超参数调优Hyperparameter Tuning):调整模型的超参数,如学习率、批大小、正则化强度等,通过搜索最佳的超参数组合,从而改善模型的性能。
  • 异常检测Anomaly Detection):通过识别和过滤掉异常或噪声样本,从而减少对异常样本的拟合,提高模型的泛化能力。
  • 迁移学习Transfer Learning):将在一个领域或任务上训练好的模型迁移到另一个领域或任务上,并进行微调,从而利用 已有的知识来提高模型的泛化能力。

以上方法可以单独或者组合使用,具体的选择和调参需要根据具体的问题和数据集来定,以获得最佳的效果。

3. Supplement💘

测试集上的准确率比训练集上的稍微差一点,是不是过拟合了?

  • 如果您的模型在测试集上的准确率略低于在训练集上的准确率,这并不能直接说明模型存在过拟合。在实际应用中,测试集上的性能可能会略低于训练集,这是比较常见的现象。
  • 因为测试集和训练集之间可能存在一定的差异,例如数据分布、噪声等。模型在训练集上学到的特征在测试集上可能不一定能够完全泛化。

我的模型训练了10个 epoch,最后一个 epoch 的验证集准确率不是最高的,是过拟合了吗?

  • 如果最后一个 epoch 的准确率不是最高的,这并不一定意味着过拟合。过拟合通常表现为训练集上的准确率很高,但在验证集或测试集上的准确率较低。你可以检查一下模型在验证集或测试集上的表现,以确定是否出现过拟合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/419553.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

限流:计数器、漏桶、令牌桶 三大算法的原理与实战(史上最全)

限流 限流是面试中的常见的面试题(尤其是大厂面试、高P面试) 注:本文以 PDF 持续更新,最新尼恩 架构笔记、面试题 的PDF文件,请到文末《技术自由圈》公号获取 为什么要限流 简单来说: 限流在很多场景中用来…

教程 | 近红外数据的预处理和平均(上)

前言 近红外光谱(NIRS)是一种测量流经传感器所在组织的血液中氧合水平的方法。它基于这样一个事实,即含氧血红蛋白和脱氧血红蛋白具有不同的吸收光谱,因此你会看到它有不同的颜色。大多数近红外系统在每个光源光电二极管发射2个波长的光,通常…

【记录】ORB_SLAM2 例程(README文件里的单双目RDB-D、ROS、AR、外接摄像头、点云)

第一次跑 ORB_SLAM2,记录一下一、普通环境0.build.sh 遇到的问题(1)usleep(2)AlignedBit1.单目、TUM数据集2.双目、KITTI数据集3.RGB-D、TUM数据集二、ROS0.build_ros.sh 遇到的问题(1)rospack …

【C++】结构体应用案例 1

目录 1、缘起 2、案例描述 3、案例分析 4、代码清单 1 5、代码清单 2 6、总结 1、缘起 最近学习完了 C 语言的结构体相关知识点,如 结构体数组,结构体指针,结构体嵌套结构体 和 结构体做函数参数。本篇博客围绕着这些知识点&#xff0c…

【华为机试真题详解JAVA实现】—Sudoku

目录 一、题目描述 二、解题代码 一、题目描述 问题描述:数独(Sudoku)是一款大众喜爱的数字逻辑游戏。玩家需要根据9X9盘面上的已知数字,推算出所有剩余空格的数字,并且满足每一行、每一列、每一个3X3粗线宫内的数字均含1-9,并且不重复。 例如: 输入 输出

SpringCloud学习-实用篇02

以下内容的代码可见:SpringCloud_learn/day02 1.Nacos配置管理 之前提到的Nacos是作为注册中心,除此之外它还有配置管理功能 统一配置管理 假设有多个微服务之间有关联,此时修改了某个微服务的配置后其他相关的微服务也需要重启,十…

Javaweb | 过滤器、配置、过滤器链、优先级

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 过滤器 概念 过滤器(Filter)是处于客户端与服务器目标资源之间的一道过滤技术 用户的请求和响应都需要经过过滤器 过滤器作用 执行地位在Servl…

C++初阶 -1- C++入门part2

文章目录6.引用什么是引用?引用的使用引用的应用传值、传引用效率比较权限引用和指针的区别⭐7.内联函数8.auto关键字9.基于范围的for循环10.指针空值——nullptr6.引用 什么是引用? “别名” int a 0; int& b 0;👆即 地址为0x00000…

【linux】:模拟文件基本操作以及文件在磁盘中如何存储的学习

文章目录 前言一、模拟C库文件操作二、磁盘文件总结前言 经过我们上一篇对linux系统文件操作的学习想必我们已经会使用系统文件接口了,今天我们就用系统文件接口来封装一个像C语言库那样的文件操作函数的函数来加深我们对文件操作的学习。 一、模拟C库文件操作 首…

通过Milo实现的OPC UA客户端连接并订阅Prosys OPC UA Simulation Server模拟服务器

背景 前面我们搭建了一个本地的 PLC 仿真环境,并通过 KEPServerEX6 读取 PLC 上的数据,最后还使用 UAExpert 作为 OPC 客户端完成从 KEPServerEX6 这个OPC服务器的数据读取与订阅功能:SpringBoot集成Milo库实现OPC UA客户端:连接…

新一代信息技术赋能,安科瑞搭建智慧水务体系的新思路

随着新时期治水方针的逐步落实,水利现代化、智能化建设已开启,物联网、图像识别、数字孪生等新技术的成熟,也为智慧水务体系的搭建提供了技术保障,新时代治水新思路正逐步得到落实。本文对智慧水务的总体架构与包含的建设内容进行…

Qt第六十二章:图标库QtAwesome的使用

目录 一、安装依赖 二、主页 三、文档 四、案例 1、图标 2、样式 3、alpha 通道 4、 多图标堆叠 5、动画 6、字体 五、系列 1、msc系列 2、fa5系列(选择free栏) 3、fa5s系列(选择free栏) 4、fa5b系列(选…

由libunifex来看Executor的任务构建

前言 之前的一篇文章讲述了future的优缺点,以及future的组合性,其中也讲述了构建任务DAG一些问题,同时给出了比较好的方案则是Executor。 Executor还未进入标准(C23),Executor拥有惰性构建及良好的抽象模型…

尚硅谷大数据技术Zookeeper教程-笔记03【源码解析-算法基础】

视频地址:【尚硅谷】大数据技术之Zookeeper 3.5.7版本教程_哔哩哔哩_bilibili 尚硅谷大数据技术Zookeeper教程-笔记01【Zookeeper(入门、本地安装、集群操作)】尚硅谷大数据技术Zookeeper教程-笔记02【服务器动态上下线监听案例、ZooKeeper分布式锁案例、企业面试真…

多模态大模型的发展、挑战与应用

多模态大模型的发展、挑战与应用 2023/04/15 研究进展 随着 AlexNet [1] 的出现,过去十年里深度学习得到了快速的发展,而卷积神经网络也从 AlexNet 逐步发展到了 VGG [2]、ResNet [3]、DenseNet [4]、HRNet [5] 等更深的网络结构。研究者们发现&#…

用vscode运行Java程序初体验

最近开始学习Java编程了,以前学习过C、C 、Python,主要用微软的visual studio code来运行python程序,于是就尝试了用vscode来运行java代码,记录一下使用的经验,帮助大家少走弯路。 安装了Java的集成编辑器IDE "Ec…

c++STL之关联式容器

目录 set容器 set的默认构造 set的插入与迭代器 set集合的元素排序 set集合的初始化及遍历 从小到大(默认情况下) 从大到小 仿函数 set的查找 pair的使用 multiset容器 map和multimap容器 map的插入与迭代器 map的大小 map的删除 map的查找 关联式容器&#…

【LeetCode: 337. 打家劫舍 III | 暴力递归=>记忆化搜索=>动态规划 | 树形dp】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

整数二分从入门到精通

前言: 开个玩笑,我们写算法可不能这样哈~ 好了,正片开始: 你是否曾经也有过整数二分因为一直死循环而苦恼,你是否因为搞不清楚整数二分的边界处理而焦躁,明明很简单的一道二分,但是最后就是搞…

Python入门教程+项目实战-9.1节: 字符串的定义与编码

目录 9.1.1 理解字符串 9.1.2 字符串的类型名 9.1.3 字符的数字编码 9.1.4 常用的字符编码 9.1.5 字符串的默认编码 9.1.6 字符串的编码与解码 9.1.7 转义字符详解 9.1.8 对字符串进行遍历 9.1.9 知识要点 9.1.10 系统学习python 9.1.1 理解字符串 理解字符串&#…