是否有一个经验法则来最好地将数据划分为训练集和验证集?平分妥当吗?或者相对于验证数据,拥有更多的训练数据是否有明显的优势(反之亦然)?或者这个选择很大程度上取决于应用程序?

我主要分别使用80% / 20%的训练数据和验证数据,但我选择这种划分没有任何原则性的理由。能找个在机器学习方面更有经验的人给我出主意吗?


当前回答

你会惊讶地发现80/20是一个很常见的比率,通常被称为帕累托原则。如果你使用这个比例,通常是一个安全的赌注。

然而,根据您采用的培训/验证方法,这个比例可能会发生变化。例如:如果您使用10次交叉验证,那么您将在每次折叠中得到10%的验证集。

已经有一些关于训练集和验证集之间合适的比例的研究:

为验证集保留的模式的比例应该是 自由的数量与平方根成反比 可调参数。

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

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

其他回答

有两个相互竞争的问题:训练数据越少,参数估计的方差就越大。使用更少的测试数据,您的性能统计数据将有更大的差异。一般来说,您应该关注划分数据,使方差都不会太高,这更多地与每个类别中实例的绝对数量有关,而不是百分比。

如果你总共有100个实例,你可能会陷入交叉验证,因为没有一个单独的分割会给你的估计带来令人满意的方差。如果你有10万个实例,那么你选择80:20分割还是90:10分割并不重要(实际上,如果你的方法计算量特别大,你可以选择使用更少的训练数据)。

假设你有足够的数据来进行适当的测试数据(而不是交叉验证),下面是一种处理方差的指导方法:

Split your data into training and testing (80/20 is indeed a good starting point) Split the training data into training and validation (again, 80/20 is a fair split). Subsample random selections of your training data, train the classifier with this, and record the performance on the validation set Try a series of runs with different amounts of training data: randomly sample 20% of it, say, 10 times and observe performance on the validation data, then do the same with 40%, 60%, 80%. You should see both greater performance with more data, but also lower variance across the different random samples To get a handle on variance due to the size of test data, perform the same procedure in reverse. Train on all of your training data, then randomly sample a percentage of your validation data a number of times, and observe performance. You should now find that the mean performance on small samples of your validation data is roughly the same as the performance on all the validation data, but the variance is much higher with smaller numbers of test samples

去年,我参加了Andrew Ng教授的在线机器学习课程。他的建议是:

培训:60%

交叉验证:20%

测试:20%

你应该再考虑一件事。

如果你有一个非常大的数据集,比如1,000,000个例子,分割80/10/10可能是不必要的,因为10% = 100,000个例子可能太多了,不能说模型工作得很好。

也许99/0.5/0.5就足够了,因为5000个例子可以代表你数据中的大部分方差,你可以很容易地在测试和开发中根据这5000个例子来判断模型是否有效。

不要仅仅因为你听说80/20是可以的就使用80/20。想想测试集的目的。

这完全取决于手头的数据。如果您有相当多的数据,那么如上所述,80/20是一个不错的选择。但如果你不使用50/50分割的交叉验证,可能会帮助你更多,并防止你创建一个过度拟合训练数据的模型。

假设你有较少的数据,我建议尝试70%,80%和90%,并测试哪个会给出更好的结果。在90%的情况下,10%的测试可能会得到较差的准确性。