Hatena::ブログ(Diary)

My Life as a Mock Quant このページをアンテナに追加 RSSフィード Twitter

2015-09-14

新型のランダムフォレスト(Random Forest)パッケージ比較:Rborist・ranger・randomForest

| 19:32 | 新型のランダムフォレスト(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マンになります。

参考

トラックバック - http://d.hatena.ne.jp/teramonagi/20150914/1442226764
リンク元