首页 文章

如何将数据集划分为训练集和验证集是否有经验法则?

提问于
浏览
130

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

我分别主要使用80%/ 20%的培训和验证数据,但我选择了这个部门而没有任何原则性原因 . 在机器学习方面经验丰富的人能告诉我吗?

7 回答

  • 0

    假设您的数据较少,我建议尝试70%,80%和90%,并测试哪种效果更好 . 在90%的情况下,10%的测试可能会导致精度不佳 .

  • 0

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

    如果您总共有100个实例,那么您可能会遇到交叉验证,因为没有一个拆分可以让您在估算中获得满意的差异 . 如果您有100,000个实例,那么选择80:20分割还是90:10分割并不重要(如果您的方法特别计算密集,您可以选择使用较少的训练数据) .

    假设您有足够的数据来执行适当的保持测试数据(而不是交叉验证),以下是一种有助于处理差异的指导性方法:

    • 将您的数据拆分为培训和测试(80/20确实是一个很好的起点)

    • 将培训数据拆分为培训和验证(同样,80/20是公平的分割) .

    • 子样本随机选择训练数据,用此训练分类器,并在验证集上记录性能

    • 尝试使用不同数量的训练数据进行一系列运行:随机抽样20%,比如10次,观察验证数据的性能,然后对40%,60%,80%进行相同的操作 . 您应该看到更多数据的性能更高,但不同随机样本的差异也更小

    • 要获得由于测试数据大小而导致的差异处理,请反向执行相同的过程 . 训练所有训练数据,然后多次随机抽样一部分验证数据,并观察表现 . 您现在应该发现,验证数据的小样本的平均性能与所有验证数据的性能大致相同,但是当测试样本数量较少时,方差会更高

  • 155

    你会惊讶地发现80/20是一个非常常见的比例,通常被称为Pareto principle . 如果你使用这个比例通常是一个安全的赌注 .

    但是,根据您使用的培训/验证方法,比率可能会发生变化 . 例如:如果您使用10倍交叉验证,那么每次折叠的最终验证设置为10% .

    what is the proper ratio between the training set and the validation set进行了一些研究:

    为验证集保留的模式部分应与可自由调整参数数的平方根成反比 .

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

    验证集(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%用于培训 .

  • 45

    去年,我跟随教授:Andrew Ng的在线机器学习课程 . 他的建议是

    培训:60%

    交叉验证:20%

    测试:20%

  • 40

    那么你应该考虑另外一件事 .

    如果您有非常大的数据集,例如10 000 000个示例,则可能不需要拆分80/10/10,因为10%= 100000个示例不需要告诉该模型正常工作 .

    也许99 / 0.5 / 0.5就足够了,因为5000例可以表示数据的大部分差异,您可以根据test和dev中的5000个示例轻松地判断该模型是否正常工作 .

  • 2

    也许63.2%/ 36.8%是合理的选择 . 原因是如果你有一个总样本大小为n并想随机抽样替换(也就是重新抽样,如在统计引导程序中)n个初始n中的情况,个别案例被选中的概率如果n不是太小,则重新采样约为0.632,如下所述:https://stats.stackexchange.com/a/88993/16263

    对于n = 250的样本,将重新采样的个别情况选择为4位的概率是0.6329 . 对于n = 20000的样本,概率为0.6321 .

  • 0

    这一切都取决于手头的数据 . 如果您有大量数据,那么80/20是一个很好的选择,如上所述 . 但是,如果您没有使用50/50分割进行交叉验证可能会对您有所帮助,并阻止您创建一个过度拟合您的训练数据的模型 .

相关问题