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

我主要分别使用80% / 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。

其他回答

你会惊讶地发现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%用于培训。

你应该再考虑一件事。

如果你有一个非常大的数据集,比如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%

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

也许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。