我有Iris数据集(可以在这里找到:https://www.kaggle.com/uciml/iris),我应该将其分为测试集和训练集。但是,我需要对其进行拆分,以使训练和测试集中的类分布与完整数据集中的类分布相同。
我已经看到了这个问题的最高答案:how to split a dataset into training and validation set keeping ratio between classes?,但是由于我对数据科学和python还是陌生的,所以我很迷茫。
对于虹膜数据集,前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个我就精确了)。感觉有点像在欺骗……
答案 0 :(得分:1)
您可以在这里使用StratifiedKFold: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html
train_test_split还具有 stratify 参数: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html#sklearn.model_selection.train_test_split
请给我一个例子来说明我。
答案 1 :(得分:1)
sklearn.model_selection.train_test_split
具有shuffle
和stratify
参数。
默认shuffle = True
和stratify=None
如果您要处理回归问题,则默认情况下,train_test_split
将为您重新整理数据。
如果要处理分类,则需要指定stratify = << your response variable >>
有关更多信息,请检查documentation
谢谢