sklearn 划分测试集和训练集函数区别

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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值