数据集划分为训练集和验证集的经验法则是什么?

将数据划分为训练集和验证集的最佳经验法则是什么?均匀的50/50分割是否可取?还是拥有更多训练数据相对于验证数据(或反之)有明显的优势?还是说这种选择基本上取决于具体应用?

我一直使用80%的训练数据和20%的验证数据,但这种划分并没有什么原则性的理由。能否请有更多机器学习经验的人给我一些建议?


回答:

存在两种相互竞争的考虑:训练数据较少时,你的参数估计会有更大的方差。测试数据较少时,你的性能统计数据也会有更大的方差。总的来说,你应该关注于划分数据,使得两种方差都不会过高,这更多地与每个类别中的绝对实例数量有关,而不是百分比。

如果你总共有100个实例,你可能不得不使用交叉验证,因为没有单一的分割能给你满意的估计方差。如果你有10万个实例,无论你选择80:20的分割还是90:10的分割都没有太大关系(如果你使用的方法计算量特别大,你甚至可能选择使用更少的训练数据)。

假设你有足够的数据来进行适当的保留测试数据(而不是交叉验证),以下是一种有指导意义的方法来处理方差问题:

  1. 将数据划分为训练和测试数据(80/20确实是一个好的起点)
  2. 训练数据进一步划分为训练和验证数据(同样,80/20是一个合理的分割)。
  3. 从训练数据中随机抽样,训练分类器,并记录在验证集上的表现
  4. 尝试一系列使用不同数量训练数据的运行:例如,随机抽样20%的训练数据,重复10次,并观察在验证数据上的表现,然后对40%、60%、80%的训练数据做同样的事情。你应该会看到随着数据量的增加,性能会提高,同时在不同随机样本间的方差也会降低
  5. 为了了解由于测试数据规模导致的方差,进行相反的程序。使用所有训练数据进行训练,然后多次随机抽样一定百分比的验证数据,并观察性能。你现在应该发现,在小样本验证数据上的平均性能与在所有验证数据上的性能大致相同,但测试样本数量较少时,方差会更高

Related Posts

L1-L2正则化的不同系数

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

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

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

f1_score metric in lightgbm

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

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

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

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

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

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

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

发表回复

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