【sklearn】交叉验证 KFold/StratifiedKFold/GroupKFold

news/2024/7/9 8:34:28 标签: python, 机器学习, sklearn

KFold/StratifiedKFold/GroupKFold

  • 1. sklearn.model_selection.KFold
    • 1.1 KFold().split(x) 循环获取分割数据
    • 1.2 cross_validate(cv=KFold()) 作为cv参数
  • 2. sklearn.model_selection.StratifiedKFold
  • 3. sklearn.model_selection.GroupKFold

sklearnmodel_selectionKFold_1">1. sklearn.model_selection.KFold

1.1 KFold().split(x) 循环获取分割数据

python">from sklearn.model_selection import KFold

X = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 索引与值一样
'''
不管样本的标签(y)分布
shuffle 每次分割前打乱顺序
random_state shuffle=True时使用,设定后重复运行数据分组不变
'''
kf = KFold(n_splits=5, shuffle=False)
for train, test in kf.split(X, y):
    print(train, test)
'''
[2 3 4 5 6 7 8 9] [0 1]
[0 1 4 5 6 7 8 9] [2 3]
[0 1 2 3 6 7 8 9] [4 5]
[0 1 2 3 4 5 8 9] [6 7]
[0 1 2 3 4 5 6 7] [8 9]
'''
python">kf = KFold(n_splits=5, shuffle=True)
for train, test in kf.split(X, y):
    print(train, test)
'''
[0 1 2 4 5 6 7 9] [3 8]
[1 2 3 4 5 7 8 9] [0 6]
[0 1 3 4 6 7 8 9] [2 5]
[0 1 2 3 5 6 8 9] [4 7]
[0 2 3 4 5 6 7 8] [1 9]
'''

1.2 cross_validate(cv=KFold()) 作为cv参数

sklearnmodel_selectionStratifiedKFold_38">2. sklearn.model_selection.StratifiedKFold

  • 作用: 划分后的训练集和测试集数据分布与原数据相同
    即:原始标签中类别占比=训练标签中类别占比=验证标签中类别占比
  • sklearn】模型融合_堆叠法 StackingClassfier\Regressor参数cv
python">from sklearn.model_selection import StratifiedKFold

X = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [0, 0, 0, 0, 1, 1, 1, 1, 1, 1]

skf = StratifiedKFold(n_splits=5, shuffle=False)
for train, test in skf.split(X, y):
    print(train, test)
'''
[1 2 3 5 6 7 8 9] [0 4]
[0 2 3 4 6 7 8 9] [1 5]
[0 1 3 4 5 7 8 9] [2 6]
[0 1 2 4 5 6 8 9] [3 7]
[0 1 2 3 4 5 6 7] [8 9]
'''
python">skf = StratifiedKFold(n_splits=5, shuffle=True)
for train, test in skf.split(X, y):
    print(train, test)
'''
[0 1 2 4 5 6 7 8] [3 9]
[0 1 3 4 6 7 8 9] [2 5]
[1 2 3 4 5 6 8 9] [0 7]
[0 2 3 4 5 6 7 9] [1 8]
[0 1 2 3 5 7 8 9] [4 6]
'''

sklearnmodel_selectionGroupKFold_71">3. sklearn.model_selection.GroupKFold

  • 只有n_splits一个参数
  • 作用: 保证同一个group的样本不会同时出现在训练集和测试集上
    即:一个group的多个样本要么出现在训练集,要么都出现在测试集
  • 意义: 若一个group中的样本即用于训练也用于测试,模型能充分学习该group样本的特征并在测试集表现良好,但遇到新group会表现较差。
python">from sklearn.model_selection import GroupKFold

X = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [0, 0, 0, 0, 1, 1, 1, 1, 1, 1]
groups = [1, 1, 1, 2, 3, 3, 4, 4, 5, 5]

gkf = GroupKFold(n_splits=5)
for train, test in gkf.split(X, y, groups=groups):
    print(train, test)
'''
[3 4 5 6 7 8 9] [0 1 2]
[0 1 2 3 4 5 6 7] [8 9]
[0 1 2 3 4 5 8 9] [6 7]
[0 1 2 3 6 7 8 9] [4 5]
[0 1 2 4 5 6 7 8 9] [3]
'''

http://www.niftyadmin.cn/n/155017.html

相关文章

【项目设计】高并发内存池—tcmalloc核心框架学习

目录 一、项目介绍 二、内存池的初步认识 2.1 池化技术 2.2 内存池 2.3 malloc 三、定长内存池 四、整体框架设计介绍 五、申请内存 5.1 ThreadCache 5.1.1 ThreadCache整体设计 5.1.2 ThreadCache哈希桶映射与对齐规则 5.1.3 TSL无锁访问 5.1.4 ThreadCache核心设…

学习java——②面向对象的三大特征

目录 面向对象的三大基本特征 封装 封装demo 继承 继承demo 多态 面向对象的三大基本特征 我们说面向对象的开发范式,其实是对现实世界的理解和抽象的方法,那么,具体如何将现实世界抽象成代码呢?这就需要运用到面向对象的三大…

感谢大家对我的捐赠和鼓励

抗疫以来,各行各业都不太景气。但是我们还是要坚强的生活!生活除了诗和远方,我还有我的技术。我愿意分享我的技术,所以我都会开源我的一些私人项目。开源的目的不是赚钱,而且让更多人可以共同开发和维护。1、突破项目发…

【JavaEE】初识线程

一、简述进程认识线程之前我们应该去学习一下“进程" 的概念,我们可以把一个运行起来的程序称之为进程,进程的调度,进程的管理是由我们的操作系统来管理的,创建一个进程,操作系统会为每一个进程创建一个 PCB&…

C语言structure 常用项目级别知识

1. 对structure的理解和使用场合 structure 本质是一系列variable的合集,因此在有 a set of related variable definition 的时候,就应该使用structure 2. structure作为函数输入的注意事项 structure 作为函数输入时应该传递其指针而不是本身&#x…

沟通悖论:总是沟通的人,不会沟通

沟通悖论:总在沟通的人,不会沟通 总在沟通的事,没沟通好 好的沟通在通常静悄悄发生… 沟通内容三层次(信息,情感,价值观) 趣讲大白话:该直接就不要煽情 【趣讲信…

JMeter——书写性能测试计划书(九)

第七章. 书写性能测试计划书 性能测试报告组成结构: 项目概况(项目背景、测试目的、测试范围、指标术语定义、测试指标说明、测试责任人、测试时间)测试概要(测试场景、测试环境、测试类型、测试工具)测试结果&#…

PMP-项目管理知识体系概述

文章目录前言PMP-项目管理知识体系概述1. 项目管理知识体系三个维度1.1. 时间维度1.2. 管理维度1.3. 10大知识领域2. 十大知识领域之间的关系3. 项目管理的全链路3.1. 需求 -> 目标3.2. 目标 -> 计划3.3. 计划 -> 执行3.4. 执行 -> 收尾4. 项目管理类型分类说明4.1…