将数据分成训练和测试,不是随机的

时间:2018-03-29 19:54:27

标签: python-3.x machine-learning scikit-learn cross-validation train-test-split

我想将我的数据集拆分为两部分,75%用于培训,25%用于测试。有两个班。 我有另一个只有一个类的实例的数据集,其余所有实例都属于第二类。 所以我不想随意拆分。我想确保,如果只有一个类的一个实例,它应该在训练中。任何想法如何做到这一点。我知道我必须选择指数,但我不知道如何。 现在,我正在这样做,它首先选择75%作为培训并保持测试

train_data = df[:int((len(df)+1)*.75)] 
test_data = df[int(len(df)*.75+1):] 

4 个答案:

答案 0 :(得分:1)

这有助于:GroupKFold。在那里找到sklearn doc:

http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GroupKFold.html

答案 1 :(得分:1)

你正在寻找一个分层的火车和测试分裂:sklearn.model_selection.StratifiedKFold.html

答案 2 :(得分:0)

您的数据集是否会根据输入进行更改,还是会保持一致的数据量?如果是后者,您可以简单地将总数的75%作为拼接方法的第二个参数。例如,如果你有100个项目,你可以指定你的train_data = df [0:75:]和另一个test_data = df [76:]。

但是如果没有模型或缩短的脚本,我认为我不能做更多的事情。

答案 3 :(得分:0)

试试这个:

train_data = df [:int(len(df)* .75)] test_data = df [int(len(df)* .75):: int(len(df)* .25) - 1]

根据10个整数列表进行测试时,它对我有用。