R: получить узлы от корня до листьев модели дерева?

Я использую R для создания модели дерева регрессии:

 library(party)
 mydata = read.csv(“data.csv”)
 TreeModel = ctree(price ~., data = mydata)

Я хотел бы извлечь узлы дерева от корня до любого из листьев. но я не мог найти какую-либо функцию для этого. Например, если дерево, как показано ниже: дерево регрессии Я хочу получить путь от корня до любых листьев. Таким образом, для первого листа справа<я хочу получить путь типа (Koc, AirDecat, OTW, OTW, AirDecay), а для самого левого листа он должен быть (Koc, AirDecay). Любая подсказка действительно приветствуется.

1 ответ

Решение

Как отметил MrFlick, вы должны предоставить воспроизводимый пример.

Это может помочь вам найти путь к объекту BinaryTree пакета party:

library(data.tree)
library(party)

airq <- subset(airquality, !is.na(Ozone))
airct <- ctree(Ozone ~ ., data = airq, 
               controls = ctree_control(maxsurrogate = 3))


CreateNodeFromParty <- function(splitNode) {
  node <- Node$new(splitNode$nodeID,
                   weights = splitNode$weights,
                   criterion = splitNode$criterion,
                   psplit = splitNode$psplit)
  if (!splitNode$terminal) {
    node$AddChildNode( CreateNodeFromParty(splitNode$left) )
    node$AddChildNode( CreateNodeFromParty(splitNode$right) )
  }
  return (node)
}


tree <- CreateNodeFromParty(airct@tree)

tree

Это даст вам структуру data.tree:

      levelName
1 1            
2  ¦--2        
3  ¦   ¦--3    
4  ¦   °--4    
5  ¦       ¦--5
6  ¦       °--6
7  °--7        
8      ¦--8    
9      °--9  

Чтобы найти конкретный узел, выполните:

tree$FindNode(6)$path

Который даст вам:

[1] "1" "2" "4" "6"
Другие вопросы по тегам