1、KFold
from sklearn.model_selection import KFold
kf = KFold(n_splits=3)
X = np.ones(10)
y = [0, 0, 1, 1, 0, 0, 1, 1, 1, 1]
for train, test in kf.split(X):
print("%s %s" % (train, test))
# [4 5 6 7 8 9] [0 1 2 3]
# [0 1 2 3 7 8 9] [4 5 6]
# [0 1 2 3 4 5 6] [7 8 9]

1、将样本 直接按 index 0到10 均分为3份 不等分则依次从第一份开始放入
2、每一个split则按顺序依次取每一份作为test


2、StratifiedKFold
from sklearn.model_selection import StratifiedKFold
X = np.ones(10)
y = [0, 0, 1, 1, 0, 0, 1, 1, 1, 1]
skf = StratifiedKFold(n_splits=3)
for train, test in skf.split(X,y):
print("%s %s" % (train, test))
# [4 5 6 7 8 9] [0 1 2 3]
# [0 1 2 3 5 8 9] [4 6 7]
# [0 1 2 3 4 6 7] [5 8 9]

1、按照每一类将其index取出
2、对每一类进行和Kfold()一样的划分


StratifiedKFold和KFold区别
不管是StratifiedKFold还是KFold,最后test集合加起来总体都是所有样本,因此最后总训练集和总测试集中各类别样本的比例与原始数据集中都会相同。但Stratified是根据y的类别每一类进行划分的,所以每个划分的测试集和训练集中各类样本比例相对均衡。
3、StratifiedShuffleSplit
from sklearn.model_selection import StratifiedShuffleSplit
X = np.ones(10)
y = [0, 0, 1, 1, 0, 0, 1, 1, 1, 1]
sss = StratifiedShuffleSplit(n_splits=3, test_size=0.3)
for train, test in sss.split(X, y):
print("%s %s" % (train, test))
#
[4 9 5 8 6 7 0] [2 3 1]
[5 8 9 1 6 7 0] [3 4 2]
[9 8 2 1 3 0 4] [6 5 7]

1.其产生指定数量的独立的train/test数据集划分数据集划分成n_splits组。
2.首先将样本随机打乱,然后根据设置参数test_size的比例来划分train和test。
3.其创建的每一组test和train划分将保证每组y的类比比例相同。即第一组train类别比例为1:2,test的类别比为3:4,则后面每组trian和test类别都满足这个比例。这两个比例不一定是y的class的类别
StratifiedKFold和StratifiedShuffleSplit区别
StratifiedKFold通过分层采样交叉切分来划分测试集和训练集,StratifiedShuffleSplit通过指定 test_size,且保证了保证每组训练集中各类样本比例相同,每组测试集中各类样本比例也相同,但都不一定和原始数据的一致。
参考资料
https://blog.csdn.net/shuibuzhaodeshiren/article/details/96436731
https://scikit-learn.org/stable/modules/cross_validation.html#k-fold