Group k-fold解释和代码实现

Group k-fold解释和代码实现

文章目录

  • 一、Group k-fold解释和代码实现是什么?
  • 二、 实验数据设置
    • 2.1 实验数据生成代码
    • 2.2 代码结果
  • 三、实验代码
    • 3.1 实验代码
    • 3.2 实验结果
    • 3.3 结果解释
  • 四、总结


一、Group k-fold解释和代码实现是什么?

0,1,2,3:每一行表示测试集和训练集的划分的一种方式。
class:表示类别的个数(下图显示的是3类),有些交叉验证根据类别的比例划分测试集和训练集(例三)。
group:表示从不同的组采集到的样本,颜色的个数表示组的个数(有些时候我们关注在一组特定组上训练的模型是否能很好地泛化到看不见的组)。举个例子(解释“组”的意思):我们有10个人,我们想要希望训练集上所用的数据来自(1,2,3,4,5,6,7,8),测试集上的数据来自(9,10),也就是说我们不希望测试集上的数据和训练集上的数据来自同一个人(如果来自同一个人的话,训练集上的信息泄漏到测试集上了,模型的泛化性能会降低,测试结果会偏好)。
在这里插入图片描述

二、 实验数据设置

2.1 实验数据生成代码

X, y = np.arange(0,60).reshape((30,2)), np.hstack(([0] * 3, [1] * 9, [2] * 18))
groups = np.hstack((["a"] * 3, ["b"] * 1,["c"] * 2, ["d"] * 4,["e"] * 5, ["f"] * 3,["g"] * 4,["h"] * 5, ["i"] * 3))
print("数据:", end=" ")
for l in X:print(l, end=' ')
print("")
print("标签:", y)
print("组别:", groups)

2.2 代码结果


数据: [0 1] [2 3] [4 5] [6 7] [8 9] [10 11] [12 13] [14 15] [16 17] [18 19] [20 21] [22 23] [24 25] [26 27] [28 29] [30 31] [32 33] [34 35] [36 37] [38 39] [40 41] [42 43] [44 45] [46 47] [48 49] [50 51] [52 53] [54 55] [56 57] [58 59] 
标签: [0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]
组别: ['a' 'a' 'a' 'b' 'c' 'c' 'd' 'd' 'd' 'd' 'e' 'e' 'e' 'e' 'e' 'f' 'f' 'f' 'g' 'g' 'g' 'g' 'h' 'h' 'h' 'h' 'h' 'i' 'i' 'i']

数据个数、标签个数:30个
类别个数:3个(分别是0,1,2,比例是0.1:0.3:0.6和class每类对应)(和类别无关)
组别(group):9个(分别是a-i,个数是3,1,2,4,5,3,4,5,3)

三、实验代码

3.1 实验代码

代码如下:

# Group k-fold
import numpy as np
from sklearn.model_selection import GroupKFold# X = [0.1, 0.2, 2.2, 2.4, 2.3, 4.55, 5.8, 8.8, 9, 10]
# y = ["a", "b", "b", "b", "c", "c", "c", "d", "d", "d"]
# groups = [1, 1, 1, 2, 2, 2, 3, 3, 3, 3]X, y = np.arange(0,60).reshape((30,2)), np.hstack(([0] * 3, [1] * 9, [2] * 18))
groups = np.hstack((["a"] * 3, ["b"] * 1,["c"] * 2, ["d"] * 4,["e"] * 5, ["f"] * 3,["g"] * 4,["h"] * 5, ["i"] * 3))
print("数据:", end=" ")
for l in X:print(l, end=' ')
print("")
print("标签:", y)
print("组别:", groups)
gkf = GroupKFold(n_splits=3)
for i,(train, test) in enumerate(gkf.split(X, y, groups=groups)):print("=================Group k-fold 第%d折叠 ===================="% (i+1))# print('train -  {}'.format(np.bincount(y[train])))print("  训练集索引:%s" % train)print("  训练集标签:", y[train])print("  训练集组别标签", groups[train])print("  训练集数据:", end=" ")for l in X[train]:print(l, end=' ')print("")# print("  训练集数据:", X[train])# print("test  -  {}".format(np.bincount(y[test])))print("  测试集索引:%s" % test)print("  测试集标签:", y[test])print("  测试集组别标签", groups[test])print("  测试集数据:", end=" ")for l in X[test]:print(l, end=' ')print("")# print("  测试集数据:", X[test])print("=============================================================")

3.2 实验结果

结果如下:

数据: [0 1] [2 3] [4 5] [6 7] [8 9] [10 11] [12 13] [14 15] [16 17] [18 19] [20 21] [22 23] [24 25] [26 27] [28 29] [30 31] [32 33] [34 35] [36 37] [38 39] [40 41] [42 43] [44 45] [46 47] [48 49] [50 51] [52 53] [54 55] [56 57] [58 59] 
标签: [0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]
组别: ['a' 'a' 'a' 'b' 'c' 'c' 'd' 'd' 'd' 'd' 'e' 'e' 'e' 'e' 'e' 'f' 'f' 'f''g' 'g' 'g' 'g' 'h' 'h' 'h' 'h' 'h' 'i' 'i' 'i']
=================Group k-fold 第1折叠 ====================训练集索引:[ 3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21]训练集标签: [1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2]训练集组别标签 ['b' 'c' 'c' 'd' 'd' 'd' 'd' 'e' 'e' 'e' 'e' 'e' 'f' 'f' 'f' 'g' 'g' 'g''g']训练集数据: [6 7] [8 9] [10 11] [12 13] [14 15] [16 17] [18 19] [20 21] [22 23] [24 25] [26 27] [28 29] [30 31] [32 33] [34 35] [36 37] [38 39] [40 41] [42 43] 测试集索引:[ 0  1  2 22 23 24 25 26 27 28 29]测试集标签: [0 0 0 2 2 2 2 2 2 2 2]测试集组别标签 ['a' 'a' 'a' 'h' 'h' 'h' 'h' 'h' 'i' 'i' 'i']测试集数据: [0 1] [2 3] [4 5] [44 45] [46 47] [48 49] [50 51] [52 53] [54 55] [56 57] [58 59] 
=============================================================
=================Group k-fold 第2折叠 ====================训练集索引:[ 0  1  2  3  6  7  8  9 18 19 20 21 22 23 24 25 26 27 28 29]训练集标签: [0 0 0 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2]训练集组别标签 ['a' 'a' 'a' 'b' 'd' 'd' 'd' 'd' 'g' 'g' 'g' 'g' 'h' 'h' 'h' 'h' 'h' 'i''i' 'i']训练集数据: [0 1] [2 3] [4 5] [6 7] [12 13] [14 15] [16 17] [18 19] [36 37] [38 39] [40 41] [42 43] [44 45] [46 47] [48 49] [50 51] [52 53] [54 55] [56 57] [58 59] 测试集索引:[ 4  5 10 11 12 13 14 15 16 17]测试集标签: [1 1 1 1 2 2 2 2 2 2]测试集组别标签 ['c' 'c' 'e' 'e' 'e' 'e' 'e' 'f' 'f' 'f']测试集数据: [8 9] [10 11] [20 21] [22 23] [24 25] [26 27] [28 29] [30 31] [32 33] [34 35] 
=============================================================
=================Group k-fold 第3折叠 ====================训练集索引:[ 0  1  2  4  5 10 11 12 13 14 15 16 17 22 23 24 25 26 27 28 29]训练集标签: [0 0 0 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2]训练集组别标签 ['a' 'a' 'a' 'c' 'c' 'e' 'e' 'e' 'e' 'e' 'f' 'f' 'f' 'h' 'h' 'h' 'h' 'h''i' 'i' 'i']训练集数据: [0 1] [2 3] [4 5] [8 9] [10 11] [20 21] [22 23] [24 25] [26 27] [28 29] [30 31] [32 33] [34 35] [44 45] [46 47] [48 49] [50 51] [52 53] [54 55] [56 57] [58 59] 测试集索引:[ 3  6  7  8  9 18 19 20 21]测试集标签: [1 1 1 1 1 2 2 2 2]测试集组别标签 ['b' 'd' 'd' 'd' 'd' 'g' 'g' 'g' 'g']测试集数据: [6 7] [12 13] [14 15] [16 17] [18 19] [36 37] [38 39] [40 41] [42 43] 
=============================================================进程已结束,退出代码 0

3.3 结果解释

可以看到测试集标签里面有0,但是训练集标签里没有0——这没办法做测试。
可以看到数据集的划分和组别和折叠数(3折)有关,但是和标签比例无关(这一点不科学)

=================Group k-fold 第1折叠 ====================训练集索引:[ 3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21]训练集标签: [1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2]训练集组别标签 ['b' 'c' 'c' 'd' 'd' 'd' 'd' 'e' 'e' 'e' 'e' 'e' 'f' 'f' 'f' 'g' 'g' 'g' 'g']训练集数据: [6 7] [8 9] [10 11] [12 13] [14 15] [16 17] [18 19] [20 21] [22 23] [24 25] [26 27] [28 29] [30 31] [32 33] [34 35] [36 37] [38 39] [40 41] [42 43] 测试集索引:[ 0  1  2 22 23 24 25 26 27 28 29]测试集标签: [0 0 0 2 2 2 2 2 2 2 2]测试集组别标签 ['a' 'a' 'a' 'h' 'h' 'h' 'h' 'h' 'i' 'i' 'i']测试集数据: [0 1] [2 3] [4 5] [44 45] [46 47] [48 49] [50 51] [52 53] [54 55] [56 57] [58 59] 
=============================================================

四、总结

Group k-fold:不考虑标签(class)和组(group)的影响。

  • 有时候测试集包含某一类的全部标签,而训练集不包含该类的样本。也就是说没经过训练,就要测试(KFold 第1折叠)。
  • 适用于每一组的数据类型都很全的时候。

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

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

相关文章

找不到msvcp140.dll文件的多种解决方法,五个方法轻松搞定

msvcp140.dll是Microsoft Visual C 2015 Redistributable的一个组件,它是运行许多Windows应用程序所必需的动态链接库文件之一。当这个文件丢失或损坏时,就会导致相关应用程序无法正常启动或运行。本文将全面解析msvcp140.dll丢失的原因以及解决方法。 关…

JavaWeb——前端之AjaxVue

6. 前后端交互 6.1 Ajax(原生的) 概念: Asynchronous JavaScript And XML(异步的JavaScript和XML) 作用: 数据交互:通过Ajax可以给服务器发送请求,并获取服务器响应的数据异步交…

爱思唯尔的KBS——模板、投稿、返修、接收的总结

第二篇论文终于是接受了QAQ,被审稿人疯狂拖时间,KBS是真难绷啊 由于之前发布过关于爱思唯尔旗下的ESWA博客,KBS和ESWA是类似的,因此本篇博客主要说下区别以及期间碰到的各种情况,有疑问依然可以在评论区说,…

从0到1入门C++编程——02 通讯录管理系统

文章目录 一、创建结构体及菜单显示二、添加联系人三、显示联系人四、删除联系人五、查找联系人六、修改联系人七、清空联系人八、退出通讯录 本文通过C实现一个通讯录管理系统,系统要实现的功能如下。 1、添加联系人:向通讯录中添加新人,信息…

Lightroom Classic 2024 for Mac/win中文版:摄影后期处理的极致体验

随着数字摄影的普及,后期处理成为创作过程中的关键环节。对于摄影师而言,一款强大的后期处理软件是必不可少的。Adobe Lightroom Classic 2024正是这样一款备受推崇的软件,它为摄影师提供了从导入、编辑到共享的一站式解决方案,让…

数据结构期末复习(3)栈和队列

堆栈(stack) 堆栈(stack)是一种基于后进先出(LIFO,Last In First Out)原则的数据结构。它模拟了现实生活中的堆栈,类似于一摞盘子或一堆书。 堆栈有两个基本操作:入栈&a…

2.3物理层下面的传输媒体

目录 2.3物理层下面的传输媒体2.3.1导引型传输媒体1.双绞线2.同轴电缆3.光纤 2.3.2非导引型传输媒体无线电微波通信 2.3物理层下面的传输媒体 传输媒体是数据传输系统中在发送器和接收器之间的物理通路 两大类: 导引型传输媒体:电磁波被导引沿着固体媒体…

开放原子训练营(第四季)TobudOS——TobudOS内核移植(keil版)

前言 12月份参加了开放原第四季线下活动,觉得很有意义。通过这篇博文,记录一下这次活动进行的移植TobudOS内核的过程,下面就让我们开始吧。 开发板介绍 本次使用的开发板型号为STM32H750,当然了,其他型号的开发版也…

Angular进阶之六:Progressive rendering

简介 Progressive Rendering 是一种提高 Web 应用性能的方法,允许页面在加载过程中逐步呈现,以提高用户体验。在本文中,我们将探讨如何在 Angular 中通过自定义指令实现 Progressive Rendering,特别是处理从服务器获取大量数据的…

Java开发过程中的幂等性问题

幂等性问题: 1. 有时我们在填写某些 form表单 时,保存按钮不小心快速点了两次,表中竟然产生了两条重复的数据,只是id不一样。 2. 我们在项目中为了解决 接口超时 问题,通常会引入了 重试机制 。第一次请求接口超时了…

【揭秘】如何使用LinkedHashMap来实现一个LUR缓存?

LRU(Least Recently Used)缓存是一种常用的缓存淘汰策略,用于在有限的缓存空间中存储数据。其基本思想是:如果数据最近被访问过,那么在未来它被访问的概率也更高。因此,LRU缓存会保留最近访问过的数据&…

Python编程新技能:如何优雅地实现水仙花数?

水仙花数(Narcissistic number)也被称为阿姆斯特朗数(Armstrong number)或自恋数等,它是一个非负整数,其特性是该数的每个位上的数字的n次幂之和等于它本身,其中n是该数的位数。简单来说&#x…

00-开篇导读:学习分库分表开源框架的正确方法

1 前言 互联网高速发展带来海量的信息化数据,也带来更多的技术挑战。各种智能终端设备(比如摄像头或车载设备等)以每天千万级的数据量上报业务数据,电商、社交等互联网行业更不必说。这样量级的数据处理,已经远不是传…

SELinux 安全模型——MLS

首发公号:Rand_cs BLP 模型:于1973年被提出,是一种模拟军事安全策略的计算机访问控制模型,它是最早也是最常用的一种多级访问控制模型,主要用于保证系统信息的机密性,是第一个严格形式化的安全模型 暂时无…

机器学习三要素与拟合问题

1.如何构建机器学习模型? 机器学习工作流程总结 1.获取数据 2.数据基本处理 3.特征工程 4.机器学习(模型训练) 5.模型评估 结果达到要求,上线服务,没有达到要求,重新上面步骤 我们使用机器学习监督学习分类预测模型的工作流…

Qt5 安装教程 - 跳过登录界面

Qt5 安装教程 - 跳过登录界面 引言一、下载二、安装三、使用四、修改、维护、卸载 引言 Qt5.14.2及以前的版本有离线安装包,无需登录 (老版本连登录界面也无)。之后的版本需登录进行在线安装。 本文以Qt5.12.2版本为例,说明如何跳过登录界面&#xff0c…

Android Context在四大组件及Application中的表现

文章目录 Android Context在四大组件及Application中的表现Context是什么Context源码Activity流程分析Service流程分析BroadcastReceiver流程分析ContentProvider流程分析Application流程分析 Android Context在四大组件及Application中的表现 Context是什么 Context可以理解…

Java技术栈 —— Redis的雪崩、穿透与击穿

Java技术栈 —— Redis的雪崩、穿透与击穿 〇、实验的先导条件(NginxJmeter)一、Redis缓存雪崩、缓存穿透、缓存击穿1.1 雪崩1.2 穿透1.3 击穿 二、Redis应用场景——高并发2.1 单机部署的高并发问题与解决(JVM级别锁)2.2 集群部署…

Redis7.2.3(Windows版本)

1、解压   2、设置密码 (1) 右击编辑redis.conf文件:  (2) 设置密码。  3、测试密码是否添加成功  如上图所示,即为成功。 4、设置…

spring创建与使用

spring创建与使用 创建 Spring 项⽬创建⼀个 Maven 项⽬添加 Spring 框架⽀持添加启动类 存储 Bean 对象创建 Bean将 Bean 注册到容器 获取并使⽤ Bean 对象创建 Spring 上下⽂获取指定的 Bean 对象获取bean对象的方法 使⽤ Bean 总结 创建 Spring 项⽬ 接下来使⽤ Maven ⽅式…