提取与新观察相关联的每棵树的终端节点

时间:2013-02-03 20:15:10

标签: r regression linear-regression random-forest

我想提取随机林R实现的终端节点。正如我已了解随机森林,你有一系列正交树。当您预测新观察时(在回归中),它会进入所有这些树,然后平均每个树的预测。如果我不想平均但可能使用这些相应的观察进行线性回归,那么我需要一个与这个新观察结果“相关”的观察列表。我已经完成了源代码,但还没有找到一种方法来获取它。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分: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