交叉验证的重要性不容忽视!
小伙伴们有没有觉得学习科技周边很有意思?有意思就对了!今天就给大家带来《交叉验证的重要性不容忽视!》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!
为了不改变原始意思,需要重新表达的内容是:首先需要弄清楚为什么需要进行交叉验证?
交叉验证是机器学习和统计学中常用的一种技术,用于评估预测模型的性能和泛化能力,特别是在数据有限或评估模型对新的未见数据的泛化能力时,交叉验证非常有价值。
在哪些情况下会使用交叉验证呢?
- 模型性能评估:交叉验证有助于估计模型在未见数据上的表现。通过在多个数据子集上训练和评估模型,交叉验证提供了比单一训练-测试分割更稳健的模型性能估计。
- 数据效率:在数据有限的情况下,交叉验证充分利用了所有可用样本,通过同时使用所有数据进行训练和评估,提供了对模型性能更可靠的评估。
- 超参数调优:交叉验证通常用于选择模型的最佳超参数。通过在不同数据子集上使用不同的超参数设置来评估模型的性能,可以确定在整体性能上表现最好的超参数值。
- 检测过拟合:交叉验证有助于检测模型是否对训练数据过拟合。如果模型在训练集上的表现明显优于验证集,可能表明存在过拟合的情况,需要进行调整,如正则化或选择更简单的模型。
- 泛化能力评估:交叉验证提供了对模型对未见数据的泛化能力的评估。通过在多个数据分割上评估模型,它有助于评估模型捕捉数据中的潜在模式的能力,而不依赖于随机性或特定的训练-测试分割。
交叉验证的大致思想可如图5折交叉所示,在每次迭代中,新模型在四个子数据集上训练,并在最后一个保留的子数据集上进行测试,确保所有数据得到利用。通过平均分数及标准差等指标,提供了对模型性能的真实度量
一切还得从K折交叉开始。
KFold
在Sklearn中已经集成了K折交叉验证,这里以7折为例:
from sklearn.datasets import make_regressionfrom sklearn.model_selection import KFoldx, y = make_regression(n_samples=100)# Init the splittercross_validation = KFold(n_splits=7)
还有一个常用操作是在执行拆分前进行Shuffle,通过破坏样本的原始顺序进一步最小化了过度拟合的风险:
cross_validation = KFold(n_splits=7, shuffle=True)
这样,一个简单的k折交叉验证就能够完成了,请务必查看源代码!请务必查看源代码!请务必查看源代码!
StratifiedKFold
StratifiedKFold是专门为分类问题而设计。
在有的分类问题中,即使将数据分成多个集合,目标分布也应该保持不变。比如大多数情况下,具有30到70类别比例的二元目标在训练集和测试集中仍应保持相同的比例,在普通的KFold中,这个规则被打破了,因为在拆分之前对数据进行shuffle时,类别比例将无法保持。
为了解决这个问题,在Sklearn中使用了另一个专门用于分类的拆分器类——StratifiedKFold:
from sklearn.datasets import make_classificationfrom sklearn.model_selection import StratifiedKFoldx, y = make_classification(n_samples=100, n_classes=2)cross_validation = StratifiedKFold(n_splits=7, shuffle=True, random_state=1121218)
尽管与KFold看起来相似,但现在在所有的split和迭代中,类别比例保持一致
ShuffleSplit
有时只需多次重复进行训练/测试集分割的过程,这种方式与交叉验证非常相似
在逻辑上来说,通过使用不同的随机种子生成多个训练/测试集,应该在足够多的迭代中,类似于一个稳健的交叉验证过程
Scikit-learn库中也提供了相应的接口:
from sklearn.model_selection import ShuffleSplitcross_validation = ShuffleSplit(n_splits=7, train_size=0.75, test_size=0.25)
TimeSeriesSplit
当数据集为时间序列时,不能使用传统的交叉验证,这将完全打乱顺序,为了解决这个问题,参考Sklearn提供了另一个拆分器——TimeSeriesSplit,
from sklearn.model_selection import TimeSeriesSplitcross_validation = TimeSeriesSplit(n_splits=7)
在验证集始终位于训练集的索引之后的情况下,我们可以看到图形。这是由于索引是日期,这意味着我们不会意外地在未来的日期上进行时间序列模型的训练,并对之前的日期进行预测
非独立同分布(non-IID)数据的交叉验证
以上方法是针对独立同分布数据集进行处理的,即生成数据的过程不会受到其他样本的影响
然而,在某些情况下,数据并不满足独立同分布(IID)的条件,即一些样本之间存在依赖关系。这种情况在Kaggle竞赛中也有出现,比如Google Brain Ventilator Pressure竞赛。该数据记录了人工肺在数千个呼吸过程中(吸入和呼出)的气压值,并且对每次呼吸的每个时刻进行了记录。每个呼吸过程大约有80行数据,这些行之间是相互关联的。在这种情况下,传统的交叉验证方法无法使用,因为数据的划分可能会“刚好发生在一个呼吸过程的中间”
这可以被理解为需要对这些数据进行“分组”,因为组内数据是有关联的。举个例子,当从多个患者收集医疗数据时,每个患者都有多个样本。然而,这些数据很可能会受到患者个体差异的影响,因此也需要进行分组
往往我们希望在一个特定组别上训练的模型是否能够很好地泛化到其他未见过的组别,所以在进行交差验证时给这些组别数据打上“tag”,告诉他们如何区分别瞎拆。
在Sklearn中提供了若干接口处理这些情况:
- GroupKFold
- StratifiedGroupKFold
- LeaveOneGroupOut
- LeavePGroupsOut
- GroupShuffleSplit
强烈建议搞清楚交叉验证的思想,以及如何实现,搭配看Sklearn源码是一个肥肠不错的方式。此外,需要对自己的数据集有着清晰的定义,数据预处理真的很重要。
终于介绍完啦!小伙伴们,这篇关于《交叉验证的重要性不容忽视!》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布科技周边相关知识,快来关注吧!

- 上一篇
- Windows 11的大小已经增加,现在比Windows 10大了近10%

- 下一篇
- 2023基于产教融合的未来卓越工程师培养论坛在XbotPark机器人基地总部隆重举行
-
- 科技周边 · 人工智能 | 29分钟前 |
- 用Moonshot写小说,人物生成实战教程
- 409浏览 收藏
-
- 科技周边 · 人工智能 | 38分钟前 |
- 豆包AI轻松连接Python数据库
- 115浏览 收藏
-
- 科技周边 · 人工智能 | 43分钟前 |
- 各国证件照AI生成参数设置详解
- 285浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- 豆包视频合并教程:多片段剪辑技巧全解析
- 477浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- 宁德时代2025Q2财报:收入1788亿增7.27%
- 298浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- 豆包AI生成脚本,运维技巧必学
- 427浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 511次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 498次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- 千音漫语
- 千音漫语,北京熠声科技倾力打造的智能声音创作助手,提供AI配音、音视频翻译、语音识别、声音克隆等强大功能,助力有声书制作、视频创作、教育培训等领域,官网:https://qianyin123.com
- 112次使用
-
- MiniWork
- MiniWork是一款智能高效的AI工具平台,专为提升工作与学习效率而设计。整合文本处理、图像生成、营销策划及运营管理等多元AI工具,提供精准智能解决方案,让复杂工作简单高效。
- 105次使用
-
- NoCode
- NoCode (nocode.cn)是领先的无代码开发平台,通过拖放、AI对话等简单操作,助您快速创建各类应用、网站与管理系统。无需编程知识,轻松实现个人生活、商业经营、企业管理多场景需求,大幅降低开发门槛,高效低成本。
- 125次使用
-
- 达医智影
- 达医智影,阿里巴巴达摩院医疗AI创新力作。全球率先利用平扫CT实现“一扫多筛”,仅一次CT扫描即可高效识别多种癌症、急症及慢病,为疾病早期发现提供智能、精准的AI影像早筛解决方案。
- 116次使用
-
- 智慧芽Eureka
- 智慧芽Eureka,专为技术创新打造的AI Agent平台。深度理解专利、研发、生物医药、材料、科创等复杂场景,通过专家级AI Agent精准执行任务,智能化工作流解放70%生产力,让您专注核心创新。
- 121次使用
-
- GPT-4王者加冕!读图做题性能炸天,凭自己就能考上斯坦福
- 2023-04-25 501浏览
-
- 单块V100训练模型提速72倍!尤洋团队新成果获AAAI 2023杰出论文奖
- 2023-04-24 501浏览
-
- ChatGPT 真的会接管世界吗?
- 2023-04-13 501浏览
-
- VR的终极形态是「假眼」?Neuralink前联合创始人掏出新产品:科学之眼!
- 2023-04-30 501浏览
-
- 实现实时制造可视性优势有哪些?
- 2023-04-15 501浏览