集成学习的k折交叉验证


20

我对如何对数据进行分区以进行整体学习的k倍交叉验证感到困惑。

假设我有一个用于分类的整体学习框架。我的第一层包含分类模型,例如svm,决策树。

我的第二层包含一个投票模型,该模型结合了第一层的预测并给出了最终预测。

如果我们使用5折交叉验证,我正在考虑使用5折,如下所示:

  • 3折训练第一层
  • 1折训练第二层
  • 1折测试

这是正确的方法吗?第一和第二层的训练数据是否应该独立?我认为它们应该是独立的,这样整体学习框架将很健壮。

我的朋友建议第一层和第二层的训练数据应该相同,即

  • 4折训练第一层和第二层
  • 1折测试

这样,我们将获得更准确的整体学习框架错误,并且该框架的迭代调整将更准确,因为它基于单个训练数据。而且,第二层可能偏向于独立训练数据

任何建议都将不胜感激

Answers:


26

集成学习指的是很多不同的方法。提振和装袋可能是最常见的两个。看来您正在尝试实现一种称为stacking的整体学习方法。堆叠旨在通过组合几种学习算法的预测来提高准确性。有很多方法可以进行堆叠,但是没有很多严格的理论。它是直观且受欢迎的。

考虑你朋友的方法。您要在五折中的四折上拟合第一层模型,然后使用相同的四折来拟合第二层(投票)模型。问题在于第二层将青睐具有最低训练误差的模型。您正在使用相同的数据来拟合模型并设计一个过程来聚合那些模型。第二层应使用样本外预测来组合模型。您的方法更好,但是有一种方法可以做得更好。

为了测试目的,我们将继续不遗余力。进行四折,并使用四折CV获得所有四折上每个第一层模型的样本外预测。也就是说,忽略四折之一,将模型拟合其他三折,然后根据保留的数据进行预测。对所有四折重复上述操作,以便获得所有四折的样本外预测。然后将第二层模型拟合到这些样本外预测。然后在所有四个折痕上再次拟合第一层模型。现在,您可以进入尚未触及的第五折。使用适合所有四个折叠的第一层模型以及第二层模型来估计保留数据上的误差。您可以使用第一层和第二层模型拟合之外的其他折痕再次重复此过程。

如果您对性能满意,则在所有五个折痕上生成第一层模型的样本外预测,然后在第二个模型上拟合第二层模型。然后最后一次将第一层模型适合所有数据,并将其与第二层模型一起用于任何新数据!

最后,一些一般性建议。如果您的第一层模型彼此完全不同,您将获得更多收益。您在这里使用SVM和决策树在正确的道路上,两者之间有很大的不同。由于第二层模型具有平均效果,因此您可能希望尝试增量地过度拟合第一层模型,特别是如果您有很多模型的话。第二层通常很简单,并且权重的非负性和单调性之类的约束很常见。最后,请记住,堆叠依赖于交叉验证,交叉验证只是对真实风险的估计。如果您对折线的错误率和模型权重的差异非常大,则表明基于简历的风险估计具有较高的方差。在这种情况下,您可能需要考虑简单的混合您的第一层模型。或者,您可以通过限制每个第一层模型上的最大/最小权重进行堆叠来妥协。


谢谢您的有益建议。我不明白你的第四段。在我看来,它又在重新训练?我以为您的第三段总结了您提出的方法?
迈克尔

1
与交叉验证一样,一旦对模型感到满意,我们便会使用所有数据进行重新训练。第三段中描述的模型不适用于保留的数据。保留数据是指导模型评估和选择的工具。您应该始终将最终模型适合所有数据。
MichaelJ 2014年

在我看来,这种方法类似于前馈神经网络
Michael

很好的解释。唯一缺少的是图表;)
josh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.