我有虹膜数据集(可以在这里找到:https://www.kaggle.com/uciml/iris),我应该将其分成测试和训练集 . 但是,我需要拆分它,以便训练和测试集中的类分布与完整数据集中的类分布相同 .
我已经在这个问题中看到了最佳答案:how to split a dataset into training and validation set keeping ratio between classes?但由于我是数据科学和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) . 这感觉有点像作弊......
2 回答
你可以在这里使用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
如果你需要用一个例子来描述它,请给我打电话 .
有
shuffle
和stratify
参数 .默认
shuffle = True
和stratify=None
如果您正在处理回归,默认情况下
train_test_split
将为您重新打包数据 .如果您正在处理分类,则需要指定
stratify = << your response variable >>
欲了解更多信息,请查看documentation
谢谢