为什么要应用 50:50 的火车测试拆分?

数据挖掘 张量流
2022-02-17 15:47:04

我正在阅读“使用 TensorFlow Hub 进行文本分类教程在本教程中,总共 50,000 条 IMDb 评论分为 25,000 条用于训练的评论和 25,000 条用于测试的评论。

我对这种拆分数据的方式感到惊讶,因为我在Andrew Ng 的课程中​​了解到,对于相当小的数据集(<10,000 个示例),“老式”的经验法则是将 60% 或 70% 的数据视为训练示例,其余作为开发/测试示例。

这种 50:50 的分裂背后有什么原因吗?

  • 处理文本时是常见的做法吗?
  • 它与使用“预训练”的 TensorFlow Hub 层有什么关系吗?
2个回答

更安全的方法是使用分数的整数部分(截断后)ncn34训练示例,以及nvnnc用于验证(又名测试)。如果您正在进行交叉验证,您至少可以执行整个训练测试拆分n次(最好2n如果你负担得起),在每个交叉验证“折叠”(复制)结束时记录平均验证损失,这就是 tensorflow 记录的内容;有关如何捕获它的信息,请参见此答案)。当使用蒙特卡罗交叉验证 (MCCV) 时,对于每个n(或者2n如果资源限制允许)复制,可以随机选择(无需替换以使事情更简单)nc用于训练的示例并使用剩余的nv用于验证的示例,甚至没有对子集进行分层(例如,如果您正在进行分类,则基于类)。

这是基于 J. Shao 于 1993 年发表的一篇论文(在此处查看我的答案以获取更多信息),他在该论文中证明了ncn34是线性模型选择的最佳选择。那时,机器学习之类的非线性模型(有关此问题的另一个讨论,请参阅答案)并不那么流行,但据我所知(希望被证明是错误的)没有人花时间证明任何事情与今天流行的类似,所以这是我现在能给你的最好答案。

更新:知道 GPU 在输入批量大小为 2 的幂时工作效率最高,我计算了将数据拆分为训练和验证的不同方法,这将遵循 Jun Shao 制定训练集大小的策略ncn34并且两者都ncnvnnc接近二的幂。一个有趣的注释是,对于n=640,nc127因此nv513; 因为1272751329每当我生成模拟数据时,我计划继续使用这些作为我的训练和验证测试大小。

处理文本时是常见的做法吗?

不,您可以根据需要拆分数据集,通常在实际问题中您应该使用交叉验证

它与使用“预训练”的 TensorFlow Hub 层有什么关系吗?

不,它没有。