Обход бинарного дерева для получения условий расщепления - ctree(party), рекурсивная функция

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

После примерки Classification использование дерева library(party)Я пытаюсь получить условия разделения дерева на каждом узле. Мне удалось написать код, который, по моему мнению, работал нормально, пока я не нашел ошибку. Может ли кто-нибудь помочь мне решить это?

Мой код:

 require(party)
 iris$Petal.Width <- as.factor(iris$Petal.Width)#imp to convert to factorial
 (ct <- ctree(Species ~ ., data = iris))
 plot(ct)
 #print(ct)
  a <- ct #convert it to s4 object
  t <- a@tree

 #recursive function to traverse the tree and get the splitting conditions

 recurse_tree <- function(tree,ret_list=list(),sub_list=list()){
   if(!tree$terminal){
     sub_list$assign <-list(tree$psplit$splitpoint,tree$psplit$variableName,class(tree$psplit))
     names(sub_list)[which(names(sub_list)=="assign")] <- paste("node",tree$nodeID,sep="")
     ret_list <- recurse_tree(tree$left, ret_list, sub_list)
     ret_list <- recurse_tree(tree$right, ret_list, sub_list)

  }
  if(tree$terminal){
    ret_list$assign <- c(sub_list, tree$prediction)
    names(ret_list)[which(names(ret_list)=="assign")] <- paste("node",tree$nodeID,sep="")
    return(ret_list)
   }
   return(ret_list)
  }

  result <- recurse_tree(t) #call to the functions

Теперь результат дает мне список всех узлов и условий разделения и прогнозов (я предположил). Но когда я проверяю условия разделения для

  • ожидаемый результат на Node5: {1.1, 1.2, 1.6, 1.7} # from printing the tree print(ct), I get this
  • вывод, который я получаю на Node5 из своей функции: {"1", "1.3","1.4","1.5" }, что в основном является условием разделения Node6, что неверно. Как я это получил?

    z <- result[2] #I know node5 is second in the list

    z <- unlist(z,recursive = F,use.names = T) #unlist
    levels(z[[3]][[1]]) [which((z[[3]][[1]])==0)] #to find levels of corresponding values
    

сюжет для более подробной информации

В чем я сомневаюсь, моя функция (recurse_tree) всегда дает мне условия разделения правого конечного узла, а не левого узла. Любая помощь будет оценена.

0 ответов

Другие вопросы по тегам