ランダム フォレストまたは条件付きランダム フォレストの単一ツリーの変数の重要度を計算する方法を R で見つけようとしています。
良い出発点は、ツリーrpart:::importance
の変数の重要度を計算するコマンドです。rpart
> library(rpart)
> rp <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)
> rpart:::importance(rp)
Start Age Number
8.198442 3.101801 1.521863
このrandomForest::getTree
コマンドは、オブジェクトからツリーの構造を抽出する標準ツールですが、次のrandomForest
ものが返されますdata.frame
。
library(randomForest)
rf <- randomForest(Kyphosis ~ Age + Number + Start, data = kyphosis)
tree1 <- getTree(rf, k=1, labelVar=TRUE)
str(tree1)
'data.frame': 29 obs. of 6 variables:
$ left daughter : num 2 4 6 8 10 12 0 0 14 16 ...
$ right daughter: num 3 5 7 9 11 13 0 0 15 17 ...
$ split var : Factor w/ 3 levels "Age","Number",..: 2 3 1 2 3 3 NA NA 3 1 ...
$ split point : num 5.5 8.5 78 3.5 14.5 7.5 0 0 3.5 75 ...
$ status : num 1 1 1 1 1 1 -1 -1 1 1 ...
erce$ prediction : chr NA NA NA NA ...
解決策は、コマンドを使用してオブジェクトas.rpart
を強制tree1
することです。rpart
残念ながら、どの R パッケージでもこのコマンドを認識していません。
party
パッケージを使用すると、同様の問題が見つかりました。このvarimp
コマンドcforest
は、単一のツリーではなく、オブジェクトに対して機能します。
library(party)
cf <- cforest(Kyphosis ~ Age + Number + Start, data = kyphosis)
ct <- party:::prettytree(cf@ensemble[[1]], names(cf@data@get("input")))
tree2 <- new("BinaryTree")
tree2@tree <- ct
tree2@data <- cf@data
tree2@responses <- cf@responses
tree2@weights <- cf@initweights
varimp(tree2)
Error in varimp(tree2) :
no slot of name "initweights" for this object of class "BinaryTree"
どんな助けでも大歓迎です。