我一直在研究决策树和交叉验证,我理解这两个概念。然而,我在理解交叉验证如何应用于决策树时遇到了困难。交叉验证的本质是当你的数据集相对较小时,可以在训练和测试之间交替,以最大化你的错误估计。一个非常简单的算法大致如下:
- 决定你想要的折叠数(k)
- 将你的数据集细分为k个折叠
- 使用k-1个折叠作为训练集来构建一棵树
- 使用测试集来估计树中错误的统计数据
- 保存你的结果以备后用
- 重复步骤3-6 k次,每次留下不同的折叠作为测试集
- 平均每次迭代的错误以预测总体错误
我无法解决的问题是,最后你会有k棵决策树,这些树可能略有不同,因为它们可能不会以相同的方式分裂等。你选择哪棵树呢?我有一个想法是选择错误最小的那个(虽然这并不意味着它是最优的,只是它在给定的折叠上表现得最好 – 也许使用分层会有所帮助,但我读到的一切都说这只会帮助一点点)。
据我所知,交叉验证的目的是计算节点内统计数据,这些数据稍后可用于修剪。因此,树中的每个节点都会根据给定的测试集计算其统计数据。重要的是这些节点内的统计数据,但如果你在平均你的错误。你如何在k棵树中合并每个节点内的这些统计数据,当每棵树在选择分裂点等方面可能有所不同时?
计算每次迭代的总体错误有什么意义呢?这在修剪过程中是无法使用的。
对于这个小问题,任何帮助都将不胜感激。
回答:
我无法解决的问题是,最后你会有k棵决策树,这些树可能略有不同,因为它们可能不会以相同的方式分裂等。你选择哪棵树呢?
交叉验证的目的不是帮助选择分类器的特定实例(或决策树,或任何自动学习应用),而是验证模型,即提供诸如平均错误率、相对于该平均值的偏差等指标,这些指标有助于断言从应用中可以期望的精度水平。交叉验证可以帮助断言训练数据是否足够大。
关于选择特定树,你应该在100%的可用训练数据上再进行一次训练,因为这通常会产生更好的树。(交叉验证方法的缺点是我们需要将[通常较少的]训练数据分成“折叠”,正如你在问题中暗示的,这可能导致树对特定数据实例过度拟合或拟合不足)。
在决策树的情况下,我不确定你提到的在节点中收集的用于修剪树的统计数据指的是什么。可能是交叉验证相关技术的特定使用?…