7

最近、データ分析に R を使い始めました。今、大きなクエリ データセットをランク付けする際に問題が発生しました (ASCII モードで約 1 GB、バイナリ モードでラップトップの 4 GB RAM を超える)。このデータセットにを使用するのは良い解決策ですが、またはアルゴリズムbigmemory::big.matrixでそのような行列 'm' を提供すると、エラーが発生します。gbm()randomForest()

cannot coerce class 'structure("big.matrix", package = "bigmemory")' into a data.frame

class(m) は次を出力します。

[1] "big.matrix"
attr(,"package")
[1] "bigmemory"

big.matrixこれらのアルゴリズムにインスタンスを正しく渡す方法はありますか?

4

2 に答える 2

12

スケールのデータを使用してこれをテストすることは明らかにできませんが、各関数の数式インターフェイスを使用してエラーを再現することはできます。

require(bigmemory)
m <- matrix(sample(0:1,5000,replace = TRUE),1000,5)
colnames(m) <- paste("V",1:5,sep = "")

bm <- as.big.matrix(m,type = "integer")

require(gbm)
require(randomForest)

#Throws error you describe
rs <- randomForest(V1~.,data = bm)
#Runs without error (with a warning about the response only having two values)
rs <- randomForest(x = bm[,-1],y = bm[,1])

#Throws error you describe
rs <- gbm(V1~.,data = bm)
#Runs without error
rs <- gbm.fit(x = bm[,-1],y = bm[,1])

の数式インターフェイスを使用しないことはrandomForest、大規模なデータセットではかなり一般的なアドバイスです。それは非常に非効率的です。を読むと、大規模なデータ?gbmについても同様の推奨事項が示されます。gbm.fit

于 2011-11-29T18:42:37.890 に答える
2

多くの場合、数値オブジェクトが占めるメモリはディスク容量を超えています。ベクトルまたは行列の各「double」要素は8バイトを取ります。オブジェクトをdata.frameに強制する場合、RAMにコピーする必要がある場合があります。bigmemory /big***パッケージスイートでサポートされているもの以外の関数やデータ構造を使用しようとしないでください。「biglm」は使用可能ですが、gbm()またはrandomForest()が「big」ファミリーの機能を認識して使用することを期待できるとは思えません。

于 2011-11-29T18:42:49.137 に答える