不随机地将数据分成训练和测试

Split data into training and testing not randomly

我想将我的数据集分成两部分,75% 用于训练,25% 用于测试。有两个 class。 我还有另一个数据集,它只有一个 class 的一个实例,其余所有实例都属于第二个 class。 所以我不想随机拆分。我想确定,如果只有一个 class 的实例,它应该在训练中。任何想法如何去做。我知道我必须 select 索引,但我不知道如何。 现在,我正在这样做,select前 75% 作为训练,剩下的作为测试

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

您的数据集在输入方面会发生变化,还是始终保持相同数量的数据?如果是后者,您可以简单地将占总数 75% 的数字指定为 splice 方法的第二个参数。例如,如果您有 100 个项目,您将分配 train_data = df[0:75:] 和另一个 test_data = df[76:].

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

试试这个:

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

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

这可能会有所帮助:GroupKFold。在那里找到 sklearn 文档:

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

您正在寻找分层训练和测试拆分:sklearn.model_selection.StratifiedKFold.html