243

是否有关于如何最好地将数据划分为训练集和验证集的经验法则?是否建议使用偶数 50/50 分割?或者相对于验证数据拥有更多的训练数据有明显的优势(反之亦然)?还是这个选择几乎取决于应用程序?

我主要分别使用了 80% / 20% 的训练和验证数据,但我没有任何原则性的理由选择了这个部门。在机器学习方面更有经验的人可以给我建议吗?

4

7 回答 7

264

有两个相互竞争的问题:训练数据越少,参数估计的方差越大。使用较少的测试数据,您的性能统计数据会有更大的差异。从广义上讲,您应该关注数据的划分,这样方差都不会太高,这更多地与每个类别中实例的绝对数量有关,而不是百分比。

如果您总共有 100 个实例,您可能会被交叉验证困住,因为没有单一的拆分会给您的估计带来令人满意的差异。如果您有 100,000 个实例,那么选择 80:20 拆分还是 90:10 拆分并不重要(实际上,如果您的方法计算量特别大,您可以选择使用较少的训练数据)。

假设您有足够的数据来进行适当的保留测试数据(而不是交叉验证),以下是处理差异的有益方法:

  1. 将数据拆分为训练和测试(80/20 确实是一个很好的起点)
  2. 将训练数据拆分为训练和验证(同样,80/20 是公平的拆分)。
  3. 对训练数据的随机选择进行二次抽样,以此训练分类器,并记录验证集上的性能
  4. 尝试使用不同数量的训练数据进行一系列运行:随机抽取其中的 20%,例如 10 次并观察验证数据的性能,然后对 40%、60%、80% 进行相同的操作。您应该看到更多数据的性能更好,但不同随机样本的方差也更低
  5. 要处理由于测试数据大小引起的差异,请反向执行相同的过程。对所有训练数据进行训练,然后随机抽取一定百分比的验证数据进行多次抽样,然后观察性能。您现在应该发现,验证数据的小样本的平均性能与所有验证数据的性能大致相同,但随着测试样本数量的减少,方差要高得多
于 2012-11-29T10:30:18.210 回答
64

您会惊讶地发现 80/20 是一个相当普遍的比率,通常被称为帕累托原则。如果您使用该比率,通常是一个安全的选择。

但是,根据您采用的培训/验证方法,该比率可能会发生变化。例如:如果您使用 10 折交叉验证,那么您最终会在每折处得到一个 10% 的验证集。

关于训练集和验证集之间的适当比例有一些研究:

为验证集保留的模式比例应与自由可调参数数量的平方根成反比。

在他们的结论中,他们指定了一个公式:

验证集 (v) 与训练集 (t) 的大小比,v/t,尺度类似于 ln(N/h-max),其中 N 是识别器家族的数量,h-max 是这些家族中最大的复杂度。

他们所说的复杂性是指:

每个识别器家族都以其复杂性为特征,这可能与VC 维度、描述长度、可调整参数的数量或其他复杂性度量相关,也可能不相关。

采取第一条经验法则(即验证集应该与自由可调参数的数量的平方根成反比),您可以得出结论,如果您有 32 个可调参数,则 32 的平方根约为 5.65,分数应为1/5.65 或 0.177 (v/t)。大约 17.7% 应保留用于验证,82.3% 用于培训。

于 2012-11-28T19:30:31.237 回答
56

去年,我参加了 Andrew Ng 教授的在线机器学习课程。他的建议是:

培训:60%

交叉验证:20%

测试:20%

于 2012-11-28T19:53:40.623 回答
19

好吧,你应该再考虑一件事。

如果您有一个非常大的数据集,例如 1,000,000 个示例,则可能不需要拆分 80/10/10,因为 10% = 100,000 个示例可能对于仅仅说该模型工作正常来说太多了。

也许 99/0.5/0.5 就足够了,因为 5,000 个示例可以代表您数据中的大部分差异,并且您可以根据测试和开发中的这 5,000 个示例轻松判断该模型运行良好。

不要仅仅因为您听说没问题就使用 80/20。想想测试集的目的。

于 2017-09-06T07:31:26.480 回答
1

假设您的数据较少,我建议尝试 70%、80% 和 90% 并测试哪个结果更好。在 90% 的情况下,对于 10% 的测试,您可能会获得较差的准确性。

于 2018-11-12T08:53:28.743 回答
1

也许 63.2% / 36.8% 是一个合理的选择。原因是,如果您有一个总样本量n并希望随机抽样替换(也称为重新抽样,如在统计引导程序中)n 个案例中的初始n,则选择单个案例的概率重新采样将约为 0.632,前提是n不太小,如下所述:https ://stats.stackexchange.com/a/88993/16263

对于n = 250 的样本,个别案例被选择重新抽样到 4 位数的概率为 0.6329。对于n = 20000 的样本,概率为 0.6321。

于 2017-02-25T20:27:24.763 回答
1

这一切都取决于手头的数据。如果您有大量数据,那么如上所述,80/20 是一个不错的选择。但是,如果您不使用 50/50 拆分进行交叉验证,则可能会帮助您更多,并防止您创建过度拟合训练数据的模型。

于 2017-06-10T20:59:50.737 回答