什么是过度拟合和欠拟合?
在机器学习中,当一个算法的预测非常接近或者直接等于它的训练数据,导致不能够准确预测除了训练数据以外的数据,我们把这种情况称为过度拟合。算法能够非常接近甚至就是训练的数据,是个非常好的事,但是它不能准确预测除了训练数据以外的数据就很糟糕了,这就也失去了机器学习模型的作用。
机器学习算法在构造时,它会利用一些样本数据来训练模型。但是当模型在这些样本数据上训练得太久或当这个模型太过复杂,它就会开始学习一些数据集中的“噪音”或不相关的信息。那么当这个模型记住了这些“噪音”,又拟合得太接近训练集,这个模型就会变得过度拟合。这样得到的模型就不能够很好地概括新数据,不能够很好地概括新数据就不能够很好地执行分类和预测任务。模型过度拟合的根本原因是训练的数据集中有噪音且被模型记住并反映到了权重上。也就是说训练数据集中那些不相关的信息,甚至是错误地信息,被模型记住了,并拟合到模型函数上,且拟合得非常好,很接近训练数据集。这些“噪音”就是汤里掉进了一粒老鼠屎,搅臭一煲汤。
那我们有什么办法可以提前发现模型是否存在过度拟合呢?答案是有的。低误差率和高方差都是存在过度拟合的信号。当我们的模型出现低误差率或存在高方差时,我们就要考虑模型是否存在过度拟合的问题。
如何避免模型过度拟合呢?
为了避免模型过度拟合,通常不会把整个数据集都给模型去训练,而是留出一部分数据集作为测试集来检查模型是否存在过度拟合。 过度拟合的模型对新的(没有见过的)数据的分类或预测的准确性是很差的。利用这一点,我们就可以用测试集来检验模型是否存在过度拟合的情况。如果模型对训练数据集已能够达到比较低的误差率,而对测试集的数据去表现高误差率,那么模型可能存在过度拟合的问题。
过度训练也可能导致模型过度拟合,如果是这种情况,可以早一些结束模型的训练来避免模型过度拟合。那么具体该什么时候结束训练呢?停止训练过早或排除太多重要的数据都会使模型适得其反。当训练时间太短或训练数据相关性不够(即数据对模型来说不够重要,用不重要的数据来训练会导致输入与输出的相关性变得很差,就是生搬硬套的东西),就会发生欠拟合。
另外,如果模型太复杂也会导致过度拟合的问题,要解决这个问题可以通过排除那些不太相关或相关性很低的输入来解决,简单来说就是排除不重要的数据,以此来减少模型的复杂性。
欠拟合与过度拟合一样对于未见的数据的泛化都很差。前面我们说过过度拟合的预测表现出低误差率、高方差,而在欠拟合的预测则表现出高偏差、低方差。随着模型的学习的持续进行,它的偏差就慢慢减小,当模型变得过度拟合,方差就会随之变高。模型的训练会从欠拟合转移到过度拟合,我们必须权衡偏差与方差之间的取舍,即我们的目的是要找到模型在欠拟合与过度拟合之间那个最佳的点,在这个点上偏差方差都是可以接受的。这样的模型在数据集就建立某种主导趋势,也因此模型得以应用到更广泛的新数据上,即泛化能力更好。
怎样做才能够了解模型的准确性呢?怎样才能知道模型拟合是否适度?K-fold交叉验证是目前用来评价模型准确性最多的方法之一。具体的做法就是把训练数据集分成K个大小相等的子集,这些子集在这个方法中被称为fold,拿出一个fold来扮演测试集,也叫抵抗组(holdout set)或验证集(validation set),剩下的子集都用来训练模型,重复这个过程,都到每个子集都扮演过一次测试集。每一轮都会得到一个分数,当进行完所有轮后,对分数进行平均,用这个平均分来评价整个模型的性能。
我们再来回顾一下如何避免过度拟合的问题?现实世界很多问题都不是简单的线性关系,虽然我们常常使用线性模型来帮助我们避免过度拟合的问题。总结一下解决拟合问题的方法大概有以下这些:
-
提前停止训练:这样做的原因正如前已经提到过那样,因为训练数据中有“噪音”,提前停止,就可以避免模型学习了太多“噪音”数据,如果停止适当,还有可能直接避免了噪音数据被模型学习到。不过要注意,想法虽好,但是如果停止太早导致模型训练不足,造成欠拟合,停止太晚,导致模型学习了太多噪音数据,造成过度拟合,所以这种方法,我们就要在欠拟合和过度拟合之间做出权衡,以期在找到一个处于两者之间的最佳的权衡点,这个点就是使用这种方式解决拟合问题要找的。
-
使用更多的数据来训练模型: 这一点无可质疑,只要保证训练数据是非常干净,相关的,没有什么噪音的,否则只会让模型变得复杂,甚至导致过度拟合。
-
数据扩充:训练数据是干净又相关的,这当然是最好的,其实适时加入一些噪音数据,据说可以让模型更加稳定,这样的操作要有所节制,否则还是出现过拟合的问题。
-
特征选择:在构建一个模型时,会有很多特征供我们选择,用来预测特定的结果,很多时候这些特征有很多都是彼此重复的,识别并选择出最重要的那么特征,排除无关的,冗余的特征是很重要的。这听起来是不是很像在做降维的事?不过它们是不一样的,前者是要把无关的,重复的排除掉,后者则是为了减少特征的数量,但是这些特征是相关的,不重复的。但是两者的目的都是为了简化模型,使其在训练数据集建立起主导趋势。
-
正则化:当模型过于复杂导致出现了过度拟合,我们可以通过减少特征的数量来解决。如果我们不知道哪些特征应该去掉,那些应该留下?那么下正则化这个工具就派上用场了。具体的做法:正则化对系数较大的输入参数施加惩罚,这将会限制模型中的方差。正则化方法有很多,如套索正规化(lasso regularization)、岭回归(ridge regression)、dropout。虽然有这么多正则化方法,但是它们都用于识别和减少数据中的噪声。
-
集成方法:一种机器学习技术,通过组合多个模型的预测结果来提高预测准确性和稳定性。集成学习方法由一组分级器组成。集成学习方法的例子有:
决策树——它们的预测是聚合在一起决定最优结果的。
袋装法与推升法—— 袋装法它会从训练数据集中随机选择一个样本集合。每个数据点被选中的机会是相等的,都可以被重复选择。在选择出若干个这样的样本集合后,模型用这些样本集合单独训练。结果取决于任务的类型,如果任务是回归问题,那么就取这些预测值的平均值,产生一个更加准确的预估值,如果是分类问题,就取这些预测值的大多数。
相关文章:
什么是过度拟合和欠拟合?
在机器学习中,当一个算法的预测非常接近或者直接等于它的训练数据,导致不能够准确预测除了训练数据以外的数据,我们把这种情况称为过度拟合。算法能够非常接近甚至就是训练的数据,是个非常好的事,但是它不能准确预测除…...
DotnetSpider实现网络爬虫
1. 使用DotnetSpider框架 DotnetSpider是一个开源的、轻量、灵活、高性能、跨平台的分布式网络爬虫框架,适用于.NET平台。它可以帮助开发者快速实现网页数据的抓取功能。 1.1 安装DotnetSpider NuGet包 首先,你需要在你的.NET项目中安装DotnetSpider NuGet包。你可以通过…...

锐捷WLAN产品出货量排名第一!
摘要:2024年Q3锐捷WLAN产品出货量排名第一!锐捷多形态Wi-Fi 7产品重磅出击! 近日, IT市场研究和咨询公司IDC发布《IDC中国企业级WLAN市场跟踪报告,2024年Q3》。报告显示,锐捷WLAN产品在2024年Q3出货量位居行业首位。至此,锐捷WLAN产品在2024年的Q1、Q2、Q3均实现了市场出货量的…...

win32汇编环境下,对话框程序中生成listview列表控件,点击标题栏自动排序的示例
;把代码抄进radasm里面,可以直接编译运行。重要的地方加了备注。 ;这个有点复杂,重要的地方加了备注 ;以下是ASM文件 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>…...

自动化文档处理:Azure AI Document Intelligence
Azure AI Document Intelligence支持多种文件格式,包括PDF、JPEG、PNG等。其核心功能是将这些文档按页进行内容提取,并转化为LangChain文档。其默认输出格式是Markdown,这使得文档可以通过MarkdownHeaderTextSplitter进行语义分片。您也可以使…...

【Maven】Maven打包机制详解
Maven打包的类型? 以下是几种常见的打包形式: 1、jar (Java Archive) 用途:用于包含 Java 类文件和其他资源(如属性文件、配置文件等)的库项目。特点: 可以被其他项目作为依赖引用。适合创建独立的应用程…...
Python 向量检索库Faiss使用
Faiss(Facebook AI Similarity Search)是一个由 Facebook AI Research 开发的库,它专门用于高效地搜索和聚类大量向量。Faiss 能够在几毫秒内搜索数亿个向量,这使得它非常适合于实现近似最近邻(ANN)搜索&am…...
pd.Timestamp接收的参数类型
pd.Timestamp() 是 Pandas 中用于表示单个日期时间的函数,它可以接受多种类型的参数。以下是 pd.Timestamp() 可以接受的主要参数类型,并举例说明: 1. 日期时间字符串(Date/Time String) pd.Timestamp() 可以接收标准…...

FOC控制原理-ADC采样时机
0、文章推荐 SimpleFOC移植STM32(五)—— 电流采样及其变换_极对数对电流采样的影响-CSDN博客 FOC 电流采样方案对比(单电阻/双电阻/三电阻) - 知乎 (zhihu.com) FOC中的三种电流采样方式,你真的会选择吗?…...

运行python程序报错 undefined symbol: ffi_type_uint32 的参考解决方法
文章目录 写在前面一、问题描述二、解决方法参考链接 写在前面 自己的测试环境: Ubuntu20.04 ROS-Noetic 一、问题描述 运行 python 程序出现如下问题: Traceback (most recent call last):File "<string>", line 1, in <module&…...
怎么使用阿里的docker国产镜像源
要使用 阿里云 Docker 镜像加速器,你需要先注册并获取加速器的 URL,然后将其配置到 Docker 的配置文件中。下面是具体的使用步骤: 步骤 1:登录阿里云控制台并获取镜像加速器 URL 登录阿里云控制台 打开 阿里云官网,并…...

cloudns二级免费域名python更新ipv6 dns记录
没找到api,托管到cloudflare也不行。就只能写代码了(只写了更新和添加单条ipv6记录) 需要修改的地方 请求头的cookies填自己的 data里的zone填自己的 import requests from lxml import etree host#子域名 cookies填自己的 zone自己域名的 …...
nginx中try_files $uri $uri index.html的作用 和 $uri的含义
try_files $uri $uri/ /index.html; 这句话是Nginx服务器配置中的一条指令,用于设置处理请求的策略。 $uri:这是Nginx内置的一个变量,代表当前请求的URI,不包括参数部分。例如,如果请求的URL是http://example.com/user…...

高转化的Facebook广告文案的秘诀
Facebook 广告文案是制作有效 Facebook 广告的关键方面。它侧重于伴随广告视觉元素的文本内容。今天我们的博客将深入探讨成功的 Facebook 广告文案的秘密! 一、广告文案怎么写? 正文:这是帖子的正文,出现在您姓名的正下方。它可…...
CentOS修改docker镜像存储位置并进行数据迁移
在 CentOS 上修改 Docker 镜像存储位置并进行数据迁移是一个常见的需求。以下是一个详细的步骤指南,帮助你完成这个任务。 1. 停止 Docker 服务 首先,确保 Docker 服务已经停止,以避免在迁移过程中出现数据损坏。 sudo systemctl stop doc…...
ES7+ React/Redux/GraphQL/React-Native snippets 使用指南
VS Code React Snippets 使用指南 目录 简介基础方法React 相关React Native 相关Redux 相关PropTypes 相关控制台相关React 组件相关 简介 ES7 React/Redux/GraphQL/React-Native snippets 是一个用于 VS Code 的代码片段插件,它提供了大量用于 React 开发的代…...

【ARM】PK51关于内存模式的解析与区别
1、 文档目标 解决PK51中三种内存模式所对应的不同场景选择。 2、 问题场景 在PK51中有三种内存模型可以进行选择,但是这三种内存模型的具体作用以及应用场景大部分工程师都不太清楚。 图2-1 3、软硬件环境 1)、软件版本:Keil PK51 9.60 …...

Linux高级--2.4.5 靠协议头保证传输的 MAC/IP/TCP/UDP---协议帧格式
任何网络协议,都必须要用包头里面设置写特殊字段来标识自己,传输越复杂,越稳定,越高性能的协议,包头越复杂。我们理解这些包头中每个字段的作用要站在它们解决什么问题的角度来理解。因为没人愿意让包头那么复杂。 本…...
【每日学点鸿蒙知识】输入法按压效果、web组件回弹、H5回退问题、Flex限制两行、密码输入自定义样式
1、HarmonyOS 输入法键盘按键的按压效果? 可以使用Button组件通过stateEffect属性设置按钮按下时是否开启按压态显示效果。参考链接如下: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-button-V5https:…...
制造BOM的应用思考
一、制造BOM的作用 制造BOM(Manufacturing BOM,MBOM)在制造过程中的应用非常广泛,具体包括以下几个方面: 1. 生产计划和调度: 制造BOM提供了生产过程中所需的所有输入及输出间的关系,包括材料、部品的数量、结构以及制程等信息。这些信息是生产拉动物料需求计划以及成本…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...