如何在ctree模型中获得代理拆分,R中的party包



我正在尝试使用party中的ctree来获得条件分类树。这棵树运行得很好,但我找不到任何关于如何从这棵树中查看代理拆分结果的信息。

模型的脚本是:

ctree(occurrence ~ ., data = type, controls = ctree_control(maxsurrogate = 3))

有人能帮我看看代孕者的分裂吗?谢谢

首先,我建议您在partykit包中使用ctree()的重新实现,该包经过了精简和改进,并且为树提供了更干净的基础设施。这有助于提取代理拆分。作为一个可重复的例子,让我们使用

library("partykit")
ct <- ctree(Species ~ ., data = iris, maxsurrogate = 3)

现在,ct中树的每个内部节点都有一个由(最多(3个partysplit对象组成的$surrogates元素。例如,如果我想提取第三个节点中的第二个代理拆分,我可以这样做:

nodeapply(ct, ids = 3, function(n) n$surrogates[[2]])
## $`3`
## $varid
## [1] 2
## 
## $breaks
## [1] 6.1
## 
## $index
## [1] 1 2
## 
## $right
## [1] TRUE
## 
## $prob
## NULL
## 
## $info
## NULL
## 
## attr(,"class")
## [1] "partysplit"

这意味着该代理在varid = 2中在分离点breaks = 6.1处从model.frame(ct)(即Sepal.Length(分离。较小的值将分配给第一个子节点,其余的分配给第二个子节点。

要以人类友好的形式获得这些信息,您可以执行以下操作:

sp32 <- nodeapply(ct, ids = 3, function(n) n$surrogates[[2]])
character_split(sp32[[1]], model.frame(ct))
## $name
## [1] "Sepal.Length"
## 
## $levels
## [1] "<= 6.1" "> 6.1" 

最新更新