Как указать несколько расщеплений в R-studio, используя дерево классификации ctree? - PullRequest
0 голосов
/ 03 мая 2019

Я использую 'ctree' для дерева классификации (переменная категориального ответа; New, Replace). Я уже получил помощь от других доступных ответов и вынудил модель начать расщепление на основе «года». У меня есть четыре независимые переменные (включая «Год»). Но модель просто использовала одну значимую переменную. Итак, я хочу заставить модель разделиться на другие узлы на основе других параметров.

Я получил помощь от Как указать разделение в дереве решений в R-программировании? @Achim Zeileis

...

дерево решений с пакетом 'party'

library(partykit)
set.seed(123)
tr1<- ctree(new_ROWTS ~ Year, data = training )
tr2<- ctree(new_ROWTS ~ Year + STI_OWTS_00+capacity_per_bed+system_type,
    data = training,
    subset = predict (tr1, type = "node")==2)
tr3<- ctree(new_ROWTS ~ Year + STI_OWTS_00+capacity_per_bed+system_type,
     data = training,
     subset = predict (tr1, type = "node")==3)
...........
##Extract the raw node structure from all three trees, fix-up nood id:##
fixids <-  function(x, startid = 1L) {
id <- startid - 1L 
new_node <- function (x) {
id <<- id +1L
if(is.terminal(x)) return(partynode(id, info = info_node(x)))
partynode(id, 
     split = split_node(x),
      kids = lapply(kids_node(x),new_node),
      surrogates = surrogates_node(x), 
      info = info_node(x))
}
return (new_node(x))
}
no <- node_party(tr1)
no$kids <- list (
      fixids(node_party(tr2), startid = 2L),
      fixids(node_party(tr3), startid = 3L)
)
no
............
##set up a joint model:##
d <- model.frame(new_ROWTS ~ Year + 
                 STI_OWTS_00+capacity_per_bed+system_type,
data = training)
tr <- party (no, data = d, 
            fitted = data.frame(
            "(fitted)" = fitted_node(no, data = d),
            "(response)" = model.response(d), check.names = FALSE),
             terms = terms(d),
             ) 
tr <- as.constparty(tr)
##Visualizing##
plot(tr)
##This is the output: Leaf 1 (year) divided to two nodes :before 1998[2],
and >aftre 1998 [3]. and node 3 splits to two [4] and [5]##
[1] root
|   [2] V2 <= 1 *
|   [3] V2 > 1
|   |   [4] V3 <= 10.52754 *
|   |   [5] V3 > 10.52754 *

1 Ответ

0 голосов
/ 04 мая 2019

Неясно, что вы хотите.Похоже, что вашим предикторам не хватает предсказательной силы, чтобы включить их в дерево.Принудительное расщепление, несмотря на несущественность связи с зависимой переменной, вероятно, не очень хорошее решение.

Если вы хотите увидеть структуру дерева, когда разрешаете расщепления на менее строгих уровнях специфичности (по умолчанию alpha = 0.05), вы можете использовать что-то вроде ctree(..., alpha = 0.8) и т. д. См. ?ctree_control для получения дополнительной информации.Однако полезны ли результаты такого дерева для интерпретации и / или предсказания - это другой вопрос.

...