2013-02-03 37 views
0

我想提取隨機森林R實現的終端節點。正如我所瞭解的隨機森林,你有一系列正交樹。當你預測一個新的觀察結果(迴歸)時,它將進入所有這些樹,然後你平均預測每棵樹。如果我不想平均數,但也許用這些相應的觀測值進行線性迴歸,那麼我需要一個與這個新觀測值「相關聯」的觀測值列表。我已經通過源代碼,但沒有想出一個方法來獲得這個。誰能幫我?提取與新觀察相關的每棵樹的終端節點

回答

0

必須有一個更好的方式來做到這一點,但這裏有一個解決方法:

library(randomForest) 
set.seed(713) 
## data 
my.df <- data.frame(x = rnorm(100), y = rnorm(100)) 
## forest 
rf <- randomForest(y ~ x, data = my.df, ntree = 10, keep.inbag = TRUE) 

keep.inbag = TRUE節省了用於滿足每10種樹木在這個例子中,inbag意見

predList <- lapply(seq_len(rf$ntree), function(z) 
      predict(rf, newdata = my.df[rf$inbag[, z] == 1, ], nodes = TRUE)) 

nodes = TRUE磁道中的每個觀測結束終端節點。

node.list <- lapply(seq_len(rf$ntree), function(z) 
      split(x = my.df[rf$inbag[, z] == 1, "x"], 
        f = attr(predList[[z]], "nodes")[, z])) 

第一棵樹的前三個終端節點:

node.list[[1]][1:3] 

$`3` 
[1] 2.028358 2.071939 

$`7` 
[1] 0.8306559 

$`9` 
[1] 1.660134 1.621299 
+0

一切都很完美。謝謝! – JEquihua