sklearn中StratifiedKFold和StratifiedShuffleSplit的区别

从标题来看,我想了解的是

StratifiedKFold 和参数 shuffle=True

StratifiedKFold(n_splits=10, shuffle=True, random_state=0)

StratifiedShuffleSplit

StratifiedShuffleSplit(n_splits=10, test_size=’default’, train_size=None, random_state=0)

之间的区别,以及使用StratifiedShuffleSplit的优势是什么


回答:

stratKFolds中,每个测试集之间不应该有重叠,即使包含了shuffle参数。使用stratKFoldsshuffle=True时,数据会在开始时进行一次洗牌,然后根据所需的分割数进行划分。测试数据总是其中的一个分割,训练数据则是剩余的部分。

ShuffleSplit中,每次都会对数据进行洗牌,然后进行分割。这意味着不同分割之间的测试集可能会有重叠。

请看下面的代码块以了解两者的区别。注意ShuffleSplit中测试集元素的重叠情况。

splits = 5tx = range(10)ty = [0] * 5 + [1] * 5from sklearn.model_selection import StratifiedShuffleSplit, StratifiedKFoldfrom sklearn import datasetsstratKfold = StratifiedKFold(n_splits=splits, shuffle=True, random_state=42)shufflesplit = StratifiedShuffleSplit(n_splits=splits, random_state=42, test_size=2)print("stratKFold")for train_index, test_index in stratKfold.split(tx, ty):    print("TRAIN:", train_index, "TEST:", test_index)print("Shuffle Split")for train_index, test_index in shufflesplit.split(tx, ty):    print("TRAIN:", train_index, "TEST:", test_index)

输出结果:

stratKFoldTRAIN: [0 2 3 4 5 6 7 9] TEST: [1 8]TRAIN: [0 1 2 3 5 7 8 9] TEST: [4 6]TRAIN: [0 1 3 4 5 6 8 9] TEST: [2 7]TRAIN: [1 2 3 4 6 7 8 9] TEST: [0 5]TRAIN: [0 1 2 4 5 6 7 8] TEST: [3 9]Shuffle SplitTRAIN: [8 4 1 0 6 5 7 2] TEST: [3 9]TRAIN: [7 0 3 9 4 5 1 6] TEST: [8 2]TRAIN: [1 2 5 6 4 8 9 0] TEST: [3 7]TRAIN: [4 6 7 8 3 5 1 2] TEST: [9 0]TRAIN: [7 2 6 5 4 3 0 9] TEST: [1 8]

关于何时使用它们,我倾向于在任何交叉验证中使用stratKFolds,而在训练/测试集分割时使用ShuffleSplit,分割数为2。但我相信这两者还有其他使用场景。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注