2016-11-25 16 views
2

私は800Kのテキストを含むテキスト分類についていくつかの作業をしなければなりません。私は、次のリンクで見つかった実用的な例を実行しようとしてきた:後Rテキスト800Kのドキュメントでの分類

# Transform dtm to matrix to data frame - df is easier to work with 
mat.df <- as.data.frame(data.matrix(dtm), stringsAsfactors = FALSE) 

:私は、次の命令を持ってまで、すべてがうまくいってきた

http://garonfolo.dk/herbert/2015/05/r-text-classification-using-a-k-nearest-neighbour-model/

Error: cannot allocate vector of size 583.9 Gb 
In addition: Warning messages: 
1: In vector(typeof(x$v), prod(nr, nc)) : 
    Reached total allocation of 8076Mb: see help(memory.size) 
2: In vector(typeof(x$v), prod(nr, nc)) : 
    Reached total allocation of 8076Mb: see help(memory.size) 
3: In vector(typeof(x$v), prod(nr, nc)) : 
    Reached total allocation of 8076Mb: see help(memory.size) 
4: In vector(typeof(x$v), prod(nr, nc)) : 
    Reached total allocation of 8076Mb: see help(memory.size) 

このエラーを克服する方法があります:いくつかの時間のために、この実行持つ私は、エラーメッセージを持っていますか?

data.matrix(dtm)を分割してジョブをチャンクで実行し、それを何らかの方法でマージすることは可能でしょうか?あるいは、これを別の方法やPythonで扱う方がよいでしょうか?

dtm <- removeSparseTerms(dtm, sparse=0.9)

おかげ

+2

_ "このエラーを克服する方法はありますか?" _疎なマトリックス形式にしておきますが、これはおそらく 'dtm'ですか? – lukeA

+2

あなたは584GbのRAMを買うことができます。または、おそらく 'removeSparseTerms()'を使って行列のサイズを小さくしようとします – scoa

+0

どのようにPythonに手伝ってくれるのですか?あなたのシステムに魔法のようにメモリを追加することはありません。これはアプローチではなく、ツールではなく、ストリーミング操作に関するもう少し研究をする必要があるように思えます。 Spark( 'sparklyr'と素晴らしいインターフェースを持っています)は簡単に[ストリーミングk-means]を実行できます(http://spark.apache.org/docs/latest/mllib-clustering.html)。 – hrbrmstr

答えて

3

そのas.data.frame()コールする前に、このコード行を入力してください。

引数sparse=...は、0と1の間の数値です。保持したいドキュメントの数に比例します。上記は、ではなく、で、90%です。通常、試行錯誤によって正しい/最適な値を見つけることができます。あなたのケースでは、あなたは0.79333のような奇妙な数字に終わることができます。あなたがしたいことに依存します。

removeSparseTerms()は、用語を削除しますが、結果として得られるより小さい行列の定数を保持します。つまり、12165735 * 800000の要素行列から476 * 800000行列になります。これで、コンピュータでこれを処理できる可能性があります。

もしそうでなければ、巨大なマトリックスを使って賢明な列方向のスプリット - 適用 - 結合トリックを試してみてください。

+0

ニース。ありがとうございました。それは助けになった – Selrac

関連する問題