ランダムフォレストを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

実際かなり速くなっている印象。
ちなみにMacLinuxはdoMC、windowsであればdoSMPを使うとよい。
使い方はid:teramonagiこの記事に詳しいので参照されたし。
なお、doMCはterminalかESS以外ではうまく動いてくれない(Rがクラッシュする)ようなので要注意。

また、foreachをはじめとした一連の並列処理パッケージ群はRevolution Analyticsがメンテナンスしており、そこのレポートも参考になるのでこちらも参照されたし。