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"