# 通常と並列化の比較
##通常のランダムフォレスト
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")
- ライブラリなどの読み込み
invisible(clusterEvalQ(cl,{
library(randomForest)
library(kernlab)
data(spam)
})))
- 変数の利用方法
clusterExport(cl,"value1")
- クラスターの終了
stopCluster(cl)