2012-09-18 5 views
2

트리를 설명하는 if/then 문이 있습니다. 예를 들어 :규칙에서 트리를 빌드/시각화하십시오.

불평등
node1: if VAR1 < X node = 2 else node = 3 
node2: if VAR2 < Y node = 4 else node = 5 
node3: terminal value = Z 
... 

는 항상 "<"이하로 표현된다. 규칙은 트리 깊이 순서대로 이루어질 필요는 없습니다.

문을 구문 분석하는 작업을 무시하고 R에서 트리를 작성/시각화하는 가장 쉬운 방법은 무엇입니까? 반복적으로 트리를 빌드 한 다음 plot()을 호출하기 위해 규칙 당 한 번 호출 할 수있는 객체/함수/패키지가 있습니까? 앞서 준 코멘트에서 확장

+0

파티 패키지를 보았습니까? –

+0

아직 포인터가 없습니다. – SFun28

+0

나는 규칙의 순서가없는 독특한 나무를 파생시킬 수 있다고 생각하지 않는다. –

답변

0

이는 party 패키지 plot.BinaryTree의 예의 선두입니다 :

set.seed(290875) 

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

    ### regression: boxplots in each node 
    plot(airct, terminal_panel = node_boxplot, drop_terminal = TRUE) 

그리고 위의 ctree 명령에 따라 다음과 같은 그래프 생성

enter image description here

패키지에는 두 가지 꽤 괜찮은 비 네트가있어 시작해야합니다.

+0

감사합니다, 더크! 이 패키지의 영상은 훌륭합니다. – SFun28

0

pkg : party 메소드에 대한 코드를 파고 들었지만 종속성을 매우 효과적으로 따라갈 수 없었습니다. 나는 rpart 패키지 코드를 보는 것이 더 쉬울 것이라고 생각했다. (편집 : 더 생각이 igraph 패키지보고하는 것입니다.)

require(rpart) 
fit <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosis) 
print(fit) 
#------------ 
n= 81 

node), split, n, loss, yval, (yprob) 
     * denotes terminal node 

1) root 81 17 absent (0.79.20987654) 
    2) Start>=8.5 62 6 absent (0.90322581 0.09677419) 
    4) Start>=14.5 29 0 absent (1.00000000 0.00000000) * 
    5) Start< 14.5 33 6 absent (0.81818182 0.18181818) 
     10) Age< 55 12 0 absent (1.00000000 0.00000000) * 
     11) Age>=55 21 6 absent (0.71428571 0.28571429) 
     22) Age>=111 14 2 absent (0.85714286 0.14285714) * 
     23) Age< 111 7 3 present (0.42857143 0.57142857) * 
    3) Start< 8.5 19 8 present (0.42105263 0.57894737) * 
#---code resumes ------ 
plot(fit) 

enter image description here

rpart:::plot.rpart # will show the code ... depends on rpart::rpconvert 
rpart::rpconvert 
+0

감사합니다. 나는 rpart가하는 것을 해체하려는 같은 생각을 가지고 있었지만, 더 쉬운 방법이있을 것이라고 생각했다. – SFun28

0

는 또 다른 옵션은 data.tree 패키지가 될 것입니다. 당신은 예를 들어 할 수있는 :

levelName edgeLabel 
1 node1    
2 ¦--node2 VAR1 < X 
3 °--node3 VAR1 >= X 

또는 음모를 꾸미고 :로

tree <- Node$new("node1") 
tree$AddChild("node2", edgeLabel = "VAR1 < X") 
tree$AddChild("node3", edgeLabel = "VAR1 >= X") 

print(tree, "edgeLabel") 

이 보여줄 것

SetEdgeStyle(tree, label = function(node) node$edgeLabel) 
plot(tree) 

Nodes

각 노드는 정보를 저장할 수있다, 그래서 구문 분석 또한 파싱하는 동안 라우터로 트리를 사용할 수 있기 때문에 곧장 앞으로 나아갈 수 있습니다.

관련 문제