CART 决策树中的冲突拆分

Conflicting splits in CART decision tree

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

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

在父节点中拆分为CHWC.VLV >= 15;如果这是真的,你就在树的左边,如果它是假的,你就在树的右边。在左侧,我们发现子节点的规则是 CHWC.VLV < 15。但是,根据父节点中的拆分规则,我不希望树的这一部分中的任何观察值具有值 CHWC.VLV < 15.

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

这种问题通常是因为在输出 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 >= 15,但是下一个分裂是CHWC.VLV < 15。然而,在以更多位精度绘制后,我们发现这实际上并不矛盾:

prp(mod, digits=4)