新型のランダムフォレスト(Random Forest)パッケージ比較:Rborist・ranger・randomForest
最近、ランダムフォレスト系のパッケージの高速実装が複数
出てきたので、それ調べておきたい。
各々install.packagesを使えば入るので入れておくこと。また旧型(randomForest)も比較対象にしておく。
まず、速度比較。Rboristだけが"ランダムフォレストの各木において、ノードの分割する際に何個特徴量使うか"のmtry引数がなく、それに近いpredProbオプションを適当に調整して設定している点に注意。これでいいのかあまり自信ない。データはirisだ。
library("Rborist") library("ranger") library("randomForest") library("microbenchmark") microbenchmark( ranger = ranger(Species ~., data=iris, mtry=2, num.trees = 500, write.forest=TRUE), randomForest = randomForest(Species ~., data=iris, mtry=2, ntree = 500), Rborist = Rborist(iris[,-5], iris$Species, predProb=0.5, nTree = 500), times=100)
実行結果、rangerはええ!!!!rangerいい!!!
Unit: milliseconds expr min lq mean median uq max neval ranger 19.84961 22.18464 23.69471 23.50502 24.82551 37.09816 100 randomForest 53.80442 54.28419 55.54734 54.48330 55.33083 63.70958 100 Rborist 87.81170 92.68654 118.02040 104.32404 120.06433 676.41389 100
教師データの精度比較。
rf1 <- ranger(Species ~., data=iris, mtry=2, num.trees = 500, write.forest=TRUE) rf2 <- randomForest(Species ~., data=iris, mtry=2, ntree = 500) rf3 <- Rborist(iris[,-5], iris$Species, predProb=0.5, nTree = 500) table(iris$Species, predict(rf1, data=iris)$predictions) table(iris$Species, predict(rf2, data=iris)) table(iris$Species, predict(rf3, iris[,-5])$yPred)
実行結果
> table(iris$Species, predict(rf1, data=iris)$predictions) setosa versicolor virginica setosa 50 0 0 versicolor 0 50 0 virginica 0 0 50 > table(iris$Species, predict(rf2, data=iris)) setosa versicolor virginica setosa 50 0 0 versicolor 0 47 3 virginica 0 4 46 > table(iris$Species, predict(rf3, iris[,-5])$yPred) 1 2 3 setosa 50 0 0 versicolor 0 49 1 virginica 0 0 50
irisならさすがにほぼ綺麗にわかれるな。
速い&formula使えるということでrangerマンになります。