代码之家  ›  专栏  ›  技术社区  ›  chubbsondubs

帮助理解交叉验证和决策树

  •  26
  • chubbsondubs  · 技术社区  · 14 年前

    我一直在阅读决策树和交叉验证,我理解这两个概念。然而,我很难理解交叉验证,因为它涉及决策树。基本上,交叉验证允许您在数据集相对较小时在培训和测试之间进行交替,以最大限度地提高错误估计。一个非常简单的算法如下所示:

    1. 将数据集细分为k个折叠
    2. 使用k-1折叠作为训练集来构建树。
    3. 保存您的结果以备将来使用
    4. 对迭代中的错误进行平均,以预测总体错误

    我搞不清楚的问题是,最后你会得到k个决策树,它们可能会略有不同,因为它们可能不会以相同的方式拆分,等等。你会选择哪棵树?我的一个想法是选择误差最小的一个(虽然这并不能使它达到最佳状态,只是因为它在给定的折叠中表现最好——也许使用分层会有所帮助,但我读到的所有内容都说它只会有一点点帮助)。

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

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

    如果您能帮我解决这个小问题,我们将不胜感激。

    5 回复  |  直到 12 年前
        1
  •  26
  •   mjv    14 年前

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

    交叉验证的目的 不是帮助选择一个特定的 实例 模型 ,即提供诸如平均错误率、相对于该平均值的偏差等指标,这些指标可用于确定应用程序的精度水平。交叉验证可以帮助断言的一件事是训练数据是否足够大。

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

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

        2
  •  6
  •   Amro    14 年前

    对于第一部分,正如其他人所指出的,我们通常使用整个数据集来构建最终模型,但是我们使用 交叉验证

    第二部分,我认为你把简历和 验证集 过度装配 当在验证集上计算的某个函数值在拆分之前/之后没有增加时,通过修剪节点生成树。

        3
  •  3
  •   Rockcoder    14 年前

    你选哪棵树?一种选择是,使用所有用于训练集的数据创建一个新的树。

        4
  •  3
  •   anonymous    13 年前

    已经提到,交叉验证的目的是验证模型。换言之,交叉验证为我们提供了使用所选“参数”生成的模型的误差/精度估计,无论使用的数据如何。

        5
  •  2
  •   pablochan    14 年前

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

        6
  •  1
  •   Marco Caviezel    5 年前

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