2016-08-03 43 views
1

ich auf einem Text-Projekt Multi-Class-Klassifizierung gerade arbeitete, und ich brauche das Dokument/term Matrizen und Zug und Test in R Sprache aufzubauen.Arbeiten mit Textklassifikation und großen Sparse-Matrizen in R

Ich habe bereits Datensätze, die nicht in die eingeschränkte Dimensionalität der Basismatrix-Klasse in R passen und große Sparse-Matrizen erstellen müssten, um beispielsweise 100.000-Tweets klassifizieren zu können. Ich benutze die quanteda Paket, wie es für jetzt nützlicher und zuverlässiger als das Paket tm, wo die Erstellung einer DocumentTermMatrix mit einem Wörterbuch ist, macht den Prozess unglaublich Speicher hungrig mit kleinen Datensätzen. Derzeit, wie gesagt, benutze ich quanteda, um den entsprechenden Document-Term-Matrix-Container zu erstellen, den ich später in ein data.frame umwandeln, um das Training durchzuführen.

Ich möchte wissen, ob es einen Weg gibt, so große Matrizen zu bauen. Ich habe über das BigMemory Paket zu lesen, die diese Art von Behälter erlaubt, aber ich bin nicht sicher, es wird für die spätere Klassifikation mit caret arbeiten. Insgesamt möchte ich das Problem verstehen und einen Workaround erstellen, um mit größeren Datensätzen arbeiten zu können, da der RAM kein (großes) Problem darstellt (32GB), aber ich versuche einen Weg zu finden, und ich fühle mich völlig verloren darüber.

Antwort

4

In welchem ​​Moment haben Sie RAM-Beschränkungen erreicht?

quanteda ist gutes Paket mit NLP auf Medium Datensätze zu arbeiten. Aber ich schlage auch vor, mein text2vec Paket auszuprobieren. Im Allgemeinen ist es wesentlich speicherfreundlicher und erfordert nicht das Laden des gesamten Rohtextes in den RAM (zum Beispiel kann er einen DTM für einen Wikipedia-Dump auf einem 16-GB-Laptop erzeugen).

Zweiter Punkt ist, dass ich dringend empfohlen, keine Daten in data.frame zu konvertieren. Versuchen Sie, mit sparseMatrix Objekten direkt zu arbeiten.

Nach Methode für Textklassifikation gut funktionieren:

  1. logistische Regression mit L1 Strafe
  2. Linear SVM (siehe LiblineaR, aber es lohnt sich zu serach für Alternativen)
  3. auch (glmnet Paket sehen) wert um xgboost zu versuchen. Ich würde lineare Modelle bevorzugen. So können Sie lineare Booster versuchen.
+0

Hallo Dmitriy, vielen Dank für Ihre Antwort. –

+0

(nahm zu viel, um diese Antwort zu bearbeiten ...) Ich habe einen Blick auf das text2vec Paket und klingt interessant für mich. Ich überlege mir, es zu versuchen, aber ich würde verstehen müssen, wie kann ich dann den erzeugten DTM verwenden, um durch Klassifizierung durchzuführen - ich muss Caret verwenden -, wie dieses Objekt, wie ich verstehe, eine DGCatrix oder dgTMatrix ist. Kann ich dieses Objekt direkt in die Zugfunktion in Caret einspeisen? Danke! –

+1

'dgCMatrix' aus' Matrix'-Paket ist der "Standard" für dünn besetzte Matrizen in R. Ich habe 'caret' nicht versucht, aber Sie können sich für dieses Thema interessieren: https://github.com/topepo/caret/ Ausgaben/31. Scheint Caret unterstützt spärliche Matrizen aus der Box. –