23

パッケージでいくつかの作業を行っていrandomForestますが、うまく機能しますが、時間がかかる場合があります。物事をスピードアップするための提案はありますか? デュアルコア AMD チップを搭載した Windows 7 ボックスを使用しています。R がマルチスレッド/プロセッサではないことは知っていますが、並列パッケージ ( rmpisnowsnowfallなど) のいずれかが機能するかどうかに興味がありましたrandomForest。ありがとう。

編集:

いくつかの分類作業 (0 と 1) に rF を使用しています。データには約 8 ~ 12 の変数列があり、トレーニング セットは 10,000 行のサンプルであるため、適切なサイズですが、クレイジーではありません。私は 500 本の木と 2、3、または 4 本の mtry を実行しています。

編集2:ここにいくつかの出力があります:

> head(t22)
  Id Fail     CCUse Age S-TFail         DR MonInc #OpenLines L-TFail RE M-TFail Dep
1  1    1 0.7661266  45       2 0.80298213   9120         13       0  6       0   2
2  2    0 0.9571510  40       0 0.12187620   2600          4       0  0       0   1
3  3    0 0.6581801  38       1 0.08511338   3042          2       1  0       0   0
4  4    0 0.2338098  30       0 0.03604968   3300          5       0  0       0   0
5  5    0 0.9072394  49       1 0.02492570  63588          7       0  1       0   0
6  6    0 0.2131787  74       0 0.37560697   3500          3       0  1       0   1
> ptm <- proc.time()
> 
> RF<- randomForest(t22[,-c(1,2,7,12)],t22$Fail
+                    ,sampsize=c(10000),do.trace=F,importance=TRUE,ntree=500,,forest=TRUE)
Warning message:
In randomForest.default(t22[, -c(1, 2, 7, 12)], t22$Fail, sampsize = c(10000),  :
  The response has five or fewer unique values.  Are you sure you want to do regression?
> proc.time() - ptm
   user  system elapsed 
 437.30    0.86  450.97 
> 
4

4 に答える 4

35

パッケージのマニュアルには、foreach並列ランダム フォレストに関するセクションがあります ( foreach パッケージの使用、セクション 5.1)。

> library("foreach")
> library("doSNOW")
> registerDoSNOW(makeCluster(4, type="SOCK"))

> x <- matrix(runif(500), 100)
> y <- gl(2, 50)

> rf <- foreach(ntree = rep(250, 4), .combine = combine, .packages = "randomForest") %dopar%
+    randomForest(x, y, ntree = ntree)
> rf
Call:
randomForest(x = x, y = y, ntree = ntree)
Type of random forest: classification
Number of trees: 1000

1000 本の木でランダム フォレスト モデルを作成したい場合、コンピューターに 4 つのコアがありrandomForest、引数を 250 に設定して関数を 4 回実行することにより、問題を 4 つの部分に分割できntreeます。もちろん、結果randomForestのオブジェクトを結合しますが、randomForestパッケージには という関数が付属していますcombine

于 2011-10-20T06:17:03.510 に答える
8

この問題に対処する 2 つの「すぐに使える」オプションがあります。まず、caret パッケージには、これをエレガントに処理するメソッド「parRF」が含まれています。私は通常、これを 16 コアで使用して大きな効果を上げています。randomShrubbery パッケージは、Revolution R の RF 用に複数のコアを利用しています。

于 2012-07-02T22:23:45.213 に答える