机器学习——过拟合

news2024/11/27 10:41:52

一、过拟合得表现

模型在训练过程中,除了会出现过拟合现象,还有可能出现欠拟合的情况。相比而言,后者通常发生在建模前期,只要做好特征工程一般可以解决模型欠拟合问题。下图描述了模型在训练数据集上的三种情况:
在这里插入图片描述
其中曲线代表了模型的拟合结果,可以看出过拟合的曲线几乎对每个训练样本的拟合值都准确无误,展现了低偏差特点;另外过拟合的曲线形式上更复杂,波动性更大,预测的结果具有高方差特点。相反,欠拟合的曲线呈现低方差、高偏差的结果。

理论上模型的偏差和方差呈负相关性,既模型越复杂,偏差越小,方差越大。通常“鲁棒性”强的模型能在偏差和方差中学习到一个较好的平衡点。

二、过拟合的原因

1、数据特征的质量
这里的数据质量并非指数据缺失严重或数值失真,而是指训练集和测试集的特征分布不一致,或者说并非来源于同一分布。试想用数据集A训练得到的模型去预测差异很大的数据集B,结果肯定不尽人意。

其次在特征工程阶段,“暴力”构造的特征中会包含过多训练集的噪声信息,这类只适合于训练集的冗余特征会降低模型的泛化能力。

2、模型的问题
模型结构的超参数设置也有可能造成过拟合现象。以决策树模型为例,令树的深度越大、叶子节点数越少,模型就越复杂,对训练集的数据分类更精细,会更容易导致模型过拟合。

大部分ML模型的学习过程中都运用了类似梯度下降法的迭代优化算法,过多的迭代次数会出现过度训练(Overtraining),让模型最终的参数过度适应训练集,加重过拟合。

三、“缓解” 过拟合的措施

由于数据噪声的存在,过拟合问题无法彻底解决,但是可以通过以下方法来缓解模型过拟合。

1、特征选择
特征选择通过对大量特征作进一步筛选,排除无关特征和冗余特征。对于广义线性模型而言,模型复杂度随着特征特征维度的降低而降低,可以有效缓解过拟合问题。

通常有两种方式做特征选择:
(1)指标筛选:利用信息熵、Pearson相关系数、卡方检验统计量等指标计算特征不目标发量间的相关程度对所有特征进行筛选,但这种方式没有考虑到特征之间的关联作用,可能把有用的关联特征踢掉。
(2)正则化(Regularization):在模型损失函数中加入合适的惩罚项,常见的惩罚项有L1正则化和L2正则化(既L1和L2范数)。其中L1正则化有劣于生成一个稀疏权值矩阵,进而可以用于特征选择,可以参考Lasso模型。

2、模型融合
不同类型的模型具有不同的特点,所以结合各种模型的预测结果也能有效降低过拟合的风险,提升预测精度。一般对模型融合有两种方式:加权平均法和Stacking,其中加权平均法比较易于理解,就是根据各模型的线下得分赋予一个权重,最终根据各自权重对预测结果进行加权平均。

而Stacking号称各类数据比赛的冲分“杀器”,主要思想是训练模型来学习使用底层学习器的预测结果,下图是一个5折stacking中基模型在所有数据集上生成预测结果的过程,次学习器会基于模型的预测结果进行再训练,单个基模型生成预测结果的过程是:
在这里插入图片描述

但是当基模型较复杂时,Stacking的训练代价会很高,实际应用中需要根据情况而定。

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

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

相关文章

【深度学习实战(11)】搭建训练框架之dataset,dataloader

一、dataset和dataloader要点说明 在我们搭建自己的网络时,往往需要定义自己的dataset和dataloader,将图像和标签数据送入模型。 (1)在我们定义dataset时,需要继承torch.utils.data.dataset,再重写三个方法…

文本高效拆分内容,根据空行高效拆分文本内容,文本文档管理更轻松

文本文档是我们日常生活和工作中不可或缺的一部分。然而,随着文本内容的不断增加,如何高效、有序地管理这些文档成为了一个挑战。传统的文本编辑工具往往无法满足我们对于文档整理的需求,而手动整理又费时费力。现在,我们为您带来…

Java实战:确定给定日期是一年的第几天

本次实战,我们将探讨如何确定给定日期是一年中的第几天。为此,我们提供了三种不同的方法,每种方法都有其独特的实现方式和适用场景。 方法一:不使用数组 这种方法通过Scanner类获取用户的输入,包括年份、月份和日期。…

从虚拟化走向云原生,红帽OpenShift“一手托两家”

汽车行业已经迈入“软件定义汽车”的新时代。吉利汽车很清醒地意识到,只有通过云原生技术和数字化转型,才能巩固其作为中国领先汽车制造商的地位。 和很多传统企业一样,吉利汽车在走向云原生的过程中也经历了稳态业务与敏态业务并存带来的前所…

WEB攻防-PHP特性-函数缺陷对比

目录 和 MD5函数 intval ​strpos in_array preg_match str_replace 和 使用 时,如果两个比较的操作数类型不同,PHP 会尝试将它们转换为相同的类型,然后再进行比较。 使用 进行比较时,不仅比较值,还比较变量…

网贷大数据黑名单要多久才能变正常?

网贷大数据黑名单是指个人在网贷平台申请贷款时,因为信用记录较差而被列入黑名单,无法获得贷款或者贷款额度受到限制的情况。网贷大数据黑名单的具体时间因个人信用状况、所属平台政策以及银行审核标准不同而异,一般来说,需要一定…

FebHost:注册国外域名优先考虑可用性还是成本?

在选择域名后缀时,应该优先考虑可用性还是成本?这主要取决于您的具体情况。这两个因素都很重要,您应根据自己的需求进行权衡。 可用性方面:热门的域名后缀,如.com和.net,通常需求量较大,因此可…

数字安全实操AG网址漏洞扫描原理与技术手段分析

在数字化世界的大舞台上,网络安全如同守护者一般,默默保卫着我们的虚拟疆界。当我们在享受互联网带来的便利时,一场无形的战争正在上演。黑客们利用各种手段试图攻破网站的安全防线,而防守方则依靠先进的技术和策略来抵御入侵。其…

安卓studio插件开发(一)本地搭建工程

下载idea 社区版本 建立IDE Plugin工程 点击create就行,新建立的工程长这样 比较重要的文件 build.gradle:配置工程的参数 plugin.xml:设置插件的Action位置 build.gradle.kts内容如下: plugins {id("java")id(&quo…

【VTKExamples::Modelling】第四期 MarchingSquares

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例MarchingSquares,并解析接口vtkMarchingSquares,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U…

c# winform 控件皮肤

控件皮肤下载: https://download.csdn.net/download/m0_46973223/89225992 步骤: 第一步 将IrisSkin4.dll文件放在debug文件下,选一个或者多个后缀名为.ssk文件(各个皮肤文件)放在debug文件下。 第二步 解决方案资…

【算法刷题】手撕LRU算法(原理、图解、核心思想)

文章目录 1.LRU算法1.1相关概念1.2图解举例1.3基于HashMap和双向链表实现1.3.1核心思想1.3.2代码解读1.3.3全部代码 1.LRU算法 1.1相关概念 LRU(Least Recently Used,最近最久未使用算法): 定义:根据页面调入内存后的…

nvm管理多个node版本,快速来回切换node版本

前言 文章基于 windows环境 使用nvm安装多版本nodejs。 最近公司有的项目比较老需要降低node版本才能运行,由于来回进行卸载不同版本的node比较麻烦;所以需要使用node工程多版本管理,后面自己就简单捯饬了一下nvm来管理node,顺便…

【资源分享】Latex2024安装教程

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验,帮助大家尽早适应研究生生活,尽快了解科研的本质。祝一切顺利!—…

路由重分布的概念与配置

路由重分布的概念 l 路由重分布是指连接不同路由域(自治系统)的边界路由器,它在路由协议之间交换和通告路由信息 从一种协议(含静态/直连路由)到另一种协议 同一种协议的多个实例 路由重分布的背景 网络出口位置…

宝宝洗衣机买什么样的好?诚意推荐四款实力超群的婴儿洗衣机

近几年家用洗衣机标准容积的大大增加,从5Kg、6Kg升级到9Kg、10Kg。大容量洗衣机满足了家庭中清洗大件衣物、床上用品的需求。但由于普通大型洗衣机所洗衣物混杂,很多时候由于宝宝小件衣物数量不多,却也并不适合放在一起扔进大型洗衣机中清洗。…

lesson05:C++内存管理

1.内存分布 2.c中动态内存管理 3.operator new和operator delete函数 4.new和delete实现原理 1.内存分布 1.1常见的内存分布 1.2相关问题 答案:CCCAA AAADAB 我们讲以下易错的部分: 7.数组char2是在栈上开的空间,然后将"a…

golang学习笔记(net/http库基本使用)

关于net/http库 我们先看看标准库net/http如何处理一个请求。 import ("fmt""log""net/http" )var count 0func main() {http.HandleFunc("/", handler)http.HandleFunc("/count", counter)log.Fatal(http.ListenAndServ…

STM32_舵机的实战

一、配置相应的管脚 二、写代码

【OceanBase诊断调优】——hpet(高精度时钟源)引起的CPU高问题排查

最近总结一些诊断OCeanBase的一些经验,出一个【OceanBase诊断调优】专题出来,也欢迎大家贡献自己的诊断OceanBase的方法。 1. 前言 昨天在问答区帮忙排查一个用户CPU高的问题,帖子链接:《刚刚新安装的OceanBase集群,…