2

ランダムフォレストR実装のターミナルノードを抽出したいと思います。私がランダムフォレストを理解したように、あなたは直交する木のシーケンスを持っています。新しい観測値を予測すると(回帰)、これらすべてのツリーに入り、個々のツリーの予測を平均します。平均化せずに、これらの対応する観測値で線形回帰を実行したい場合は、たとえば、この新しい観測値に「関連付けられている」観測値のリストが必要になります。私はソースコードを調べましたが、これを入手する方法を思いつきませんでした。誰か助けてもらえますか?

4

1 に答える 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]))

最初のツリーの最初の 3 つのターミナル ノード:

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 に答える