Как получить суррогатные расщепления в модели ctree, партийный пакет в R

Я пытаюсь использовать ctree из party, чтобы получить дерево условной классификации. Дерево работало хорошо, но я просто не могу найти информацию о том, как увидеть результаты расщепления суррогатов из этого дерева.

Скрипт для модели такой:

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

Может ли кто-нибудь помочь мне увидеть суррогатные расколы? Спасибо!


person phil    schedule 22.08.2016    source источник


Ответы (1)


Во-первых, я рекомендую вам использовать повторную реализацию 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