2017-06-05 139 views
0

我創建了一個constparty決策樹(自定義拆分規則)並打印出樹結果。結果如下所示:R從partykit決策樹中提取終端節點信息

Fitted party: 
[1] root 
| [2] value.a < 1651: 0.067 (n = 1419, err = 88.6) 
| [3] value.a >= 1651: 0.571 (n = 7, err = 1.7) 

我試圖提取終端節點信息 (利用yval:0.067和0.571; 每個節點在n:1419和7; 和ERR:88.6和1.7)和把它們放入一個列表中,同時擁有相應的節點ID(節點ID 2和節點ID 3),以便我可以稍後使用這些信息。

我一直在尋找partykit功能一段時間,並找不到一個函數,可以幫助我提取我剛剛列出的信息。

有人可以幫我嗎?謝謝!

回答

1

像往常一樣有幾種方法來獲取您正在尋找的信息。提取存儲在特定node中的info的技術方式是使用nodeapply(object, ids, info_node),其中info_node返回存儲在相應節點中的信息的列表。

但是,在constparty對象的終端節點中沒有任何存儲。相反,通過擬合節點的整個響應分佈被存儲並且可以通過fitted(object)來提取。這包含一個觀察到的(response)節點(fitted)和觀察(weights)(如果有的話)的數據幀。然後就可以很容易地使用tapply()aggregate()或類似的東西來計算節點明智裝置等

備選地,可以將constparty對象轉換爲simpleparty對象,其存儲在節點中的印刷信息和提取它。

一個樣例兩個策略是爲cars數據的簡單迴歸樹:

library("partykit") 
data("cars", package = "datasets") 
ct <- ctree(dist ~ speed, data = cars) 

然後你就可以很容易地通過

with(fitted(ct), tapply(`(response)`, `(fitted)`, mean)) 
##  3  4  5 
## 18.20000 39.75000 65.26316 

當然計算節點明智mean S,你可以用您感興趣的任何其他彙總統計數字替換mean

nodeapply() for t他simpleparty可以通過:

nodeapply(as.simpleparty(ct), ids = nodeids(ct, terminal = TRUE), info_node) 
## $`3` 
## $`3`$prediction 
## [1] 18.2 
## 
## $`3`$n 
## n 
## 15 
## 
## $`3`$error 
## [1] 1176.4 
## 
## $`3`$distribution 
## NULL 
## 
## $`3`$p.value 
## NULL 
## 
## 
## $`4` 
## $`4`$prediction 
## [1] 39.75 
## ... 
+0

非常感謝你的回答!你是R的DT之王!我非常感謝你在這件事上給予我的所有幫助,我希望我能繼續向你學習! –

+0

@RichardLi我不確定它是否符合貴族的要求,但如果我們的軟件對您有用,我很高興! ;-) –

+0

我可以問一個關於這個話題的後續問題嗎?我已經使用nodeapply(info_node)提取了信息,並且我想使這個過程自動化,例如:創建一個函數來提取一系列節點的節點信息,但是我沒有在函數中這樣做。提取需要使用記號「nodeinfo $'nodeid' $ distribution」作爲示例,但是在函數內部,如果我將j定義爲節點id,則該函數無法識別nodeinfo $'j' $分佈的表示法。你有解決方案嗎?非常感謝!! –

相關問題