2013-07-11 60 views
3

如何獲取每行的終端節點rpart模型的ID(或名稱)? predict.rpart只能返回預測類別(數量或因子)或類別概率或某種組合(使用type="matrix")作爲分類樹。獲取rpart模型節點的ID /名稱

我想這樣做:

fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis) 
plot(fit) # there are 5 terminal nodes 
predict(fit, type = "node_id") # should return IDs of terminal nodes (e.g. 1-5) (does not work) 

回答

4

對於模型有4個分割,得到5「終端節點」,或在rpart包所使用的術語:<leaf>秒。我不明白爲什麼應該有5個預測任何事情。預測是針對特定情況的,葉子是用於進行這些預測的可變數量分割的結果。在在葉結束了原始數據集行的數量可以是你想要的,在這種情況下,這些都是讓這些數字的方式:

# Row-wise predicted class 
fit$where 

# counts of cases in leaves of prediction rules 
table(fit$where) 
3 5 7 8 9 
29 12 14 7 19 

爲了組裝適用於一個特定的葉labels(fit) ,您需要遍歷規則樹並累積所有應用於生成特定葉子的分割的所有標籤。你可能想看看:

?print.rpart  
?rpart.object 
?text.rpart 
?labels.rpart 
+0

謝謝,1-5我的意思是終端節點的ID。你的答案可以工作,我可以簡單地使用'kyphosis [「id_node」] <-fit $ where'來爲原始數據框分配葉ID。 –

1

上面的方法使用$,其中彈出只在樹框架中的行號。所以一些觀察可能使用kyphosis$ID = fit$where 時,爲了獲得實際的葉節點ID使用下面的分配節點ID,而不是葉節點ID:

MyID <- row.names(fit$frame) 
kyphosis$ID <- MyID[fit$where] 
5

partykit包支持predict(..., type = "node"),在國內外享有很高的樣品。你可以簡單地將rpart對象轉換爲使用這個:

library("partykit") 
predict(as.party(fit), type = "node") 
## 9 7 9 9 3 3 3 3 3 8 8 3 9 5 3 3 3 7 3 5 3 9 8 9 9 5 9 8 3 3 3 7 7 3 7 3 5 ## 9 5 8 
## 9 7 9 9 3 3 3 3 3 8 8 3 9 5 3 3 3 7 3 5 3 9 8 9 9 5 9 8 3 3 3 7 7 3 7 3 5 ## 9 5 8 
## 9 5 9 9 3 7 3 7 9 7 8 3 9 3 3 3 5 9 5 8 9 9 9 3 3 5 3 7 5 3 7 7 3 7 3 3 7 ## 5 7 9 
## 9 5 9 9 3 7 3 7 9 7 8 3 9 3 3 3 5 9 5 8 9 9 9 3 3 5 3 7 5 3 7 7 3 7 3 3 7 ## 5 7 9 
## 5 
## 5 
table(predict(as.party(fit), type = "node")) 
## 3 5 7 8 9 
## 29 12 14 7 19