【问题标题】:Help Understanding Cross Validation and Decision Trees帮助理解交叉验证和决策树
【发布时间】:2011-01-19 20:49:03
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: algorithm machine-learning decision-tree


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 好吧,如果我想到这可能意味着我可以在给定数据集的情况下比较不同类型的分类器(决策树与 SVM),并说出哪个更有可能正确预测。我认为交叉验证确实与修剪或用于修剪的统计数据无关。有一个用于构建树的训练集和另一个用于执行修剪的集(即测试集)就足够了吗?大多数 UCI 数据都带有单独的训练和测试集,这就是我问的原因。
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-01-24
              • 2016-05-07
              • 1970-01-01
              • 2017-11-24
              • 2019-03-25
              • 2019-09-12
              • 2016-05-05
              • 2021-05-27
              相关资源
              最近更新 更多