2013-02-03 1 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