如何将数据分成3组(培训、验证和测试)?

我有一个熊猫数据框,我想把它分成3个独立的集合。我知道使用sklearn.cross\u validation中的train\u test\u分割,可以将数据分成两组(train和test)。但是,我找不到任何将数据分成三组的解决方案。最好,我想要原始数据的索引

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

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

  • 60%列车组
  • 20%验证集
  • 20%测试集

[305]on

:训练、验证、测试=\
np.分割(df.样本(分形=1,随机状态=42),
[int(.6*len(df)),int(.8*len(df))]
In[306]:火车
Output[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
At[307]on:验证
Output[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]:测试
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()的索引\u或\u节的数组

下面是np.split()用法的一个小演示-让我们将20个元素数组分成以下部分:80%、10%、10%:

[45]on

:a=np.arange(1,21)
At[46]on:a
Out[46]:数组([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20])
At[47]on:np.split(a[int(.8*len(a)),int(.9*len(a)))
Output[47]:
[数组([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]),
数组([17,18]),
数组([19,20])]

发表评论