34

我一直在阅读决策树和交叉验证,我理解这两个概念。但是,我无法理解与决策树有关的交叉验证。本质上,交叉验证允许您在数据集相对较小时在训练和测试之间交替,以最大化您的错误估计。一个非常简单的算法是这样的:

  1. 决定你想要的折叠次数(k)
  2. 将您的数据集细分为 k 个折叠
  3. 对训练集使用 k-1 折叠来构建树。
  4. 使用测试集来估计有关树中错误的统计信息。
  5. 保存结果以备后用
  6. 重复步骤 3-6 k 次,为您的测试集留出不同的折叠。
  7. 平均迭代中的错误以预测总体错误

我无法弄清楚的问题是最后你会有 k 个决策树,它们可能都略有不同,因为它们可能不会以相同的方式拆分,等等。你选择哪棵树?我的一个想法是选择错误最小的那个(尽管这并不能使它成为最佳选择,只是它在给出的折叠中表现最好 - 也许使用分层会有所帮助,但我读过的所有内容都说它只会有一点帮助)。

据我了解,交叉验证的重点是计算节点统计信息,以后可用于修剪。所以实际上树中的每个节点都会根据给它的测试集计算出统计数据。重要的是节点统计数据中的这些,但如果你平均你的错误。当每棵树的选择分裂的内容可能有所不同时,如何在 k 树的每个节点中合并这些统计信息等。

计算每次迭代的总体误差有什么意义?这不是修剪过程中可以使用的东西。

对于这个小皱纹的任何帮助将不胜感激。

4

6 回答 6

26

我无法弄清楚的问题是最后你会有 k 个决策树,它们可能都略有不同,因为它们可能不会以相同的方式拆分,等等。你选择哪棵树?

交叉验证的目的不是帮助选择分类器的特定实例(或决策树,或任何自动学习应用程序),而是限定模型,即提供诸如平均错误率、与此相关的偏差等指标平均值等,这对于断言应用程序可以期望的精度水平很有用。交叉验证可以帮助断言的一件事是训练数据是否足够大。

关于选择特定的树,您应该在 100% 的可用训练数据上运行另一次训练,因为这通常会产生更好的树。(交叉验证方法的缺点是我们需要将 [通常很少] 数量的训练数据划分为“折叠”,正如您在问题中暗示的那样,这可能导致树对特定数据实例过拟合或欠拟合) .

在决策树的情况下,我不确定您对节点中收集并用于修剪树的统计信息的引用与什么有关。也许是交叉验证相关技术的特殊用途?...

于 2010-02-22T23:08:42.170 回答
6

对于第一部分,就像其他人指出的那样,我们通常使用整个数据集来构建最终模型,但我们使用交叉验证(CV) 来更好地估计新数据的泛化误差。

对于第二部分,我认为您将 CV 与验证集混淆了,当验证集上计算的某些函数值在拆分之前/之后没有增加时,用于通过修剪节点来避免过度拟合树。

于 2010-02-24T03:58:35.297 回答
3

使用交叉验证的要点是,它可以让您更好地估计训练模型在用于不同数据时的性能。

你选哪棵树?一种选择是您使用所有数据作为训练集来构建一棵新树。

于 2010-02-22T23:10:01.453 回答
3

已经提到,交叉验证的目的是验证模型。换句话说,交叉验证为我们提供了使用所选“参数”生成的模型的误差/准确度估计,而不管使用的数据如何。可以使用不同的参数重复交叉验证过程,直到我们对性能感到满意为止。然后我们可以在整个数据上用最佳参数训练模型。

于 2011-03-01T21:55:47.840 回答
2

交叉验证不用于构建/修剪决策树。它用于通过模拟新数据的到达(通过构建没有某些元素的树,就像您编写的那样)来估计树(基于所有数据构建)的性能。选择它生成的树中的一棵我真的没有意义,因为模型受到您拥有的数据的约束(当您将树用于新数据时,不使用它实际上可能会更糟)。
树建立在您选择的数据之上(通常是所有数据)。剪枝通常使用一些启发式方法来完成(即节点中 90% 的元素属于 A 类,所以我们不再进一步,否则信息增益太小)。

于 2010-02-22T23:08:28.643 回答
1

我目前面临同样的问题,我认为没有“正确”的答案,因为这些概念是矛盾的,这是模型稳健性和模型解释之间的权衡。我基本上选择决策树算法是为了易于解释、可视化和直接动手应用。另一方面,我想使用交叉验证来证明模型的稳健性。我想我将采用两步法: 1. 应用 k 折交叉验证以显示该数据集的算法的稳健性 2. 将整个数据集用于最终决策树以获得可解释的结果。

您也可以随机选择交叉验证的树集或性能最佳的树,但随后您会丢失保留集的信息。

于 2019-05-01T08:13:01.740 回答