我一直在阅读决策树和交叉验证,我理解这两个概念。但是,我无法理解交叉验证,因为它与决策树有关。基本上,交叉验证允许您在数据集相对较小时在培训和测试之间切换,以最大化您的错误估计。一个非常简单的算法是这样的:
我无法弄清楚的问题是最终你会有k个决策树,它们可能会略有不同,因为它们可能不会以相同的方式分割,等等。你选择哪棵树?我有一个想法是选择一个误差最小的一个(尽管这并不是最佳的,只是它在给出的折叠上表现最好 - 也许使用分层会有所帮助,但我读过的所有内容都说它只能帮助一点点)。
据我了解交叉验证,重点是计算节点统计信息,以后可以用于修剪。因此,树中的每个节点都会根据给定的测试集为其计算统计数据。重要的是节点统计中的这些,但是如果你的平均错误。当每棵树在他们选择拆分的地方等方面有所不同时,如何在k树中的每个节点内合并这些统计数据等。
计算每次迭代的总体错误有什么意义?这不是修剪过程中可以使用的东西。
任何有关这种小皱纹的帮助都会非常感激。
答案 0 :(得分:20)
我无法弄清楚的问题是,最终你会得到k个决策树,这些树可能会略有不同,因为它们可能不会以相同的方式分割,等等。你选择哪一棵树?
交叉验证的目的不是为了帮助选择分类器(或决策树,或任何自动学习应用程序)的特定实例,而是为了限定< em> model ,即提供诸如平均误差率,相对于该平均值的偏差等的度量,这可用于断言应用程序可以预期的精度水平。交叉验证之一可以帮助确定训练数据是否足够大。
关于选择特定树,您应该对100%的可用训练数据进行另一次训练,因为这通常会产生更好的树。 (交叉验证方法的缺点是我们需要将[通常很少]的训练数据量划分为“折叠”,并且当您在问题中暗示这可能导致对于特定数据实例而言过度拟合或不合适的树木)
在决策树的情况下,我不确定您对节点中收集的统计信息的引用是什么,并且用于修剪与之相关的树。也许特别使用交叉验证相关技术?...
答案 1 :(得分:5)
对于第一部分,和其他人一样,我们通常使用整个数据集来构建最终模型,但我们使用交叉验证(CV)来更好地估计新看不见的数据的泛化错误。
对于第二部分,我认为您将CV与验证集混淆,用于通过在计算某个函数值时修剪节点来避免过度拟合树。验证集在分割之前/之后不会增加。
答案 2 :(得分:2)
使用交叉验证的要点是,它可以让您在使用不同数据时更好地估计训练模型的性能。
你选哪一棵树?一种选择是使用训练集的所有数据来构建新树。
答案 3 :(得分:2)
已经提到交叉验证的目的是使模型合格。换句话说,交叉验证为我们提供了使用所选“参数”生成的模型的误差/准确度估计,而不管使用的数据如何。 可以使用不同的参数重复corss验证过程,直到我们对性能满意为止。然后我们可以在整个数据上训练具有最佳参数的模型。
答案 4 :(得分:1)
交叉验证不用于构建/修剪决策树。它用于通过模拟新数据的到达来估计树(建立在所有数据上)的好处(通过构建没有一些元素的树,就像你写的一样)。我选择由它生成的树之一是没有意义的,因为模型受到你拥有的数据的限制(当你将树用于新数据时,不使用它可能实际上更糟糕。)
树是根据您选择的数据构建的(通常是所有数据)。修剪通常使用一些启发式方法(即节点中90%的元素属于A类,因此我们不再进一步或信息增益太小)。
答案 5 :(得分:0)
我目前正面临着同样的问题,我认为没有“正确”的答案,因为这些概念是相互矛盾的,并且需要在模型鲁棒性和模型解释之间进行权衡。 我基本上选择决策树算法是为了易于解释,可视化和直接动手应用。 另一方面,我想使用交叉验证来证明模型的鲁棒性。 我想我将采用两步法: 1.应用k倍交叉验证以显示该数据集算法的鲁棒性 2.将整个数据集用于最终决策树以获得可解释的结果。
您还可以随机选择交叉验证的树集或性能最好的树,但是随后您将失去保留集的信息。