【问题标题】:Split data into training and testing not randomly非随机地将数据拆分为训练和测试
【发布时间】:2018-09-08 21:11:03
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 数据集在输入方面发生变化。实例数不固定。
    【解决方案2】:

    试试这个:

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

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

    【讨论】:

    • 能否解释一下这一行 test_data = df[int(len(df) * .75)::int(len(df) * .25) - 1]
    • 当然。在这种情况下,向后阅读此接头会有所帮助。第三个也是最后一个参数跳过列表的前 25%,然后第一个参数读取其余部分,恰好是剩余的 75%。并且没有第二个参数,因为不需要有一个,这就是为什么它留空。
    • 另外,如果这个答案适合你,那么请选择它并关闭问题。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2016-12-01
        • 2018-05-26
        • 1970-01-01
        • 2019-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-12
        相关资源
        最近更新 更多