交叉验证的种类和原理(sklearn.model_selection import *)

交叉验证的种类和原理
所有的来自https://scikit-learn.org/stable/modules/cross_validation.html#cross-validation-iterators并掺杂了自己的理解。

文章目录

  • 前言
  • 一、基础知识
    • 1.1 交叉验证图形表示
    • 1.2 交叉验证主要类别
  • 二、部分交叉验证函数(每类一个)
    • 2.1 Cross-validation iterators for i.i.d. data(i.i.d.数据的交叉验证迭代器)
      • K-fold定义
    • 2.2 Cross-validation iterators with stratification based on class labels(基于类标签分层的交叉验证迭代器)
      • Stratified k-fold定义
    • 2.3 Cross-validation iterators for grouped data(分组数据的交叉验证迭代器)
      • Group k-fold
    • 2.4 Cross validation of time series data(时间序列数据的交叉验证)
      • Time Series Split定义
  • 三、全部交叉验证函数
  • 总结


前言

前提:假设某些数据是独立且相同分布的 (i.i.d.),假设所有样本都源于同一个生成过程,并且假设生成过程没有对过去生成的样本的记忆。
注意:虽然i.i.d.数据是机器学习理论中的常见假设,但在实践中很少成立。如果知道样本是使用瞬态过程生成的,则使用时间序列感知交叉验证方案会更安全(例一)。同样,如果我们知道生成过程具有组结构(从不同受试者、实验、测量设备收集的样本),则使用分组交叉验证会更安全(例二)。
例一:像振动信号这样的信号,我们对一个信号分段截取后,每一段都和之前和之后截取的数据在时间维度上是相关的,所以每个片段之间不是独立且同分布的,所以官网针对具有时间相关性的数据创建了相关的交叉验证(时间序列感知交叉验证)。
例二:从多个患者那里收集医疗数据,从每个患者(也可以是机器部件)身上采集多个样本。在我们的示例中,每个样本的患者 ID 将是其组(group)标识符。在这种情况下,我们想知道在一组特定组上训练的模型是否能很好地泛化到看不见的组。为了衡量这一点,我们需要确保测试集中的所有样本都来训练集中根本没有表示的组。


一、基础知识

1.1 交叉验证图形表示

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

1.2 交叉验证主要类别

  • 独立同分布数据的交叉验证迭代器(对应理想情况下)
  • 基于类标签分层的交叉验证迭代器(对应例三)
  • 分组数据的交叉验证迭代器(对应例二)
  • 时间序列数据的交叉验证(对应例一)

二、部分交叉验证函数(每类一个)

2.1 Cross-validation iterators for i.i.d. data(i.i.d.数据的交叉验证迭代器)

K-fold定义

KFold 将所有样本分成 k堆大小相等的样本堆,称为折叠数(如果 k=n,这相当于 Leave One Out 策略)。分别使用其中
k-1堆样本做训练,剩余的1堆做测试(进行k次实验)。下图是k=4的情况。第0行的红色样本(1堆)作为测试集,剩余的蓝色样本(4-1=3堆)作为训练集。可以从图中看出,测试集和训练集的划分和class及grou无关,但从图上可以看出每个类别数据的数量是不一样的,同时也不是来自同一个group。所以存在一些问题
行标0,1,2,3表示训练集和测试集划分情况,K-fold这个交叉验证的class和group行只表示数据集的情况,即class表示类别的个数和每个类别所占的比例,group表示组的个数和每个组所占的比例。
值得注意的是:该划分和class及group无关,会存在在训练里没有的类别样本,在测试集里有(例如第0行的数据集划分就出现的了这样的问题:训练集没包含所有类别的样本)。
打散数据可以解决或缓解上述问题。
在这里插入图片描述

2.2 Cross-validation iterators with stratification based on class labels(基于类标签分层的交叉验证迭代器)

Stratified k-fold定义

有些分类问题的不同类别样本的比例可能不一样。
Stratified K-Fold 是 k-fold 的一种变体,它根据类别的比例指导数据集的划分,如下图所示。假设class行各个颜色(类别)的比例是1:3:6,可以看到第0行第一个红色的大小占第一个类别的1/4(k=4),第0行第二个红色的大小占第二个类别的1/4,等。
在这里插入图片描述

2.3 Cross-validation iterators for grouped data(分组数据的交叉验证迭代器)

Group k-fold

有些情况下,我们想知道在特定组别上训练出来的模型是否能很好地泛化到未见过的组别上。为了衡量这一点,我们需要确保测试集中的所有样本都来自训练集中完全没有的组。
Group K-Fold 是 k-fold 的一种变体,它可以确保测试集和训练集中不包含同一群体。它根据group划分测试集和训练集。
值得注意的是:该划分根据group划分数据集的,该划分和class无关,例如:第2行第一个红块包含了class行的藏青色类(第一个块)的所有样本,训练集中完全没有这各类别的数据——这是一个很大的问题。
打散数据不一定可以解决或缓解上述问题。
在这里插入图片描述

2.4 Cross validation of time series data(时间序列数据的交叉验证)

Time Series Split定义

时间序列数据的特点是时间相近的观测值之间存在相关性(自相关性)。然而,经典的交叉验证技术(如 KFold 和 ShuffleSplit)假设样本是独立且同分布的,这将导致时间序列数据的训练实例和测试实例之间存在不合理的相关性(导致泛化误差估计值较差)。因此,在 "未来 "观测数据上评估我们的时间序列数据模型非常重要,这些观测数据至少与用于训练模型的观测数据相同。为此,TimeSeriesSplit 提供了一种解决方案。
在这里插入图片描述

三、全部交叉验证函数

2.1 Cross-validation iterators for i.i.d. data(i.i.d.数据的交叉验证迭代器)
2.1.1 K-fold
2.1.2 Repeated K-Fold
2.1.3 Leave One Out (LOO)
2.1.4 Leave P Out (LPO)
2.1.5 Random permutations cross-validation a.k.a. Shuffle & Split
2.2 Cross-validation iterators with stratification based on class labels(基于类标签分层的交叉验证迭代器)
2.2.1 Stratified k-fold
2.2.2 Stratified Shuffle Split
2.3 Cross-validation iterators for grouped data(分组数据的交叉验证迭代器)
2.3.1 Group k-fold)
2.3.2 StratifiedGroupKFold
2.3.3 Leave One Group Out
2.3.4 Leave P Groups Out
2.3.5 Group Shuffle Split
2.4 Cross validation of time series data(时间序列数据的交叉验证)
2.5 Predefined Fold-Splits / Validation-Sets(预定义的折叠分割/验证集)
2.6 Using cross-validation iterators to split train and test(使用交叉验证迭代器拆分训练和测试)

总结

基于类标签分层的交叉验证迭代器比其他缺了3个迭代器,因为基于类标签分层的交叉验证迭代器不存在leave one out(留一法),leave p out(留P法)等。
在这里插入图片描述
要综合考虑class和group对数据划分的影响,也要考虑数据集本身各方面的特点。
建议:把数据集打乱,多做几组交叉验证,显示验证结果,分析结果原因。

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

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

相关文章

【C++入门(一)】:详解C++语言的发展及其重要性

🎥 屿小夏 : 个人主页 🔥个人专栏 : C入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 🌤️什么是C🌤️C的发展史🌤️C的重要性☁️语言的广泛度☁️C的领域⭐…

绝地求生:大逃杀,鼠标灵敏度设置教程及枪法练习技巧 鼠标灵敏度怎么设置

《绝地求生大逃杀》鼠标灵敏度怎么设置?作为一款FPS游戏,如何调整鼠标参数是大家急需掌握的,今天闲游盒带来“院长尼克”分享的《绝地求生大逃杀》鼠标灵敏度设置教程及枪法练习技巧,废话不多说,下面我们一起来看吧。 …

C语言——小细节和小知识7

一、逆序字符串 1、递归1 #include <stdio.h> #include <string.h>void ReverseArray(char *str) {char temp *str;//1int len (int)strlen(str);*str *(str len - 1);//2*(str len - 1) \0;//3if(strlen(str 1) > 2)//只要字符串还大于2&#xff0c;就…

【nodejs】Express概念与使用介绍

Express Express是基于Node.js平台&#xff0c;从内置模块http封装出来的第三方模块&#xff0c;可以更方便的开发Web服务器。 中文官网&#xff1a; http://www.expressjs.com.cn/ 一、基本使用 // 导入express const express require(express) // 创建web服务器 const a…

SpringBoot 2 集成Spark 3

前提条件: 运行环境&#xff1a;Hadoop 3.* Spark 3.* ,如果还未安装相关环境&#xff0c;请参考&#xff1a; Spark 初始 CentOS 7 安装Hadoop 3 单机版 SpringBoot 2 集成Spark 3 pom.xml <?xml version"1.0" encoding"UTF-8"?> <pro…

【数据结构和算法】---二叉树(2)--堆的实现和应用

目录 一、堆的概念及结构二、堆结构的实现2.1堆向下调整算法2.2堆向上调整算法2.3删除堆顶元素2.4插入元素2.5其他函数接口 三、堆结构的应用3.1堆排序3.2Top-k问题 四、堆概念及结构相关题目 一、堆的概念及结构 如果有一个数字集合&#xff0c;并把它的所有元素按完全二叉树…

MS6459字符叠加可兼容MAX7456

MS6459 是 OSD 电路,与 MCU 配合使用,可控制不同类型的显示系统。显示点阵为 1218&#xff0c;内置部分数字、英文字符、拉丁字符和中文字符。电路集成有上电复位电路和 VRAM 清零电路用于减轻 MCU 的工作量。 主要特点 输入信号&#xff1a;混合视频信号&#xff1b; 显示字符…

ksuser.dll文件缺失怎么办?软件或游戏无法启动,一键自动修复

很多小伙伴反馈&#xff0c;自己的电脑中了病毒&#xff0c;被杀毒软件清理后&#xff0c;在打开游戏或软件的时候&#xff0c;经常会报错“提示无法找到ksuser.dll文件&#xff0c;建议重新安装软件或游戏”。自己根据提示重装后&#xff0c;还是报错&#xff0c;不知道应该怎…

C++ Qt开发:SqlRelationalTable关联表组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍SqlRelationalTable关联表组件的常用方法及灵…

【C语言】程序练习(四)

大家好&#xff0c;这里是争做图书馆扫地僧的小白。非常感谢各位的支持&#xff0c;也期待着您的关注。 目前博主有着C语言、C、linux以及数据结构的专栏&#xff0c;内容正在逐步的更新。 希望对各位朋友有所帮助同时也期望可以得到各位的支持&#xff0c;有任何问题欢迎私信与…

智能分析网关V4+太阳能供电模式,搭建鱼塘养殖远程视频监控方案

一、行业背景 传统的鱼塘养殖模式由于养殖区域面积大、管理难度高&#xff0c;经常会出现偷钓者、盗窃鱼苗、非法入侵等监管难题&#xff0c;给养殖户带来了不小的经济损失。为了解决这些问题&#xff0c;搭建鱼塘远程监控系统成为了必要之举。通过远程监控系统&#xff0c;管…

别一言不合就重装系统!Windows 无法正常启动先试试这些办法

你是否遇到过在升级或安装 Windows 10 操作系统&#xff0c;Windows 无法正常启动进入桌面&#xff0c;甚至陷入无限循环。造成的原因有很多&#xff0c;比如 Windows 更新&#xff0c;安装了新的软件或者驱动程序&#xff0c;系统文件损坏等等。那遇见 Windows 启动不了怎么办…

【Midjourney】Midjourney根据prompt提示词生成人物图片

目录 &#x1f347;&#x1f347;Midjourney是什么&#xff1f; &#x1f349;&#x1f349;Midjourney怎么用&#xff1f; &#x1f514;&#x1f514;Midjourney提示词格式 Midjourney生成任务示例 例1——航空客舱与乘客 prompt prompt翻译 生成效果 大图展示 细节大…

铂炭催化剂,2026年市场预计将以6.5%左右的复合年增长率增长

铂碳催化剂广泛用于各种工业应用&#xff0c;包括化学、制药和汽车领域。在对清洁能源的需求不断增加和环境问题意识不断提高的推动下&#xff0c;铂碳催化剂市场正在稳步增长。本次分析&#xff0c;我们将从全球市场和中国市场分别考察铂碳催化剂市场的发展趋势。 全球市场分析…

【并发编程篇】线程安全问题_—_ConcurrentHashMap

文章目录 &#x1f354;情景引入&#x1f339;报错了&#xff0c;解决方案 &#x1f354;情景引入 我们运行下面的代码 package org.example.unsafe;import java.util.HashMap; import java.util.Map; import java.util.UUID;public class MapTest {public static void main(…

Kerberos安装教程与命令详解(超详细)

文章目录 前言一、安装准备1. 搭建集群2. 软件包介绍 二、使用shell脚本一键安装1. 复制脚本2. 增加执行权限3. 执行脚本 三、kdb5_util命令1. 简介2. 可用选项和命令的解释3. 常见命令及其说明4. 示例用法 四、kadmin命令1. 简介2. 可用选项和命令的解释3. 常见命令及其说明4.…

芋道视频199 - 工作流 - 关系图 - ruoyi-vue-pro

一 新建表单 数据库&#xff1a;bpm_form。实体类&#xff1a;BpmFormDO.java&#xff1a; 二 流程模型、流程部署、流程定义 1 第1步&#xff1a;创建流程模型 页面操作&#xff1a;实体类&#xff1a;Model.java。数据库&#xff1a;ACT_RE_MODEL 流程模板信息表&#xf…

Python基础进阶:9个易错知识点

你好&#xff0c;我是kelly。 kelly根据自己平时工作&#xff0c;总结9个易错知识点&#xff0c;希望对大家有用。 知识点1&#xff1a;is 和 is比较是两个变量地址是否相同&#xff0c;比较是两个变量的值&#xff08;内容&#xff09;是否相同。 示例&#xff1a; In [92…

2分钟明白什么是SCADA?

SCADA——数据采集和监控系统的英文缩写&#xff0c;国内流行的叫法是&#xff0c;监控组态软件&#xff0c;是生产控制的核心&#xff0c;是位于控制设备之上&#xff0c;侧重于管理的纯软件&#xff0c;在ERP/MES/PCS架构中起承上启下的作用。SCADA负责控制或监控整个工厂&am…

uniapp路由

1、路由登记 uni-app页面路由为框架统一管理&#xff0c;开发者需要在pages.json里配置每个路由页面的路径及页面样式。 类似小程序在 app.json 中配置页面路由一样。 所以 uni-app 的路由用法与 Vue Router 不同&#xff0c;如仍希望采用 Vue Router 方式管理路由&#xff0c;…