32

Rでランダムフォレストを並行して実行しています

library(doMC)
registerDoMC()
x <- matrix(runif(500), 100)
y <- gl(2, 50)

並列実行 (73 秒かかりました)

rf <- foreach(ntree=rep(25000, 6), .combine=combine, .packages='randomForest') %dopar%
randomForest(x, y, ntree=ntree) 

順次実行 (82 秒かかりました)

rf <- foreach(ntree=rep(25000, 6), .combine=combine) %do%
randomForest(x, y, ntree=ntree) 

並列実行では、ツリーの生成は 3 ~ 7 秒と非常に高速ですが、残りの時間は結果の結合 (結合オプション) に費やされます。したがって、並列実行を実行する唯一の価値は、ツリーの数が非常に多いことです。「結合」オプションを微調整して、必要のない各ノードでの計算を回避し、より高速にする方法はありますか

PS。上記はデータの一例です。実際には、約 100 の観測に対して約 10 万の特徴があります。

4

5 に答える 5

35

に設定.multicombineするTRUEと、大きな違いが生じる可能性があります。

rf <- foreach(ntree=rep(25000, 6), .combine=randomForest::combine,
              .multicombine=TRUE, .packages='randomForest') %dopar% {
    randomForest(x, y, ntree=ntree)
}

これによりcombine、5 回ではなく 1 回呼び出されます。私のデスクトップ マシンでは、これは 19 秒ではなく 8 秒で実行されます。

于 2013-04-02T18:22:10.787 に答える
12

キャレットパッケージが、並列実行 (およびデータの準備、集計など) の多くの処理を実行できることをご存知ですか?

もちろん、最終的には、ランダム フォレストの計算自体にコストのかかる操作が残っている場合、Andy がかなりの年月を費やして改善したため、できることはほとんどありません。ぶら下がっている果物はほとんど、またはまったくないと思います...

于 2012-12-31T21:04:44.263 に答える
4

parallelRandomForestのコードが役に立ちますか?

著者によると、 16 分の 1 のメモリ消費量で、彼のデータ セットで約 6 倍高速に実行されました。

SPRINTには、ここでも並列実装があります。

于 2015-10-16T17:31:56.223 に答える
1

CPU によっては、システムの論理コアの数に一致する登録済みのコアの数に一致するようにジョブの数を選択すると、おそらく 5% から 30% のスピードアップが得られる可能性があります。(場合によっては、システムの物理コアの数を一致させる方が効率的です)。ハイパー スレッディング (4 つの論理コア) を備えた一般的な Intel デュアルコア ラップトップを使用している場合、DoMC はおそらく 4 つのコアのクラスターを登録します。したがって、反復 5 と 6 が計算されるときに 2 つのコアがアイドル状態になり、2 つの余分なジョブを開始/停止する余分な時間が追加されます。より多くの木の 2 ~ 4 個のジョブのみを作成する方が効率的です。

于 2015-04-01T13:41:56.867 に答える