如何在python中以分层kfold采样给出测试大小?

rau*_*aul 6 machine-learning python-2.7

使用sklearn,我想在样本数据集中有3个分裂(即n_splits = 3),并且训练/测试比率为70:30.我能够将该组分成3个折叠但不能定义测试大小(类似于train_test_split方法).有没有办法在StratifiedKFold中定义测试样本大小?

from sklearn.model_selection import StratifiedKFold as SKF
skf = SKF(n_splits=3)
skf.get_n_splits(X, y)
for train_index, test_index in skf.split(X, y):
# Loops over 3 iterations to have Train test stratified split
     X_train, X_test = X[train_index], X[test_index]
     y_train, y_test = y[train_index], y[test_index]
Run Code Online (Sandbox Code Playgroud)

Ima*_*ngo 9

StratifiedKFold根据定义,它会进行K折拆分。也就是说,返回的迭代器将生成(K-1)集用于训练,而1集用于测试。K由所控制n_splits,因此,它的确创建了的组n_samples/K,并使用的所有组合K-1进行培训/测试。有关更多信息,请参考Wikipedia或google K-fold交叉验证

简而言之,测试集的大小为1/K(即1/n_splits),因此您可以调整该参数以控制测试大小(例如,对数据n_splits=3大小1/3 = 33%进行测试拆分)。但是,StratifiedKFold将在的K组上进行迭代K-1,并且可能不是您想要的。

话虽如此,您可能对StratifiedShuffleSplit感兴趣,它仅返回可配置的分割数和训练/测试比率。如果您只想要一个分割,则可以调整n_splits=1并保持test_size=0.3(或您想要的任何比率)。