2

私は一連のゲノム データ (約 56k 列) の開始点と終了点の両方を必要とするカスタム ランダム フォレスト関数を使用しています。

列番号をサブグループに分割し、各サブグループを個別に処理して速度を上げたいと思います。次のコードでこれを試しました(失敗しました):

library(foreach)
library(doMC)
foreach(startMrk=(markers$start), endMrk=(markers$end)) %dopar% 
    rfFunction(genoA,genoB,0.8,ntree=100,startMrk=startMrk,endMrk=endMrk)

ここで、startMrk は数値変数の配列で1 4 8 12 16あり、endMrk は別の配列です。3 7 11 15 19

この例では、1 つのコアでサンプルを 1:3 で実行し、別のコアで 4:7 で実行する、などとします。私は R での並列処理のアイデアに慣れていないので、どんなドキュメントでも喜んで勉強します。利用可能。並列処理または上記のコードで欠けているものについて誰かアドバイスがありますか?

4

1 に答える 1

1

ここでの基本的なポイントは、列をチャンクに分割していることです。まず、反復ごとにデータセットを適切にチャンクし、そのチャンクを RF にフィードする方がよい場合があります。また、foreach はいくつかの点で for と同じように機能するため、コードは次のようになります。

rfs=vector('list',4)
foreach(i=1:4) %dopar% {
  ind <- markers$start[i]:markers$end[i]
  rfs[[i]] <- randomForest(genoA[,ind],genoB[,ind], 0.8, ntree=100)
}

これを通常の randomForest で指定しましたが、これを簡単な方法でカスタム コードにまとめることができます。

于 2013-02-12T06:31:03.503 に答える