KFold解释和代码实现

KFold解释和代码实现

文章目录

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


一、KFold是什么?

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))
print("数据:", end=" ")
for l in X:print(l, end=' ')
print("")
print("标签:", y)

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]

数据个数、标签个数:30个
类别个数:3个(分别是0,1,2,比例是0.1:0.3:0.6和class每类对应)
组别(group):由于KFold交叉验证结果和group无关,所以这里不再设置(其实也和class无关,但是我们要通过类别观察实验现象,所以进行了设置)。

三、实验代码

3.1 实验代码

代码如下:

from sklearn.model_selection import StratifiedKFold, KFold
import numpy as np
# X, y = np.ones((30, 1)), np.hstack(([0] * 20, [1] * 10))
# print(np.arange(0,30).reshape((30,1)))
X, y = np.arange(0,60).reshape((30,2)), np.hstack(([0] * 3, [1] * 9, [2] * 18))
print("数据:", end=" ")
for l in X:print(l, end=' ')
print("")
print("标签:", y)
kf = KFold(n_splits=3)
for i,(train, test) in enumerate(kf.split(X)):print("=================KFold 第%d折叠 ===================="% (i+1))print('train -  {}'.format(np.bincount(y[train])))print("  训练集索引:%s" % train)print("  训练集标签:", y[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("  测试集数据:", 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]
=================KFold 第1折叠 ====================
train -  [ 0  2 18]训练集索引:[10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29]训练集标签: [1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]训练集数据: [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] 
test  -  [3 7]测试集索引:[0 1 2 3 4 5 6 7 8 9]测试集标签: [0 0 0 1 1 1 1 1 1 1]测试集数据: [0 1] [2 3] [4 5] [6 7] [8 9] [10 11] [12 13] [14 15] [16 17] [18 19] 
=============================================================
=================KFold 第2折叠 ====================
train -  [ 3  7 10]训练集索引:[ 0  1  2  3  4  5  6  7  8  9 20 21 22 23 24 25 26 27 28 29]训练集标签: [0 0 0 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2]训练集数据: [0 1] [2 3] [4 5] [6 7] [8 9] [10 11] [12 13] [14 15] [16 17] [18 19] [40 41] [42 43] [44 45] [46 47] [48 49] [50 51] [52 53] [54 55] [56 57] [58 59] 
test  -  [0 2 8]测试集索引:[10 11 12 13 14 15 16 17 18 19]测试集标签: [1 1 2 2 2 2 2 2 2 2]测试集数据: [20 21] [22 23] [24 25] [26 27] [28 29] [30 31] [32 33] [34 35] [36 37] [38 39] 
=============================================================
=================KFold 第3折叠 ====================
train -  [3 9 8]训练集索引:[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]训练集标签: [0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 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] 
test  -  [ 0  0 10]测试集索引:[20 21 22 23 24 25 26 27 28 29]测试集标签: [2 2 2 2 2 2 2 2 2 2]测试集数据: [40 41] [42 43] [44 45] [46 47] [48 49] [50 51] [52 53] [54 55] [56 57] [58 59] 
=============================================================进程已结束,退出代码 0

3.3 结果解释

可以看到测试集标签里面有0,但是训练集标签里没有0——这没办法做测试。
可以看到第1折叠的结果,测试集数据和测试集数据的标签对应和图上的第0行对应。

=================KFold 第1折叠 ====================
train -  [ 0  2 18]训练集索引:[10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29]训练集标签: [1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]训练集数据: [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] 
test  -  [3 7]测试集索引:[0 1 2 3 4 5 6 7 8 9]测试集标签: [0 0 0 1 1 1 1 1 1 1]测试集数据: [0 1] [2 3] [4 5] [6 7] [8 9] [10 11] [12 13] [14 15] [16 17] [18 19] 
=============================================================

四、总结

KFold:不考虑标签(class)和组(group)的影响。

  • 有时候测试集包含某一类的全部标签,而训练集不包含该类的样本。也就是说没经过训练,就要测试(KFold 第1折叠)。
  • 适用于数据比较平衡,数据来自同一组(同一个机器,不同故障)的时候。
  • 记住要打乱数据。

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

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

相关文章

OpenWrt 编译入门(小白版)

编译环境 示例编译所用系统为 Ubuntu 22.04,信息如下 编译时由于网络问题,部分软件包可能出现下载问题,还请自备网络工具或尝试重新运行命令 编译步骤 下图为官网指示 编译环境设置(Build system setup) 这里根据我…

【小沐学NLP】Python实现K-Means聚类算法(nltk、sklearn)

文章目录 1、简介1.1 机器学习1.2 K 均值聚类1.2.1 聚类定义1.2.2 K-Means定义1.2.3 K-Means优缺点1.2.4 K-Means算法步骤 2、测试2.1 K-Means(Python)2.2 K-Means(Sklearn)2.2.1 例子1:数组分类2.2.2 例子2&#xff1…

安装torch(GPU版本)并在Pycharm中配置

零.前置环境 1.NVIDIA GPU Computing Toolkit已安装 版本为:11.6 已添加到环境变量 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\bin C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\libnvvp 在cmd中查看cuda版本 方法1&#xff1a…

海康visionmaster-渲染控件:渲染控件加载本地图像的方法

描述 环境:VM4.0.0 VS2015 及以上 现象:渲染控件如何显示本地图像? 解答 思路:在 2.3.1 中,可以通过绑定流程或者模块来显示图像和渲染效果。因此,第一步, 可以使用在 VM 软件平台中给图像源模…

Golang leetcode707 设计链表 (链表大成)

文章目录 设计链表 Leetcode707不使用头节点使用头节点 推荐** 设计链表 Leetcode707 题目要求我们通过实现几个方法来完成对链表的各个操作 由于在go语言中都为值传递,(注意这里与值类型、引用类型的而区别),所以即使我们直接在…

Apache Doris (五十五): Doris Join类型 - Colocation Join

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. Colocation Join原理

MFC消息机制详细剖析

易语言程序的破解99%的时候都需要用到FF55FC5F5E这个特征码 新建一个MFC应用程序: 去编辑MFC的.rc资源文件来DIY窗体 静态编译的,把很多静态库的代码都添加进去了 ,所以速度很慢 消息机制针对的是GUI程序(比如窗口程序&#xf…

高颜值的第三方网易云播放器

嗨喽!GitHub科技的各位小伙伴们,为了能够第一时间及时送达到大家手上,大家记得给博主点点关注每天会送上各种好评技术干货推文 ! 本期推荐开源项目目录: YesPlayMusic eDEX-UI:超炫酷终端工具 Calculato…

微软开源,全平台通用:Shell 自动补全工具 | 开源日报 No.132

microsoft/inshellisense Stars: 7.6k License: MIT inshellisense 是一个为 Shell 提供 IDE 风格自动补全的工具。它是一个终端本地运行时自动完成,支持 600 多个命令行工具,并且可以在 Windows、Linux 和 macOS 上使用。主要功能包括安装后可通过运行…

FTP的基本介绍

FTP ftp的介绍: ftp是一个可以提供共享文件的服务器,他可以通过iis.msc也就是windows 的服务器管理器来打开,或者通过cmd命令行打开 如何使用iis.msc打开ftp,如何使用cmd打开ftp ,如何匿名登录ftp,ftp和…

Android Studio实现课表

本文章主要展示课表的实现,里面包含很多控件的用法,比如吐司Toast、通知Notification、ListView,数值选择器NumberPicker,SeekBar同editText的关联。抽屉导航栏 还有一些其他的功能,比如InputFilter自定义的字符过滤器…

排序整形数组--------每日一题

大家好这是今年最后的一篇了,感谢大家的支持,新的一年我会更加努力地。 文章目录 目录 文章目录 题⽬描述: 输⼊10个整数,然后使⽤冒泡排序对数组内容进⾏升序排序,然后打印数组的内容 一、题目解读 冒泡排序是⼀种基础…

用Qt开发的十大理由

#1 完美的用户体验 “就最终体验、性能和特性而言,Qt 绝对是开发Radeon SoftwareCrimson Edition的正确选择。”“MBUS 是梅赛德斯-奔驰汽车内的全新用户体验。我们用 Qt 开发了绝大部分的UI体验和软件,包括屏幕动画,屏幕间的过渡和小组件。Qt 使我们能够快速开发出原型系统…

Linux进行模型微调前的环境准备

在Linux机器上对模型进行微调前,首先需要准备环境,即安装相关的软件。因为linux是一个无界面操作系统,软件安装完成后,还需要有便捷的交互方式编写脚本,调试脚本。此篇博客将专门介绍如何快速安装所需依赖软件&#xf…

2023-12-25 LeetCode每日一题(不浪费原料的汉堡制作方案)

2023-12-25每日一题 一、题目编号 1276. 不浪费原料的汉堡制作方案二、题目链接 点击跳转到题目位置 三、题目描述 圣诞活动预热开始啦,汉堡店推出了全新的汉堡套餐。为了避免浪费原料,请你帮他们制定合适的制作计划。 给你两个整数 tomatoSlices …

全志R128 DSP开发工具安装教程

资料准备 要编译和仿真DSP,需要以下资料: DSP 核 SDK,SDK 需要包含DSP 编译源码。Cadence Xtensa 的 Windows IDE 工具 (Xplorer‑8.0.13 版本), Windows 版本 DSP 的 package 包。Cadence Xtensa 的 License,用于服…

数据通信网络基础的网络参考模型华为ICT网络赛道

网络参考模型 目录 网络参考模型 2.1.应用与数据 2.2.网络参考模型与标准协议 2.2.1.OSI参考模型 2.2.2.TCP/IP参考模型 2.2.3.应用层 2.2.4.传输层 2.2.5.TCP和UDP 2.2.6.网络层 2.2.7.数据链路层 2.2.8.物理层 2.3.数据通信过程 2.1.应用与数据 应用的存在&#…

Flink学习-时间和窗口

在流数据处理应用中,一个很重要、也很常见的操作就是窗口计算。所谓的“窗口”,一 般就是划定的一段时间范围,也就是“时间窗”;对在这范围内的数据进行处理,就是所谓的 窗口计算。所以窗口和时间往往是分不开的。 时…

面试手撕算法高频专题:数组的双指针思想及应用(算法村第三关白银挑战)

所谓的双指针其实就是两个变量,不一定真的是指针。 快慢指针:一起向前走对撞指针、相向指针:从两头向中间走背向指针:从中间向两头走 移除值为val的元素 题目描述 27. 移除元素 - 力扣(LeetCode) 给你…

12.31_黑马数据结构与算法笔记Java

目录 345 设计跳表 Leetcode 1206 346 设计最小栈 Leetcode 155 347 设计端网址 Leetcode 355 348 设计推特 Leetcode 355 349 股票系列问题 Leetcode 121 350 股票系列问题 Leetcode 122 351 股票系列问题 Leetcode 714 352 股票系列问题 Leetcode 309 353 股票系列问…