ランダムフォレストをforeachとdoMCで並列化する
ランダムフォレストは結構計算に時間がかかる。なので並列化して計算時間短縮を図りたい。
具体的には1000本、決定木をつくる際に2コアのマシンであれば1コア500本ずつに分けて計算するようなイメージ。
下記は2コアマシンのコード例。(Using The foreach Packageより)
>library(randomForest) >library(foreach) >library(doMC) > x <- matrix(runif(500),10000) > y <- gl(2,5000) > system.time(randomForest(x,y,ntree=1000)) ユーザ システム 経過 9.327 3.963 55.730 > registerDoMC(2) >system.time(foreach(ntree=rep(500,2),.combine=combine,.packages="randomForest")%dopar%{ randomForest(x,y,ntree=ntree) }) ユーザ システム 経過 10.396 2.806 22.251
実際かなり速くなっている印象。
ちなみにMac、LinuxはdoMC、windowsであればdoSMPを使うとよい。
使い方はid:teramonagiのこの記事に詳しいので参照されたし。
なお、doMCはterminalかESS以外ではうまく動いてくれない(Rがクラッシュする)ようなので要注意。
また、foreachをはじめとした一連の並列処理パッケージ群はRevolution Analyticsがメンテナンスしており、そこのレポートも参考になるのでこちらも参照されたし。