ランダムフォレスト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]))
最初のツリーの最初の 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 に答える