質問

私は最近、データ分析にRを使用し始めました。これで、大きなクエリデータセットのランキングに問題があります(ASCIIモードでは、ラップトップの4GB RAMでバイナリモードで1 GB)。使用 bigmemory::big.matrix このデータセットには素晴らしいソリューションがありますが、そのようなマトリックス「M」を提供します gbm() また randomForest() アルゴリズムはエラーを引き起こします。

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

クラス(m)は、フォローを出力します。

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

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

役に立ちましたか?

解決

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

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 大きなデータも同様です。

他のヒント

多くの場合、数値オブジェクトで占められているメモリはディスク空間以上のものです。ベクトルまたはマトリックスの各「二重」要素には8バイトがかかります。 data.frameにオブジェクトを強制する場合、RAMにコピーする必要がある場合があります。 BigMemory/Big ***パッケージスイートによってサポートされている機能とデータ構造を使用しようとすることを避ける必要があります。 「Biglm」は利用可能ですが、gbm()またはrandomforest()が「ビッグ」家族の施設を認識して使用することを期待できるとは思いません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top