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

时间:2017-08-04 07:41:39

标签: python-2.7 machine-learning

使用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]

1 个答案:

答案 0 :(得分:6)

根据定义,

StratifiedKFold可以进行K倍分裂。也就是说,返回的迭代器将产生(K-1)训练集,而1设置用于测试。 Kn_splits控制,因此,它会创建n_samples/K组,并使用K-1的所有组合进行培训/测试。有关它的更多信息,请参阅维基百科或谷歌K-fold cross-validation

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

话虽如此,您可能会对StratifiedShuffleSplit感兴趣,它只返回可配置数量的分割和训练/测试比率。如果您只想进行一次拆分,则可以调整test_size=0.3并保持/** My special class */ export default class MyClass { /** * An interesting value * @readonly * @enum {number} */ static TEST = { /** Critical value */ BAR: 1, /** Default value */ FOO: 2 } } (或任何您想要的比例)。