我有一个 Pandas 数据框,我希望将它分成 3 个单独的集合。我知道使用来自 sklearn.cross_validationtrain_test_split ,可以将数据分为两组(训练和测试)。但是,我找不到将数据分成三组的任何解决方案。最好,我想要原始数据的索引。

我知道一种解决方法是使用 train_test_split 两次并以某种方式调整索引。但是有没有更标准/内置的方法将数据分成 3 组而不是 2 组?

最佳答案

NumPy 的解决方案。我们将首先打乱整个数据集( df.sample(frac=1, random_state=42) ),然后将我们的数据集拆分为以下部分:

  • 60% - 训练集,
  • 20% - 验证集,
  • 20% - 测试集
  • In [305]: train, validate, test = \
                  np.split(df.sample(frac=1, random_state=42),
                           [int(.6*len(df)), int(.8*len(df))])
    
    In [306]: train
    Out[306]:
              A         B         C         D         E
    0  0.046919  0.792216  0.206294  0.440346  0.038960
    2  0.301010  0.625697  0.604724  0.936968  0.870064
    1  0.642237  0.690403  0.813658  0.525379  0.396053
    9  0.488484  0.389640  0.599637  0.122919  0.106505
    8  0.842717  0.793315  0.554084  0.100361  0.367465
    7  0.185214  0.603661  0.217677  0.281780  0.938540
    
    In [307]: validate
    Out[307]:
              A         B         C         D         E
    5  0.806176  0.008896  0.362878  0.058903  0.026328
    6  0.145777  0.485765  0.589272  0.806329  0.703479
    
    In [308]: test
    Out[308]:
              A         B         C         D         E
    4  0.521640  0.332210  0.370177  0.859169  0.401087
    3  0.333348  0.964011  0.083498  0.670386  0.169619
    
    [int(.6*len(df)), int(.8*len(df))] - 是 numpy.split()indices_or_sections 数组。
    这是 np.split() 用法的一个小演示 - 让我们将 20 个元素的数组分成以下部分:80%、10%、10%:
    In [45]: a = np.arange(1, 21)
    
    In [46]: a
    Out[46]: array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
    
    In [47]: np.split(a, [int(.8 * len(a)), int(.9 * len(a))])
    Out[47]:
    [array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16]),
     array([17, 18]),
     array([19, 20])]
    

    关于pandas - 如何将数据分成 3 组(训练、验证和测试)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38250710/

    10-12 16:29
    查看更多