python-2.7 - 如何在Python中给出分层kfold抽样的测试大小?

标签 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]

最佳答案

StratifiedKFold 根据定义进行 K 折分割。也就是说,返回的迭代器将产生 (K-1) 组用于训练,而 1 组用于测试。 Kn_splits 控制,因此,它确实创建 n_samples/K 组,并使用 K-1 的所有组合 用于训练/测试。引用维基百科或google K-fold cross-validation有关它的更多信息。

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

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

关于python-2.7 - 如何在Python中给出分层kfold抽样的测试大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45500915/

相关文章:

java - 我应该如何在包含文本的训练集上使用机器学习分类器?

r - 如何在 R 中的二进制 h2o GBM 中获得每个类的不同变量重要性?

用于循环导入的 python 解决方法

Python cmd 停止终端显示 stderr 或 stdout

python - 如何在 python 或 linux 中从文本文件中的某个单词后提取信息?

algorithm - 寻找距离棋盘中心最远的移动 - python 2

machine-learning - lstm(256) + lstm(256) 和 lstm(512) 有什么区别?

python - Python 如何知道变量的数据类型?

apache-spark - “CrossValidatorModel”对象没有属性 'featureImportances'

machine-learning - 减小卷积神经网络 (CNN) 中特征图的大小