关于如何拆分数据的任何理论?

机器算法验证 机器学习 统计学意义 数理统计 统计学习
2022-04-18 23:32:11

为学习和评估拆分数据是一种非常普遍的做法。我见过人们做 (train, test, dev) = (50%, 25%, 25%) 或 (50%, 30%, 20%) 等。显然有一点是要有足够的数据用于学习目的,同时,更大的测试/开发将给出更重要的评估。有没有关于如何将数据拆分为“训练”、“测试”、“开发”的理论?我们为什么要这样分裂?为什么没有人这样做(33%、33%、33%)?

4个回答

这可能不是您所要求的,但是在拆分数据时要注意的一个主要理论点是,您不应该将一组相关的观察结果(即即使在对您的特征进行调节后也相关)同时放入训练和测试集。您需要对某种意义上的独立观察(或一组观察)采取一些立场。例如,想象一下:

  • 每条记录/观察都是医学测试结果。
  • 您每人有多个测试结果。
  • 每个人的测试结果通过未观察到的个人特定特征相互关联。

在构建训练集和测试集时,您可以拆分:

  1. 记录明智:将每条记录随机分配给训练或测试集
  2. 明智的:将人员(及其所有测试结果)随机分配到训练或测试集

在某种意义上,将记录明智地拆分为训练集和测试集就像对训练数据进行验证!它可能会给出严重偏颇的验证结果。在这种情况下,您需要执行 (2)。

摘要:对于所需的样本量,有已知的指导方针(至少在某些情况下)——但恕我直言,它们不能轻易地转换为“分成这样的分数”的经验法则。


虽然在 k 折交叉验证中,k 的选择通常并不重要,但对于单次拆分还有其他考虑。

k折交叉验证中的k没有太大影响的原因(除了极端选择,如k=n) 是在交叉验证运行结束时,每个案例都经过了一次测试。不同之处仅在于您计算了多少代理模型才能实现这一目标。

对于单个拆分,以下注意事项可能会有所帮助,但您会注意到它们不容易表示为可用总样本的分数。

  • 训练数据:必要的训练样本量通常被方便地讨论为 与所需/期望的模型复杂度相关的训练案例
  • 相反,由于测试用例数量有限,测试结果的不确定性取决于测试用例的绝对数量一般来说,回归和分类都是如此,但是分类 0/1 损失和相关比例(诸如准确性、真阳性率、预测值等品质因数)在这方面具有特别令人讨厌的行为。
  • 但是,这样做的好处是,您可以计算必要的绝对测试样本量,以在不同情况下测试最终模型,例如“最终灵敏度估计的 95% 置信区间不应超过 10 个百分点”。

  • 数据驱动的模型优化/选择:从统计的角度来看,这通常需要比最终评估更大的测试样本量,以避免“略读测试方差”,即虚假(意外)优化“结果”(我d 考虑优化失败 - 然而,这种类型的失败不会被常规检测/警告)。此外,必要的优化测试样本大小在很大程度上取决于要进行的比较次数。
    总而言之,我希望优化集通常应该大于最终评估集 - 或者代替数据驱动的优化,可以使用外部知识来修复合理的超参数(我遇到的样本量通常不允许优化由测试结果驱动)


对于分类 0/1 损失和比例型品质因数,我们将这些想法写成一篇论文:
Beleites, C. and Neugebauer, U. and Bocklitz, T. and Krafft, C. and Popp, J.:样本量规划用于分类模型。Anal Chim Acta, 2013, 760, 25-33。DOI: 10.1016/j.aca.2012.11.007
arXiv 上接受的手稿: 1211.1323

我没有基于理论的回应,但我的数据分配通常取决于我拥有多少数据以及我的模型与该数据的拟合程度。如果你有一堆数据,你可能会非常自由地为验证和测试留出多少。如果你是有限的,那就是模型拟合的地方。想象你正在制作一个线性回归模型,你的结果y完全取决于你的特征x,系统中绝对没有噪音。在这种情况下,您永远不需要超过 2 个数据点来获得完美拟合,因此即使在小数据集中,您仍然可以留出一堆用于验证和测试。另一方面,如果系统中有很多噪声,您可能必须投入更多数据作为训练集才能找到信号。

查看您所处情况的一种方法是从较小的训练集开始并引导它生成一些模型。然后看看你的模型系数在各轮引导中。如果您的系数非常稳定,那么您很有可能为模型提供了足够的数据来找到要找到的信号。如果它们反弹很多,那么模型可能需要更多数据。请记住,您在这里查看的不是预测错误,而是整个模型的稳定性。然后,您可以通过向您的训练集添加更多数据并重复引导来验证模型稳定性,或者您可以选择相同大小的数据的新子集并重复以确保您不只是选择奇怪的数据第一时间。

为了补充其他评论,我认为没有规则将这个百分比视为超(或者说超超)参数。我能想到的设置首先将您的数据除以二。假设将 10% 的数据放在一边(是的!又是百分比),然后以不同的方式(30、30、30)、(80、10、10)对其余数据进行切片。在每种情况下,您都将获得培训、验证和测试率,并且您应该能够将其与您在 10% 测试集上获得的率进行比较,看看您是否可以发现由于特定情况而出现的任何持续改进。像机器学习的其他部分一样,我们可能会先对其进行测试,然后尝试为我们所看到的找到原因(找到数据量与这些值之间的关系,如果有的话!