如何将数据集划分为训练集和验证集是否有经验法则?

时间:2012-11-28 16:42:51

标签: machine-learning

如何最好地将数据划分为培训和验证集,是否有经验法则?是否建议平均50/50分割?或者,与验证数据相关的培训数据是否有明显优势(反之亦然)?或者这个选择几乎取决于应用程序?

我一直主要使用80%/ 20%的培训和验证数据,但我选择了这个部门,没有任何原则性原因。那些在机器学习方面经验丰富的人可以告诉我吗?

7 个答案:

答案 0 :(得分:170)

存在两个相互竞争的问题:使用较少的训练数据,您的参数估计值会有更大的差异。使用较少的测试数据,您的性能统计信息将具有更大的差异。从广义上讲,你应该关注分割数据,使得方差都不会太高,这更多地与每个类别中的绝对实例数而不是百分比有关。

如果您总共有100个实例,那么您可能会遇到交叉验证,因为没有单个拆分可以使您的估算值出现满意的差异。如果您有100,000个实例,那么您选择80:20分割还是90:10分割并不重要(如果您的方法特别是计算密集型,您可以选择使用较少的训练数据)。

假设您有足够的数据来执行适当的保持测试数据(而不是交叉验证),以下是一种有助于处理差异的指导性方法:

  1. 将您的数据拆分为培训和测试(80/20确实是一个很好的起点)
  2. 培训数据拆分为培训和验证(再次,80/20是公平的分割)。
  3. 您的训练数据的子样本随机选择,用此训练分类器,并在验证集上记录性能
  4. 尝试使用不同数量的训练数据进行一系列运行:随机抽样20%,比如10次,观察验证数据的性能,然后对40%,60%,80%进行相同的操作。您应该看到更多数据的性能更高,但不同随机样本的差异也更小
  5. 要获得由于测试数据大小而导致的差异处理,请反向执行相同的过程。训练所有训练数据,然后多次随机抽取一部分验证数据,并观察表现。您现在应该发现,验证数据的小样本的平均性能与所有验证数据的性能大致相同,但是测试样本数量较少时方差更大

答案 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%的测试,您可能会获得较差的准确性。