1

我有 Iris 数据集(可以在此处找到:https ://www.kaggle.com/uciml/iris ),我应该将其分为测试集和训练集。但是,我需要对其进行拆分,以便训练和测试集中的类分布与完整数据集中的类分布相同。

我已经看到了这个问题的最佳答案:如何将数据集拆分为训练集和验证集的类之间保持比率?但由于我对数据科学和 python 都是新手,所以我很迷茫。

对于 Iris 数据集,前 50 行是一种花,接下来的 50 行是第二种花,最后 50 行是第三种花。我该怎么写才能得到例如。每三分之一的 50% 测试数据?我真的不明白他们在上面链接的问题中是在哪里以及如何做到这一点的。如果您能像对孩子一样解释这一点,我将不胜感激。

x_train 代表花的 4 个不同特征,而 y_train 代表我们拥有的花的种类吗?

先感谢您!

编辑:我试过这个

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.5, random_state=65)

但这是一种公平的方式吗?我选择了不同数量的随机状态,直到我在测试和训练集中得到了每种花的 25 个(它总是在 1/3 左右,但我得到了 65 个)。这感觉有点像作弊...

4

2 回答 2

1

您可以在此处使用 StratifiedKFold: http ://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html

此外,train_test_split 具有分层参数: http ://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html#sklearn.model_selection.train_test_split

如果您需要用一个例子来描述它,请联系我。

于 2018-10-07T05:24:13.363 回答
1

sklearn.model_selection.train_test_split

shufflestratify参数。

对于默认shuffle = Truestratify=None

如果您正在处理回归,train_test_split默认情况下会为您打乱数据。

如果您正在处理分类,则需要指定stratify = << your response variable >>

有关更多信息,请查看文档

谢谢

于 2018-10-08T17:50:05.767 回答