8

big.___()いくつかのパッケージを使用してRで作業している大きなデータセットがあります。約10ギガ(100mmR x 15C)で、次のようになります。

Price         Var1         Var2
12.45          1             1
33.67          1             2
25.99          3             3
14.89          2             2
23.99          1             1
...            ...          ...

Var1とVar2に基づいて価格を予測しようとしています。

私が思いついた問題は、Var1とVar2がカテゴリ変数/因子変数であるということです。
Var1とVar2にはそれぞれ3つのレベル(1、2、3)がありますが、データセットには6つの組み合わせしかありません

(1,1;  1,2;  1,3;  2,2;  2,3;  3,3)

因子変数を使用するにはbiglm()、使用するデータの各チャンクに存在する必要がありbiglmます(私の理解ではbiglm、データセットを「x」個のチャンクに分割し、データセットの処理を回避するために各チャンクを分析した後に回帰パラメーターを更新しますRAMよりも大きい)。

データをサブセット化しようとしましたが、コンピューターで処理できないか、コードが間違っています。

bm11 <- big.matrix(150000000, 3)
bm11 <- subset(x, x[,2] == 1 & x[,3] == 1)

上記は私にこれらの束を与えます:

Error: cannot allocate vector of size 1.1 Gb

この問題を回避するための提案はありますか?

4ギガのRAMを搭載したWindows7マシンでR64ビットを使用しています。

4

1 に答える 1

9

各チャンクに存在するすべてのデータまたはすべての値は必要ありません。必要なのは、すべてのレベルを説明することだけです。これは、次のようなチャンクを持つことができることを意味します。

curchunk <- data.frame( Price=c(12.45, 33.67), Var1=factor( c(1,1), levels=1:3), 
  Var2 = factor( 1:2, levels=1:3 ) )

そしてそれは動作します。Var1には1つの値、Var2には2つの値しかありませんが、3つのレベルすべてが両方に存在するため、正しい動作をします。

またbiglm、データをチャンクに分割することはありませんが、扱いやすいチャンクを提供することを期待しています。例を実行して、これをよりよく確認してください。の一般的な方法biglmは、ファイルまたはデータベースから読み取り、最初の「n」行(「n」は合理的なサブセット)を読み取り、それらをbiglm(おそらくすべての要素がすべてのレベルを指定していることを確認した後)に渡すことです。次に、そのデータのチャンクをメモリから削除し、次の'n'行を読み取り、それをに渡しupdateます。ファイルの最後まで、使用済みのチャンクを毎回削除します(次のチャンク用に十分なメモリスペースがあります)。

于 2012-05-08T17:52:32.950 に答える