CART 决策树中的冲突拆分
Conflicting splits in CART decision tree
我目前在 R 中使用决策树 (CART) 和包 rpart 和 rattle 进行分类。
训练完我的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)
我目前在 R 中使用决策树 (CART) 和包 rpart 和 rattle 进行分类。
训练完我的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)