是否有一个经验法则来最好地将数据划分为训练集和验证集?平分妥当吗?或者相对于验证数据,拥有更多的训练数据是否有明显的优势(反之亦然)?或者这个选择很大程度上取决于应用程序?
我主要分别使用80% / 20%的训练数据和验证数据,但我选择这种划分没有任何原则性的理由。能找个在机器学习方面更有经验的人给我出主意吗?
是否有一个经验法则来最好地将数据划分为训练集和验证集?平分妥当吗?或者相对于验证数据,拥有更多的训练数据是否有明显的优势(反之亦然)?或者这个选择很大程度上取决于应用程序?
我主要分别使用80% / 20%的训练数据和验证数据,但我选择这种划分没有任何原则性的理由。能找个在机器学习方面更有经验的人给我出主意吗?
当前回答
去年,我参加了Andrew Ng教授的在线机器学习课程。他的建议是:
培训:60%
交叉验证:20%
测试:20%
其他回答
也许63.2% / 36.8%是一个合理的选择。原因可能是,如果总样本量为n,并希望从初始n中随机抽样替换(也称为重新抽样,如在统计引导中)n个案例,那么在重新抽样中选择单个案例的概率将约为0.632,前提是n不是太小,如这里解释的:https://stats.stackexchange.com/a/88993/16263
对于n=250的样本,单个案例被重新抽样到4位数字的概率为0.6329。 对于n=20000的样本,概率为0.6321。
假设你有较少的数据,我建议尝试70%,80%和90%,并测试哪个会给出更好的结果。在90%的情况下,10%的测试可能会得到较差的准确性。
有两个相互竞争的问题:训练数据越少,参数估计的方差就越大。使用更少的测试数据,您的性能统计数据将有更大的差异。一般来说,您应该关注划分数据,使方差都不会太高,这更多地与每个类别中实例的绝对数量有关,而不是百分比。
如果你总共有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
你应该再考虑一件事。
如果你有一个非常大的数据集,比如1,000,000个例子,分割80/10/10可能是不必要的,因为10% = 100,000个例子可能太多了,不能说模型工作得很好。
也许99/0.5/0.5就足够了,因为5000个例子可以代表你数据中的大部分方差,你可以很容易地在测试和开发中根据这5000个例子来判断模型是否有效。
不要仅仅因为你听说80/20是可以的就使用80/20。想想测试集的目的。
去年,我参加了Andrew Ng教授的在线机器学习课程。他的建议是:
培训:60%
交叉验证:20%
测试:20%