Answers:
有趣的是,最受支持的答案并没有真正回答问题:),所以我认为可以用更多的理论来支持这一点很好-大部分取材于“数据挖掘:实用的机器学习工具和技术”和Tom Mitchell的“机器学习”。
介绍。
因此,我们有一个分类器和一个有限的数据集,一定数量的数据必须进入训练集中,其余的用于测试(如有必要,第三个子集用于验证)。
我们面临的难题是:要找到一个好的分类器,“训练子集”应尽可能大,但要获得良好的误差估计,“测试子集”应尽可能大-但两个子集均取自同一个游泳池。
显然,训练集应该大于测试集-也就是说,分割不应为1:1(主要目标是训练,而不是测试)-但不清楚分割的位置。
保持程序。
将“超集”拆分为子集的过程称为保持方法。请注意,您可能很容易倒霉,并且其中一个子集中的某个类的示例可能会丢失(或过度显示),可以通过以下方法解决
在单个(未重复的)保留过程中,您可以考虑交换测试和训练数据的角色,并对两个结果取平均值,但这只有在训练和测试集之间以1:1划分是合理的,这是不可接受的(请参阅简介)。)。但这给出了一个主意,并提出了一种改进的方法(改用交叉验证)-见下文!
交叉验证。
在交叉验证中,您确定固定倍数(数据分区)。如果我们使用三折,则数据将分为三个相等的分区,
这称为三重交叉验证,如果也采用分层(通常是这样),则称为分层三重交叉验证。
但是,瞧,标准方法不是 2/3:1/3拆分。引用“数据挖掘:实用的机器学习工具和技术”,
daccess-ods.un.org daccess-ods.un.org标准方法是使用分层的10倍交叉验证。数据被随机分为10个部分,其中类别的表示比例与完整数据集中的比例大致相同。每个部分依次进行,剩余的十分之九训练了学习方案;然后根据保留集计算其错误率。因此,在不同的训练集上执行该学习过程总共10次(每个训练集有很多共同点)。最后,将10个误差估计值平均,以得出整体误差估计值。
为什么是10?因为“在许多数据集,具有不同学习技术..Extensive测试已经表明,10倍左右的权数,以获得错误的最佳估计,而且也有一些理论的证据表明,背上这件事。”我的天堂尚未找到它们意味着哪些广泛的测试和理论证据,但是,这似乎是挖掘更多内容的一个良好的开始-如果您愿意的话。
他们基本上只是说
尽管这些论点绝不是结论性的,并且在机器学习和数据挖掘领域中,关于什么是最佳评估方案的争论仍在继续,但实际上十倍交叉验证已成为标准方法。[...]而且,确切的数字10没有什么神奇之处:5倍或20倍交叉验证可能几乎一样好。
引导程序-终于!-原始问题的答案。
但是我们还没有得到答案,为什么经常建议使用2/3:1/3。我认为这是从bootstrap方法继承的。
它基于带有替换的采样。以前,我们将“大集合”中的样本恰好放入其中一个子集中。自举法不同,样本可以轻松地出现在训练和测试集中。
让我们看看到一个特定的场景中,我们需要一个数据集D1的ñ情况下,品尝它ñ与更换时间,以获得另一数据集D2的ñ实例。
现在仔细观察。
由于D2中的某些元素(几乎可以肯定)将被重复,因此原始数据集中必须有一些尚未被选择的实例:我们将使用它们作为测试实例。
没有为D2选择特定实例的机会是什么?每次拿起的概率为1 / n,因此反之为(1-1 / n)。
当我们将这些概率相乘时,是(1/1 / n)^ n,即e ^ -1,约为0.3。这意味着我们的测试集约为1/3,而训练集约为2/3。
我猜这就是为什么建议使用1/3:2/3分割的原因:该比率来自自举估算方法。
包起来。
我想以数据挖掘书中的一句话作为结束语(我无法证明但假设是正确的),他们通常建议选择10倍交叉验证:
对于非常小的数据集,引导过程可能是估计误差的最佳方法。但是,与留一法式交叉验证一样,它的缺点可以通过考虑特殊的人工情况(具有两个类别的完全随机的数据集)来说明。任何预测规则的真实错误率均为50%,但是记忆训练集的方案将获得100%的完美替代分数,因此训练实例= 0,而0.632引导程序会将其与0.368的权重混合总的错误率仅为31.6%(0.632¥50%+ 0.368¥0%),这令人产生误解。
考虑有限的m个记录集。如果将所有记录用作训练集,则可以使用以下多项式完美拟合所有点:
y = a0 + a1 * X + a2 * X ^ 2 + ... + an * X ^ m
现在,如果您有一些不在训练集中使用的新记录,并且输入向量X的值与在训练集中使用的任何向量X不同,那么您能告诉我们预测y的准确性吗?
我建议您看一个具有一维或二维输入向量X(以可视化过拟合多项式)的示例,并检查某对(X,y)的预测误差有多大,其中X值只是一个与训练集中的值几乎没有什么不同。
我不知道这种解释在理论上是否足够,但希望能有所帮助。我试图解释回归模型上的问题,因为我认为它比其他模型(SVM,神经网络...)更直观易懂。
构建模型时,应至少将数据拆分为训练集和测试集(有些将数据拆分为训练,评估和交叉验证集)。通常,70%的数据用于训练集,而30%的数据用于评估,然后,在构建模型时,您必须检查训练误差和测试误差。如果两个误差都很大,则意味着您的模型过于简单(该模型具有较高的偏差)。另一方面,如果您的训练误差很小,但是训练误差和测试误差之间却有很大差异,则意味着您的模型过于复杂(该模型具有较高的方差)。
选择正确折衷方案的最佳方法是绘制各种复杂性模型的训练和测试误差,然后选择测试误差最小的方法(请参见下图)。
这是泛化的问题,也就是说,我们的假设将正确地分类不属于训练集的未来示例的程度。请看这个奇妙的例子,如果您的模型只适合您拥有的数据而不适合一个新数据,会发生什么情况:Titius-Bode定律
到目前为止,@ andreiser很好地回答了OP关于培训/测试数据拆分问题的第二部分,@ niko解释了如何避免过拟合,但是没有人知道这个问题的优点:为什么使用不同的数据进行培训和评估帮助我们避免过度拟合。
我们的数据分为:
重要的是要认识到Validation和Test实例的不同角色。
有关更多详细信息,请参见《统计学习的要素:数据挖掘,推断和预测》的第222页。