問題タブ [r-bigmemory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1414 参照

r - Rでbigmemory::big.matrixオブジェクトを保存してロードするにはどうすればよいですか?

R コードで big.matrix オブジェクトを使用しようとしていますが、 を使用してそれらをファイルに保存するのに問題がありますsaveRDS。これは通常、オブジェクトを保存する方法です。

saveRDS は、 big.matrix オブジェクトが実際には他のメモリへのポインターであり、事実上ポインターを保存しているだけであることを何らかの形で認識できていないと思います。これを回避する方法はありますか?

(実際に保存したいオブジェクトは、1 つ以上の big.matrix オブジェクトを含む複雑なデータ構造であるため、ファイルに基づく big.matrix オブジェクトは実際には使用したくありません。そのため、big.matrix オブジェクトごとにバッキング ファイルが必要になります。 .matrix がオブジェクトに含まれている場合、オブジェクトは 1 つではなく、不確定な数のファイルにシリアル化されます。)

0 投票する
1 に答える
1055 参照

r - 大きなマトリックスを作成しようとすると R がクラッシュする

いくつかのデータを挿入して変換した後、ネットワーク オブジェクトに変換するために、0 の大きなマトリックスを作成しようとしています。私が使用しているデータは、ユーザー ID とその友達の ID のリストです。ここ [ http://www.shizukalab.com/toolkits/sna/sna_data ]で見つけたコードを使用して、ユーザーと友人の間のつながりを 1 に変換しています。その後、 と を使用statnetigraphてデータを分析できます。R セッションが中断し続けるというデータの次元に基づいてマトリックスを作成しようとすると、問題が発生します。

問題はメモリやシステムの問題ではなく、データの問題であると考えているため、具体的に説明するために、プロセス全体を示します。

そこで、最初にデータをサブセット化して、ユーザー ID とその友達の 2 つの列を作成しました。次に、それを折りたたんでそこから txt ファイルを作成し、それをメモリにスキャンしました。

datこれは、次のように見えるもののスニペットです。

次に、長さを読み込んでdat次元を確立し、行列を作成しようとします。Rstudio は長時間実行され、その後クラッシュします。

繰り返しますが、メモリやシステムの問題ではないと思います。他の StackOverflow の議論に基づいて、私はbigmemoryパッケージを使用しており、4 つのコアのうち 3 つを実行しています。これは の一部で、sessionInfo16GB の RAM を搭載しています。数週間前にアップグレードしたばかりの Rstudio v. 0.99.486 も実行しています。

私は最も高度な R ユーザーではないので、明らかなことを見落としている可能性があります。どんな考えでも大歓迎です。

0 投票する
1 に答える
396 参照

r - Rでbig.matrixを使用してクロス検証を効率的に行うには?

次のように、Xクラス型big.matrixを入力として設計行列を取り、応答を予測する関数があります。

注:マトリックスのサイズはX10 GB を超えています。そのため、メモリにロードできません。以前read.big.matrix()はバッキング ファイルX.binX.desc.

私の質問は、この巨大な big.matrix でクロス検証を効率的に行うにはどうすればよいかということです。

私の試み: (動作しますが、時間がかかります。)

  • ステップ 1:フォールドごとidx.trainに、トレーニングとテストのインデックスを取得しますidx.test
  • ステップ 2: と に分割しXます。とも非常に大きいため、それらを として保存し、各 foldのトレーニング セットとテスト セット用に関連するバッキング ファイル ( 、 ) を作成する必要があります。X.trainX.testX.trainX.testbig.matrix.bin.desc
  • ステップ 3: をフィードしX.trainてモデルを構築し、 の応答を予測しX.testます。

時間のかかる部分はステップ 2で、トレーニングとテスト用のバッキング ファイルを何度も作成する必要があります (元の大きな行列をコピーして貼り付けるのとほとんど同じです)。たとえば、10 分割の交差検証を行うとします。ステップ 2 では、10 個のフォールドすべてのバッキング ファイルを作成するのに 30 分以上かかります。

ステップ 2 でこの問題を解決するには、元の行列を (クラス type の) 10 個の部分行列に一度だけ分割できると思いますbig.matrix。次に、フォールドごとに 1 つの部分をテスト用に使用し、残りの 9 つの部分をトレーニング用の 1 つの大きなマトリックスとして結合します。しかし、新しい問題は、big.matrixコピー/貼り付けなしで小さいものをより大きなものに効率的に結合する方法がないことです。

もちろん、この相互検証手順のために分散コンピューティングを実行できます。しかし、単一のコアを使用するだけで、手順を高速化するより良い方法があるかどうか疑問に思っています.

何か案は?前もって感謝します。

アップデート:

Xが非常に大きい場合、@cdeterman の回答は機能しないことが判明しました。その理由は、mpermute()関数が本質的にコピー/貼り付けを行うことによって行を並べ替えるためです。C++ でmpermute()呼び出し、次に関数を呼び出します。この関数は、すべての列と行をループしてコピー/貼り付けを行うことにより、マトリックスを並べ替えます。ソースコードはこちらをご覧ください。ReorderRNumericMatrix()reorder_matrix()

私の問題を解決するためのより良いアイデアはありますか?? ありがとう。

更新を終了

0 投票する
2 に答える
748 参照

r - Rのbigmemoryパッケージを使用してデータが欠落している大きなcsvファイルを読み取る

私は研究に大規模なデータセット (4.72GB) を使用していますが、大規模なデータセット (最大 10GB の範囲) を処理すると思われる R の「bigmemory」パッケージを発見しました。ただし、read.big.matrix を使用して csv ファイルを読み取ると、次のエラーが発生します。

問題は、csv ファイルがいっぱいではないことだと思います。つまり、いくつかのセルに値がありません。header = TRUE を削除しようとしましたが、R はセッションを中止して再起動します。

read.big.matrix を使用してデータが欠落している大きな csv ファイルを読み取った経験のある人はいますか?

0 投票する
0 に答える
428 参照

r - R での big.matrix を使用した交差検証のための並列計算

mclapply非常に大きな計画行列X(〜10GB)と応答ベクトルのフィッティング手順をモデル化するための交差検証を並列化するために使用しようとしていますyX次元がn-by-p:であるとしましょうn=1000, p=1,000,000Xは非常に巨大であるため、オブジェクトとしてバックアップさbig.matrixれ、ディスクに格納され、R パッケージのメソッドを使用してアクセスされますbigmemory

4 分割クロス検証のワークフローは次のとおりです。

  1. cv.ind長さ のインデックス ベクトルを設定しますn。これは 1 ~ 4 の一連の数値を格納し、 のどの観測値がXCV のどのフォールドに属するかを示します。
  2. 4 コアをセットアップします。i 番目のコアで、i 番目のフォールド CV の対応するトレーニングおよびテスト サブマトリックスをコピーします。
  3. 各コアの折り目ごとにモデルを当てはめます。
  4. 結果を収集し、返します。

交差検証関数は次のようになります。

R 関数cvfは各コアで実行されます。i 番目のフォールドのトレーニング/テスト行列を 2 つのbig.matrixオブジェクトとしてコピーし、モデルに適合させ、いくつかの統計を計算し、結果を返します。

ここまでは、計画行列Xが大きすぎない場合 (n=1000, p=100,000サイズが ~1GB の場合)、コードは非常にうまく機能します。しかし、p=1,000,000それによって のサイズXが ~10GB になると、各コアでのモデル フィッティング手順が無限に実行されます!!!!! (次の部分):


:

  1. 生のマトリックス (10GB) で 'ncvreg()' を 1 回実行すると、約 2.5 分かかります。
  2. forループではなくループを使用してクロス検証を順次実行するmclapplyと、コードは正常に機能し、各フォールド 'ncvreg()' のモデル フィッティングも正常に機能します (~2 分) が、プロセス全体には ~25 分かかります。
  3. 最初は同じ問題で「parLapply」を試しました。ここの理由により、「mclapply」に切り替えました。
  4. 各コアのデータ コピー ステップ (deepcopy部分) は適切に機能し、トレーニング データ セットとテスト データ セットをディスクにコピーしてファイルでバックアップするのに約 2 分かかります
  5. CPU 使用率を監視しようとしました。以下は 1 つのスクリーンショットです。左の図でわかるように、4 つのセッションのそれぞれが最大 25% の CPU 使用率を占めていますが、1 つのプロセスでは、kernel_taskが最大 100% の CPU を使用しています。時間が経過すると、kernel_taskは 150% の CPU を使用することさえあります。さらに、CPU 履歴パネル (右下) は、赤色の領域が緑色の領域を支配しているため、ほとんどの CPU 使用率がユーザーではなくシステムによるものであることを示しています。

ここに画像の説明を入力


私の質問:

  1. モデル フィッティング プロセスを並列に実行すると、時間がかかるのはなぜですか? 考えられる理由は何ですか?
  2. big.matrix の CV 手順を並列化する正しい方向に進んでいますか? 別の方法はありますか?

ここで私の問題を解決するのに役立つ洞察に感謝します。前もって感謝します!!

0 投票する
1 に答える
1520 参照

r - 大きなマトリックスとメモリの問題

私は巨大なデータセットに取り組んでおり、テスト統計の分布を導出したいと考えています。したがって、巨大な行列 (200000x200000) で計算を行う必要があり、ご想像のとおり、メモリの問題があります。より正確には、次のようになります。 エラー: サイズのベクトルを割り当てられません ... Gb。私は 64 ビット版の R を使用しており、RAM は 8Gb です。パッケージ bigmemory を使用しようとしましたが、大きな成功はありませんでした。

最初の問題は、距離行列を計算する必要がある場合です。データフレームの列の距離を並列に計算する Dist という amap パッケージでこの素晴らしい関数を見つけましたが、うまく機能しますが、下/上三角が生成されます。行列の乗算を実行するには距離行列が必要ですが、残念ながら行列の半分ではできません。as.matrix 関数を使用していっぱいにすると、再びメモリの問題が発生します。

だから私の質問は、 as.matrix ステップをスキップして dist オブジェクトを big.matrix に変換する方法です。Rccp に関する質問かもしれませんが、私は Rccp の初心者であることを覚えておいてください。

事前にサンクス!