详解交叉验证中【KFold】【Stratified-KFold】【StratifiedShuffleSplit】的区别

news2024/11/23 19:48:33

       交叉验证是一种统计分析方法,它的目的是通过在同一数据集上重复并分割训练和测试数据,来评估机器学习模型的性能。以下是​这三种交叉验证方法的区别:

  1. KFold(K-折叠)

    • 在KFold交叉验证中,原始数据集被分为K个子集。
    • 每次,其中的一个子集被用作测试集,而其余的K-1个子集合并后被用作训练集。
    • 这个过程重复进行K次,每次选择不同的子集作为测试集。
    • KFold不保证每个折叠的类分布与完整数据集中的分布相同。
  2. Stratified-KFold(分层K-折叠)

    • Stratified-KFold是KFold的变体,它会返回分层的折叠:每个折叠中的标签分布都尽可能地与完整数据集中的标签分布相匹配。
    • 这种方法特别适用于类分布不均衡的情况,确保每个折叠都有代表性的类比例。
    • 就像KFold一样,每个折叠轮流被用作测试集,其他折叠用作训练集。
  3. StratifiedShuffleSplit(分层随机分割)

    • StratifiedShuffleSplit是另一种分层抽样技术,它也确保了每次分割中都能维持原始数据集中各个类的比例。
    • 与Stratified-KFold不同,StratifiedShuffleSplit将数据集随机打乱,然后切分为训练集和测试集。这个过程会根据需要重复多次。
    • 这种方法提供了更多的随机性,并可以通过指定测试集的大小来控制训练集和测试集的比例。

接下来我们用代码来解释他们的区别:

一. Kfold

先来创建数据集:

splits = 5
tx = range(10)
ty = [0] * 5 + [1] * 5

再来导入相应的模块:

from sklearn.model_selection import KFold
from sklearn.model_selection import StratifiedKFold
from sklearn.model_selection import StratifiedShuffleSplit, 
from sklearn import datasets

先实例化一个KFold,shuffle = Flase的情况:

Kfold = KFold (n_splits=splits, shuffle=False)

再来看看Kfold是如何来做交叉验证的:

print("Fold")
for train_index, test_index in Kfold.split(tx, ty):
    print("TRAIN:", train_index, "TEST:", test_index)

输出结果为:

可以看到,Kfold的测试集是按照顺序不重复的每次取出两个,一共做5次训练。

当shuffle = true时再来运行一次代码:

Kfold = KFold (n_splits=splits, shuffle=False)

print("Fold")
for train_index, test_index in Kfold.split(tx, ty):
    print("TRAIN:", train_index, "TEST:", test_index)

可以看到Kfold的测试集是无规则不重复的每次取出两个,一共做5次训练。

二. Stratified-KFold

我们用相同的数据集,先来看看shuffle = False的情况:

stratKfold = StratifiedKFold(n_splits=splits, shuffle=False)
print("stratKFold")
for train_index, test_index in stratKfold.split(tx, ty):
    print("TRAIN:", train_index, "TEST:", test_index)

可以看到测试集被分层了。因为我们是二分类数据,所以每次都是从0类中抽一个,1类中抽一个,而且是按顺序抽取,即从0类的第一个数据,1类的第一个数据组合形成一个测试集。数据是不重复的。

先来看看shuffle = true的情况:

可以看到测试集依然被分层抽取,但不是按照顺序抽取,且依旧保证数据是不重复的。

三. StratifiedShuffleSplit

先来实例化一个StratifiedShuffleSplit并分隔数据集:

shufflesplit = StratifiedShuffleSplit(n_splits=splits, random_state=42, test_size=2)
for train_index, test_index in shufflesplit.split(tx, ty):
    print("TRAIN:", train_index, "TEST:", test_index)

可以看到测试集被分层了,同时我们可以根据test_size选择测试集的比例,并且数据是可以重复的,可以看到测试集3出现了2次。但我们把test_size设置为0.3时:

可以看到测试集有3个样本,多个数据发生了重复。

总结一下:Kfold交叉验证不考虑样本标签是否均衡的问题,仅是单纯的将样本分为K份,1份是测试,k-1份做训练;Stratified-KFold会根据样本标签分类,让训练集和测试集都保持原有样本的标签分类情况,shuffle = False or true决定的是分隔是顺序分隔还是随机分隔,同时数据是不可重复利用的;StratifiedShuffleSplit可以对数据进行重复利用,也只有StratifiedShuffleSplit可以控制测试集和训练集的比例。

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

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

相关文章

思杰Citrix将全面退出中国市场,是真的吗?

引言:国内虚拟化市场依然有潜力,转换思路继续开发,这个可能性最大。 【科技明说 | 热点关注】 业内讨论说,虚拟化大佬思杰Citrix将全面退出国内市场,不知道消息是否属实? 另外假如消息属实的话…

串口调试助手和网络调试助手使用总结

串口调试助手和网络调试助手是用的比较多的两款工具。 先来看看串口调试助手。 本人用的比较多的串口助手是正点原子的XCOM以及大虾丁丁的SSCOM 首先,解决下串口收发时的统计问题。 注意:这里统计的单位是字节。 串口工具发送时,就只统计你…

05-MySQL-进阶-存储引擎索引SQL优化

一、存储引擎 涉及资料 链接:https://pan.baidu.com/s/1M1oXN_pH3RGADx90ZFbfLQ?pwdCoke 提取码:Coke ①:MySQL体系结构 1.连接层 最上层是一些客户端和链接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于 T…

掌握未来:PureBasic for Mac引领BASIC语言编辑器的新潮流

PureBasic for Mac是一种创新的BASIC语言编辑器,它赋予了编程更多的可能性。在这个充满机遇的时代,掌握编程就等于掌握了一种强大的工具,能够更好地理解和塑造世界。而PureBasic for Mac,正是这样一个让你轻松上手,高效…

超图Web许可无法访问

1. 报错 docker 容器(7f6f88XXXXX)找不到许可,查看日志,发现报错日志 2. 原因: 查看管理页面,发现许可被172.17.0.8占用 根据容器id寻找容器,找不到,猜测可能是以前删除过的容器,占用了名额 解决…

Flink -- 并行度

1、并行度: 对于一个Flink任务是有Source、Transformation和Sink等任务组成,一个任务由多个并行实例来执行,一个任务的并行实例数目被称为该任务的并行度。 2、TaskManager和Solt Flink是一个分布式流处理框架,它基于TaskManager…

高效自学-网络安全(黑客技术)

一、网络安全应该怎么学? 1.计算机基础需要过关 这一步跟网安关系暂时不大,是进入it行业每个人都必须掌握的基础能力。 计算机网络计算机操作系统算法与数据架构数据库 Tips:不用非要钻研至非常精通,可以与学习其他课程同步进行。 2.渗透技…

定时删除指定目录下的文件,文件名按时间有规律,定时删除过期文件

#!/bin/bash# 指定目录 directory"path/to/directory"# 当前日期 current_date$(date %Y-%m-%d)# 计算7天前的日期 seven_days_ago$(date -d "$current_date -7 days" %Y-%m-%d)# 遍历目录中的文件,按文件名过滤并删除7天前的文件 for file in …

双11“万亿交易额”背后,浪潮信息助力银行扛住交易洪流

双十一,不仅是网络购物的狂欢,更是中国支付清算业务的大考。 举目望去,双十一的台前幕后可谓是“不一样的精彩”。一方面台前的主角是消费者,全球超200个国家和地区的人们捧着手机、电脑,在阿里、京东、抖音、拼多多等…

第七章 块为结构建模 P2|系统建模语言SysML实用指南学习

仅供个人学习记录 流建模 对系统不同组成之间的流做出定义可提供它们之间交互作用的抽象视图 项是定义为流动事物的通用术语。流属性定义了该块可以流入或流出的项 为流动的项建模 项item用于描述一类流动的实体,可以是物质流(如物质和能量&#xff…

SpectralDiff论文阅读笔记

高光谱图像分类是遥感领域的一个重要问题,在地球科学中有着广泛的应用。近年来,人们提出了大量基于深度学习的HSI分类方法。然而,现有方法处理高维、高冗余和复杂数据的能力有限,这使得捕获数据的光谱空间分布和样本之间的关系具有挑战性。 为了解决这一问题,我们提出了一…

【Unity之UI编程】在Unity中如何打图集,来降低DrowCall

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:UI_…

win11右键菜单切换为win10样式

最近更新了win11,右键菜单和我的使用习惯很不一致,于是打算切换回去,看了网上好多教程,决定使用以下方法,记录以下,防止忘记。 一、切换win10 1、管理员运行命令提示符 2、输入 reg add "HKCU\Soft…

P1506 拯救oibh总部(BFS洪水灌溉)

题目: 样例1: 输入 4 5 00000 00*00 0*0*0 00*00 输出 1 样例2: 输入 5 5 ***** *0*0* **0** *0*0* ***** 输出 5 思路: 洪水灌溉,思路:给该图外面包围一圈可遍历的的点,作为引流灌溉。 BFS…

python自动化测试(3)- 自动化框架及工具

1、概述 手续的关于测试的方法论,都是建立在之前的文章里面提到的观点: 功能测试不建议做自动化接口测试性价比最高接口测试可以做自动化 后面所谈到的 测试自动化 也将围绕着 接口自动化 来介绍。 本系列选择的测试语言是 python 脚本语言。由于其官…

node项目调试

node 版本要在16.8版本或以上,12点几没有这个调试功能 ctrlshiftp debug: toggle auto attach 将自动附加打开,打断点,然后执行命令 node --inspect ./bin/mvc.js,然后就进入调试

MySQL索引事务存储引擎

索引:是一个排序的列表 列表中存储的是索引的值和包含这个值数据所在行的物理地址 索引的作用 利用索引数据库可以快速定位 大大加快查询速度表的数据很大 或查询需要关联多个表 使用索引也可以查询速度加快表与表之间的连接速度使用分组和排序时可以大大减少时间提…

TensorFlow学习笔记--(2)张量的常用运算函数

张量的取值函数 求张量的平均值: tf.reduce.mean(%张量名%)求张量的最小值:tf.reduce_min(%张量名%)求张量的最大值:tf.reduce_max(%张量名%)求张量的和:tf.reduce_sum(%张量名%)其次,对于上述所有操作 都可在函数后添加一个新的参数 axis%维度% axis0 代表第一维度 axis1 代表…

【Unity】思考方式与构造 | 碰撞器/刚体/预设/组件

《Unity神技大人炼成记》第二章-思考方式与构造 Unity版本:2019.4.23f1c1 相关文章:第一章:开天辟地(场景搭建-天空 山脉 草木 湖泊) 粉色矩形是截图后添加,以便辨认操作位置有些步骤只是为了体现一些属性…