StratifiedKFold 和 KFold 的比较

前言

  • 将全部训练集S分成k个不相交的子集,假设S中的训练样例个数为m,那么每一个自己有m/k个训练样例,相应的子集为{s1,s2,...,sk}
  • 每次从分好的子集里面,拿出一个作为测试集,其他k-1个作为训练集
  • 在k-1个训练集上训练出学习器模型,把这个模型放到测试集上,得到分类率的平均值,作为该模型或者假设函数的真实分类率

Code

# coding:utf-8
import numpy as np
from sklearn.model_selection import KFold,StratifiedKFold

X=np.array([
    [1,2,3,4],
    [11,12,13,14],
    [21,22,23,24],
    [31,32,33,34],
    [41,42,43,44],
    [51,52,53,54],
    [61,62,63,64],
    [71,72,73,74]
])

y=np.array([1,1,0,0,1,1,0,0])
sfolder = StratifiedKFold(n_splits=3,random_state=0,shuffle=False)
floder = KFold(n_splits=3,random_state=0,shuffle=False)

for train, test in sfolder.split(X,y):
    print('Train: %s | test: %s' % (train, test))
    print(" ")
    #print("train: ",X[train])
    #print("test:", X[test])
    #print("\n\n")

print("\n\n  --------  \n\n")

for train, test in floder.split(X,y):
    print('Train: %s | test: %s' % (train, test))
    print(" ")            

注意:

  • 1,输出的仅仅为索引,要是数据需要加上代码中的注释部分
  • 2,考虑不能整除的情况,KFold不能整除的情况,可参考
  • StratifiedKFold不能整除的情况和KFold不能整除的情况不同,查阅资料没找到合理解释...
  • 多次变换三个参数,仔细体会...

结论

  • 可以看到StratifiedKFold 分层采样交叉切分,确保训练集,测试集中各类别样本的比例与原始数据集中相同。

参考

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,125评论 2 89
  • 文章主要分为:一、深度学习概念;二、国内外研究现状;三、深度学习模型结构;四、深度学习训练算法;五、深度学习的优点...
    艾剪疏阅读 22,064评论 0 58
  • 弘丹参考的是钱穆的《论语新解》以及傅佩荣的《人能弘道-傅佩荣谈论语》,绿窗幽梦参考的是朱熹的《四书章句集注》,由弘...
    弘丹阅读 4,363评论 0 4
  • 爱是靠感觉不是逻辑推理,很多孩子从小在父母的严苛挑剔中长大,感受不到父母的爱;长大了才想明白父母严苛打骂背后是爱之...
    风景奶茶阅读 838评论 0 0
  • 5月底,我换了新工作,入职一个月的时候,领导让我参加一个演讲活动,主要是讲述身边好人好事,然后进行一些升华。起初脑...
    心记阅读 1,638评论 0 0