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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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