如何最好地将数据划分为培训和验证集,是否有经验法则?是否建议平均50/50分割?或者,与验证数据相关的培训数据是否有明显优势(反之亦然)?或者这个选择几乎取决于应用程序?
我一直主要使用80%/ 20%的培训和验证数据,但我选择了这个部门,没有任何原则性原因。那些在机器学习方面经验丰富的人可以告诉我吗?
答案 0 :(得分:170)
存在两个相互竞争的问题:使用较少的训练数据,您的参数估计值会有更大的差异。使用较少的测试数据,您的性能统计信息将具有更大的差异。从广义上讲,你应该关注分割数据,使得方差都不会太高,这更多地与每个类别中的绝对实例数而不是百分比有关。
如果您总共有100个实例,那么您可能会遇到交叉验证,因为没有单个拆分可以使您的估算值出现满意的差异。如果您有100,000个实例,那么您选择80:20分割还是90:10分割并不重要(如果您的方法特别是计算密集型,您可以选择使用较少的训练数据)。
假设您有足够的数据来执行适当的保持测试数据(而不是交叉验证),以下是一种有助于处理差异的指导性方法:
答案 1 :(得分:47)
你会惊讶地发现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-dimension,描述相关,也可能不相关 长度,可调参数的数量或其他度量 复杂性。
采用第一个经验法则(即验证集应该与自由可调参数的平方根成反比),你可以得出结论,如果你有32个可调参数,那么32的平方根是~5.65,分数应为1 / 5.65或0.177(v / t)。大约17.7%应保留用于验证,82.3%用于培训。
答案 2 :(得分:41)
去年,我跟随教授:Andrew Ng的在线机器学习课程。他的建议是
培训:60%
交叉验证:20%
测试:20%
答案 3 :(得分:3)
那么你应该考虑另外一件事。
如果您有非常大的数据集,例如10 000 000个示例,则可能不需要拆分80/10/10,因为10%= 100000个示例不需要告诉该模型正常工作。
也许99 / 0.5 / 0.5就足够了,因为5000个例子可以代表数据中的大部分差异,你可以很容易地根据test和dev中的5000个例子判断该模型是否正常工作。
答案 4 :(得分:1)
或许63.2%/ 36.8%是合理的选择。原因是如果你有一个总样本量 n 并想随机抽样替换(也就是重新抽样,如在统计引导程序中) n 的情况在初始 n 中,如果 n 不是太小,则在重新采样中选择单个案例的概率约为0.632,如下所述:{{ 3}}
对于 n = 250的样本,选择重新采样为4位的个案的概率为0.6329。 对于 n = 20000的样本,概率为0.6321。
答案 5 :(得分:1)
这一切都取决于手头的数据。如果您有大量数据,那么80/20是一个很好的选择,如上所述。但是,如果您没有使用50/50分割进行交叉验证可能会帮助您更多,并阻止您创建模型过度拟合您的训练数据。
答案 6 :(得分:0)
假设数据较少,我建议尝试70%,80%和90%并进行测试,以得出更好的结果。在90%的情况下,对于10%的测试,您可能会获得较差的准确性。