我想提取随机森林 R 实现的终端节点。据我了解随机森林,您有一系列正交树。当您预测一个新的观测值(回归)时,它会进入所有这些树,然后对每棵树的预测进行平均。如果我不想平均,但可能对这些相应的观察结果进行线性回归,我需要一个与这个新观察结果“相关”的观察结果列表。我已经浏览了源代码,但还没有想出一种方法来获得它。谁能帮我?
问问题
1312 次
1 回答
3
必须有更好的方法来做到这一点,但这里有一个解决方法:
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
于 2013-02-04T02:38:30.493 回答