Во-первых, я рекомендую вам использовать повторную реализацию ctree()
в пакете partykit
, который был оптимизирован и улучшен, а также имеет более чистую инфраструктуру для деревьев. Это полезно для извлечения суррогатных расщеплений. В качестве воспроизводимого примера возьмем
library("partykit")
ct <- ctree(Species ~ ., data = iris, maxsurrogate = 3)
Теперь каждый внутренний узел дерева в ct
имеет $surrogates
элемент из (до) 3 partysplit
объектов. Например, если я хочу извлечь 2-й суррогатный раскол в 3-м узле, я могу сделать:
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
из model.frame(ct)
(т. е. Sepal.Length
) в точке разделения 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"
person
Achim Zeileis
schedule
23.08.2016