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

How to get the surrogate splits in a ctree model, party package in R

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

模型的脚本是:

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

谁能帮我看看代孕分裂?谢谢!

首先,我建议您在 partykit 包中使用 ctree() 的重新实现,它已经过简化和改进,并且树的基础结构也更加清晰。这有助于提取代理拆分。作为一个可重现的例子,让我们使用

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

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

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"

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

要以人性化的形式获取此信息,您可以执行以下操作:

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"