是否有一个经验法则来最好地将数据划分为训练集和验证集?平分妥当吗?或者相对于验证数据,拥有更多的训练数据是否有明显的优势(反之亦然)?或者这个选择很大程度上取决于应用程序?
我主要分别使用80% / 20%的训练数据和验证数据,但我选择这种划分没有任何原则性的理由。能找个在机器学习方面更有经验的人给我出主意吗?
你会惊讶地发现80/20是一个非常常见的比率,通常被称为帕累托原则。如果你使用这个比例,通常是一个安全的赌注。
然而,根据您采用的培训/验证方法,这个比例可能会发生变化。例如:如果您使用10次交叉验证,那么您将在每次折叠中得到10%的验证集。
有一些关于训练集和验证集的合适比例是多少的研究:
为验证集保留的模式的比例应为 自由的数量与平方根成反比 可调参数。< / p >
在他们的结论中,他们指定了一个公式:
验证集(v)与训练集(t)的大小比,v/t,规模类似 ln(N/h-max),其中N是识别器族的数目 H-max是这些族中复杂度最大的
他们所说的复杂性是:
每一个识别器家族都有其复杂性的特点 可能与vc维相关,也可能与描述无关 长度、可调参数的数量或其他措施 复杂性。< / p >
根据第一条经验法则(即验证集应该与自由可调参数数量的平方根成反比),可以得出这样的结论:如果有32个可调参数,32的平方根是~5.65,分数应该是1/5.65或0.177 (v/t)。大约17.7%用于验证,82.3%用于培训。
去年,我参加了Andrew Ng教授的在线机器学习课程。他的建议是:
培训: 60%
交叉验证: 20%
测试: 20%
有两个相互竞争的问题:训练数据越少,参数估计的方差就越大。使用更少的测试数据,您的性能统计数据将有更大的差异。一般来说,您应该关注划分数据,使方差都不会太高,这更多地与每个类别中实例的绝对数量有关,而不是百分比。
如果你总共有100个实例,你可能会陷入交叉验证,因为没有一个单独的分割会给你的估计带来令人满意的方差。如果你有10万个实例,那么你选择80:20分割还是90:10分割并不重要(实际上,如果你的方法计算量特别大,你可以选择使用更少的训练数据)。
假设你有足够的数据来进行适当的测试数据(而不是交叉验证),下面是一种处理方差的指导方法:
也许63.2% / 36.8%是一个合理的选择。原因可能是,如果你有一个总样本量n,并希望从初始n中随机抽样替换(也称为重新抽样,如在统计引导中)n案例,那么在重新抽样中选择单个案例的概率将约为0.632,前提是n不是太小,如这里所解释的:https://stats.stackexchange.com/a/88993/16263
这完全取决于手头的数据。如果您有相当多的数据,那么如上所述,80/20是一个不错的选择。但如果你不使用50/50分割的交叉验证,可能会帮助你更多,并防止你创建一个过度拟合训练数据的模型。
你应该再考虑一件事。
如果你有一个非常大的数据集,比如1,000,000个例子,分割80/10/10可能是不必要的,因为10% = 100,000个例子可能太多了,不能说模型工作得很好。
也许99/0.5/0.5就足够了,因为5000个例子可以代表你数据中的大部分方差,你可以很容易地在测试和开发中根据这5000个例子来判断模型是否有效。
不要仅仅因为你听说80/20是可以的就使用80/20。想想测试集的目的。
假设你有较少的数据,我建议尝试70%,80%和90%,并测试哪个会给出更好的结果。在90%的情况下,10%的测试可能会得到较差的准确性。