通常と並列化の比較
通常のランダムフォレスト
library(randomForest)
library(kernlab)
data(spam)
set.seed(777)
system.time(fit.rf<-randomForest(type~.,data=spam,ntree=1000))
ユーザ |
システム |
経過 |
21.584 |
0.213 |
21.919 |
並列化のランダムフォレスト
library(snow)
cl <- makeCluster(4,type="SOCK")
invisible(clusterEvalQ(cl,{
library(randomForest)
library(kernlab)
data(spam)
}))
set.seed(777)
print(system.time(fit.rf <- clusterApply(cl,rep(250,4),function(ntree) randomForest(type~.,spam,ntree=ntree))))
fit.rf.all<-do.call("combine",fit.rf)
stopCluster(cl)
ユーザ |
システム |
経過 |
0.053 |
0.036 |
11.525 |
並列化方法解説
他のプロセスでもライブラリや変数を利用するために通常の読み込みとは別に事前準備が必要となる。また、関数内で並列化を行う場合引数を利用することはできない(引数はclusterExportすることができない)。
cl <- makeCluster(4,type="SOCK")
アクティビティモニタを利用するとプロセスが4つになっていることが確認できる。

invisible(clusterEvalQ(cl,{
library(randomForest)
library(kernlab)
data(spam)
})))
clusterExport(cl,"value1")
エラーなどによって正常に終了することができなくて放置すると

一度Rを終了させればリセットされる。
参考資料