0

0

交叉验证的重要性不容忽视!

王林

王林

发布时间:2023-11-06 20:17:19

|

1964人浏览过

|

来源于51CTO.COM

转载

为了不改变原始意思,需要重新表达的内容是:首先需要弄清楚为什么需要进行交叉验证?

交叉验证是机器学习和统计学中常用的一种技术,用于评估预测模型的性能和泛化能力,特别是在数据有限或评估模型对新的未见数据的泛化能力时,交叉验证非常有价值。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

交叉验证的重要性不容忽视!

在哪些情况下会使用交叉验证呢?

  • 模型性能评估:交叉验证有助于估计模型在未见数据上的表现。通过在多个数据子集上训练和评估模型,交叉验证提供了比单一训练-测试分割更稳健的模型性能估计。
  • 数据效率:在数据有限的情况下,交叉验证充分利用了所有可用样本,通过同时使用所有数据进行训练和评估,提供了对模型性能更可靠的评估。
  • 超参数调优:交叉验证通常用于选择模型的最佳超参数。通过在不同数据子集上使用不同的超参数设置来评估模型的性能,可以确定在整体性能上表现最好的超参数值。
  • 检测过拟合:交叉验证有助于检测模型是否对训练数据过拟合。如果模型在训练集上的表现明显优于验证集,可能表明存在过拟合的情况,需要进行调整,如正则化或选择更简单的模型。
  • 泛化能力评估:交叉验证提供了对模型对未见数据的泛化能力的评估。通过在多个数据分割上评估模型,它有助于评估模型捕捉数据中的潜在模式的能力,而不依赖于随机性或特定的训练-测试分割。

交叉验证的大致思想可如图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

有时只需多次重复进行训练/测试集分割的过程,这种方式与交叉验证非常相似

LongShot
LongShot

LongShot 是一款 AI 写作助手,可帮助您生成针对搜索引擎优化的内容博客。

下载

在逻辑上来说,通过使用不同的随机种子生成多个训练/测试集,应该在足够多的迭代中,类似于一个稳健的交叉验证过程

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源码是一个肥肠不错的方式。此外,需要对自己的数据集有着清晰的定义,数据预处理真的很重要。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

990

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

50

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

232

2025.12.29

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

65

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

45

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

40

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

41

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

232

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

9

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 7.8万人学习

CSS3 教程
CSS3 教程

共18课时 | 4.2万人学习

Rust 教程
Rust 教程

共28课时 | 4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号