kfold和StratifiedKFold 用法

  • 两者区别
  • 代码及结果展示
  • 结果分析
  • 补充:random_state(随机状态)

两者区别

代码及结果展示

from sklearn.model_selection import KFold
from sklearn.model_selection import StratifiedKFold
#定义一个数据集
img_dataset=[[0,0],[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9]]
img_label=[0,0,0,0,1,1,1,1,1,1]
#非随机的kfold
kfolds = KFold(n_splits=2, shuffle=False)
for train_index_ls,val_index_ls in kfolds.split(img_dataset,img_label):print("train_index_ls=%s,val_index_ls=%s"%(train_index_ls,val_index_ls))for train_img_index in train_index_ls:print("img=%s,label=%s"%(img_dataset[train_img_index],img_label[train_img_index]))

train_index_ls=[5 6 7 8 9],val_index_ls=[0 1 2 3 4]
img=[5, 5],label=1
img=[6, 6],label=1
img=[7, 7],label=1
img=[8, 8],label=1
img=[9, 9],label=1
train_index_ls=[0 1 2 3 4],val_index_ls=[5 6 7 8 9]
img=[0, 0],label=0
img=[1, 1],label=0
img=[2, 2],label=0
img=[3, 3],label=0
img=[4, 4],label=1

#随机生成kflod
kfolds = KFold(n_splits=2, shuffle=True)
for train_index_ls,val_index_ls in kfolds.split(img_dataset,img_label):print("train_index_ls=%s,val_index_ls=%s"%(train_index_ls,val_index_ls))for train_img_index in train_index_ls:print("img=%s,label=%s"%(img_dataset[train_img_index],img_label[train_img_index]))

train_index_ls=[0 1 3 5 9],val_index_ls=[2 4 6 7 8]
img=[0, 0],label=0
img=[1, 1],label=0
img=[3, 3],label=0
img=[5, 5],label=1
img=[9, 9],label=1
train_index_ls=[2 4 6 7 8],val_index_ls=[0 1 3 5 9]
img=[2, 2],label=0
img=[4, 4],label=1
img=[6, 6],label=1
img=[7, 7],label=1
img=[8, 8],label=1

#非随机生成stratifiedKFolds
stratifiedKFolds = StratifiedKFold(n_splits=2, shuffle=False)
for train_index_ls,val_index_ls in stratifiedKFolds.split(img_dataset,img_label):print("train_index_ls=%s,val_index_ls=%s"%(train_index_ls,val_index_ls))for train_img_index in train_index_ls:print("img=%s,label=%s"%(img_dataset[train_img_index],img_label[train_img_index]))

train_index_ls=[2 3 7 8 9],val_index_ls=[0 1 4 5 6]
img=[2, 2],label=0
img=[3, 3],label=0
img=[7, 7],label=1
img=[8, 8],label=1
img=[9, 9],label=1
train_index_ls=[0 1 4 5 6],val_index_ls=[2 3 7 8 9]
img=[0, 0],label=0
img=[1, 1],label=0
img=[4, 4],label=1
img=[5, 5],label=1
img=[6, 6],label=1

结果分析

1.K折,会将数据集分成K份,同时会将(k-1)份作为训练集,剩余1份作为验证集。一共会有K个组合,即每一份都会有机会作为验证集。
2.如果不打乱顺序,会先抽出验证集,剩下的作为训练集。以此往后,得到K个组合。
3.StratifiedKFold会从每一个类比中,等比例的划分每一折,即每一折里的类别比例都是一样的。

补充:random_state(随机状态)

stratifiedKFolds = StratifiedKFold(n_splits=2, shuffle=True)
每次的分组都不太一样:
val_index_ls=[0 1 4 5 6] 、val_index_ls=[2 3 4 5 6]
val_index_ls=[0 3 4 6 7]、val_index_ls=[1 2 5 8 9]
stratifiedKFolds = StratifiedKFold(n_splits=2, shuffle=True,random_state=776)
每次的分组都一样:
val_index_ls=[1 3 5 6 7]、val_index_ls=[0 2 4 8 9]
val_index_ls=[1 3 5 6 7]、val_index_ls=[0 2 4 8 9]

如果不设置random_state的话,则每次构建的模型是不同的。
每次生成的数据集是不同的,每次拆分出的训练集、测试集是不同的,所以根据需求而定。

kfold和StratifiedKFold 用法相关推荐

  1. sklearn可视化不同数据划分方法的差异:KFold, ShuffleSplit,StratifiedKFold, GroupKFold, StratifiedShuffleSplit.......

    sklearn可视化不同数据划分方法的差异:TimeSeriesSplit, KFold, ShuffleSplit,StratifiedKFold, GroupShuffleSplit,GroupK ...

  2. KFold与StratifiedKFold

    最近使用到了skearn做数据集的处理,记录一下这两个个比较重要的函数:KFold与StratifiedKFold,作用是在机器学习中进行交叉验证来使用 这两个函数都是sklearn模块中的,在应用之 ...

  3. Python中的KFold与StratifiedKFold

    skearn做数据集的处理需要用到这两个比较重要的函数:KFold与StratifiedKFold,作用是在机器学习中进行交叉验证来使用. 这两个函数都是sklearn模块中的,在应用之前应该导入: ...

  4. KFold、StratifiedKFold、GroupKFold的区别

    一.问题来源: 在kaggle代码中第一次看到GroupKFold,不太清楚和KFold的区别,所以才想着去搞清楚这个问题 二.KFold >>> import numpy as n ...

  5. sklearn sklearn中KFold()的具体用法

    sklearn sklearn中KFold()的具体用法

  6. StratifiedKFold 用法

    StratifiedKFold 将X_train和 X_test 做有放回抽样,随机分三次,取出索引 import numpy as np from sklearn.model_selection i ...

  7. StratifiedKFold和KFold(5折验证)交叉验证的联系和区别Python实例

    Kfold: 将全部训练集分成k个不相交的子集,假设训练集的训练样例个数为m,那么每一个子集有m/k个训练样例,比如[1,2,3,4,5,6]分成两份,则第一份可能为[1,3,5],第二份[2,4,6 ...

  8. StratifiedKFold 和 KFold 的比较

    将全部训练集S分成k个不相交的子集,假设S中的训练样例个数为m,那么每一个自己有m/k个训练样例,相应的子集为{s1,s2,...,sk} 每次从分好的子集里面,拿出一个作为测试集,其他k-1个作为训 ...

  9. K折交叉验证(StratifiedKFold与KFold比较)

    文章目录 一.交叉验证 二.K折交叉验证 KFold()方法 StratifiedKFold()方法 一.交叉验证 交叉验证的基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训 ...

最新文章

  1. nginx源代码执行过程(一)
  2. arm汇编指令:ldr和adr的区别
  3. 多线程相互排斥--mutex(二)
  4. Python爬取京东笔记本电脑,来看看那个牌子最棒
  5. linux中export与source的作用
  6. 词汇的理解 —— 英译汉
  7. 【初赛】排列组合的一点笔记
  8. python 小程序搜索排名-用python2.7.9 写个小程序搜索某个目录下行有某关键字
  9. HTML5本地存储——IndexedDB二:索引
  10. 190303每日一句
  11. Win11 Windows聚焦不更新了怎么解决?聚焦锁屏图片不更换怎么办
  12. Matlab画图技巧: 不需要敲代码的傻瓜式操作流程
  13. Android 子线程更新UI
  14. educoder——面向对象程序设计java——实验实训——实验二 - 面向对象
  15. 小记2--MySQL数据库DML操作
  16. 自学Java必备英语单词表
  17. 光纤跳线的分类和概述
  18. 二进制部署kubernetes 1.25.5(二)
  19. 理发师多线程实现----面包师多进程实现
  20. 51单片机——电脑通过串口控制LED

热门文章

  1. 【数据聚类】第六章第二节:层次聚类算法之BIRCH算法(算法概述、流程和sklearn实现)
  2. 华为服务器修改登录密码,如何修改服务器的登录密码
  3. 收藏这几个免版权高清图片搜索网站,找高清图片素材更方便
  4. 自由嵌套RadioGroup
  5. python读取数据校验数据_python做本地数据与数据库的校验
  6. 杭电60道DP问题总结(一)
  7. CSS学习笔记:以图片作背景显示文字
  8. Vagrant 启动报错修复
  9. TFmini-Plus 常见问题与解答
  10. 下一天日期软件测试,监测一天看手机的时间app