CART 决策树中的冲突拆分

Posted

技术标签:

【中文标题】CART 决策树中的冲突拆分【英文标题】:Conflicting splits in CART decision tree 【发布时间】:2016-05-05 04:14:37 【问题描述】:

我目前在 R 中使用决策树 (CART) 和包 rpartrattle 进行分类。

在训练我的 CART 树后,我发现一些规则相互冲突。考虑下面的树,其中的冲突规则用红色圆圈表示。

在父节点中拆分为 CHWC.VLV >= 15;如果这是真的,你在树的左边,如果它是假的,你在树的右边。在左边,我们发现子节点的规则是 CHWC.VLV

有人知道这种明显冲突的原因吗?

【问题讨论】:

回归不好的预测方面之一是 NA。另一方面,树方法在这些方面没有困难。你确定这不是那些分裂之一吗? (除了推测之外,需要数据来做任何事情。) 也感谢42的贡献。 【参考方案1】:

这类问题通常是因为在输出 CART 树时没有使用足够的精度来输出。作为一个简单的例子,让我们考虑以下数据集:

CHWC.VLV <- seq(14, 16, length.out=10000)
outcome <- ifelse(CHWC.VLV >= 14.97, ifelse(CHWC.VLV <= 15.34, 1, 2), 3)

我们可以使用以下方法训练和绘制 CART 模型:

library(rpart)
mod <- rpart(outcome~CHWC.VLV)
library(rpart.plot)
prp(mod)

这似乎是矛盾的,因为根节点的左子树应该具有所有值CHWC.VLV &gt;= 15,但下一个拆分是CHWC.VLV &lt; 15。然而,在以更高的准确度进行绘图时,我们发现这实际上并不矛盾:

prp(mod, digits=4)

【讨论】:

以上是关于CART 决策树中的冲突拆分的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 scikit-learn 指定决策树中的拆分顺序?

机器学习总结决策树ID3,C4.5算法,CART算法

“拆分属性”可以在决策树中出现多次吗?

为啥基尼指数考虑决策树中的二分法?

如何在 Scikit Learn 决策树中根据分类变量拆分节点?

如何获取决策树中的所有基尼指数?