如何将数据分成3个集合(训练、验证和测试)?

我有一个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]: trainOut[306]:          A         B         C         D         E0  0.046919  0.792216  0.206294  0.440346  0.0389602  0.301010  0.625697  0.604724  0.936968  0.8700641  0.642237  0.690403  0.813658  0.525379  0.3960539  0.488484  0.389640  0.599637  0.122919  0.1065058  0.842717  0.793315  0.554084  0.100361  0.3674657  0.185214  0.603661  0.217677  0.281780  0.938540In [307]: validateOut[307]:          A         B         C         D         E5  0.806176  0.008896  0.362878  0.058903  0.0263286  0.145777  0.485765  0.589272  0.806329  0.703479In [308]: testOut[308]:          A         B         C         D         E4  0.521640  0.332210  0.370177  0.859169  0.4010873  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]: aOut[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])]

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注