5

大きな(約10GB)xdf(レボリューションRフォーマット)ファイルでランダムフォレストを実行する方法はありますか?明らかに、rxReadXdfを試してデータフレームに変換することはできますが、私のマシンには8 GBのRAMしかなく、将来的にはさらに大きなデータセットを処理する可能性があります。たとえば、foreachループを使用して、クアッドコアマシンで1000本のツリーを実行したいと思います。

#'train.xdf" is a 10gb training data set
rf<- foreach(ntree=rep(250, 4), .combine=combine, 
             .packages='randomForest') %do%
    randomForest(amount2~.,data="train", ntree=ntree, importance=TRUE,
                 na.action=na.omit, replace=FALSE)

しかし、randomForestは「train」(xdf)ファイルを取り込むことができません。データフレームに読み込まずにxdfで直接ランダムフォレストを実行する方法はありますか?

乾杯、agsub

4

3 に答える 3

3

いいえ、randomForestパッケージの基礎となるRコードを変更しないと、RFメソッドの基礎となるFORTRANルーチンでは、おそらくすべてのデータをメモリに保持する必要があるため、それが不可能な場合があります。一般に、マシンのRAMを増やすか、この問題を実行するためのより大きなワークステーション/マシンのクラスターを見つけるのが最善の方法です。

(なぜ1000のランダムフォレストが必要なのですか?)

于 2012-09-17T09:32:09.320 に答える
2

ランダムフォレストは通常​​、深さ優先でトレーニングされます。つまり、現在のノードでトレーニングされ、次に子ノードで再帰的にトレーニングされます。これには、データセット全体をメモリに保持する必要があります。

この制限を克服するために、データを段階的に処理するランダムフォレストトレーニングフレームワークを作成しました(「オンライン」と呼ばれることもあります)。一度に複数のエントリを保持することはありません。これには、幅優先のツリーの構築が必要であり、オンラインアルゴリズムを使用して純度統計を計算する必要があります。ツリーの各レベルはデータを1回だけ見るため、xdfファイルをメモリに保存する必要はありませんが、D回読み取られます。ここで、Dはツリーの最大深度です。

与えられたコードを変更することはできないので、これはおそらく役に立たないことを私は知っていますが、おそらくそれらのオンラインバージョンのアルゴリズムの実装を見つけるでしょう(Amir Safarのグループを試してください)

于 2012-11-15T15:01:19.110 に答える
1

メモリの制限を克服するには、次を使用します。

max_size_of_pagefiles <- 60000 # in MBs
memory.limit(size = max_size_of_pagefiles)

SSDをドライブとして使用してページファイルを保存し、空き容量をメモリとして使用できます(次の例はWindowsで機能します)。

freespace <- as.numeric(gsub("Total # of free bytes        : ", "", 
   system2('fsutil', 'volume diskfree c:', stdout = TRUE)[1]))/(1024*1024)
memory.limit(size = freespace*0.9)
于 2015-11-25T09:07:46.540 に答える