2017-02-18 1 views
0

Ich versuche, Absätze basierend auf ihren Gefühlen zu klassifizieren. Ich habe Trainingsdaten von 600.000 Dokumenten. Wenn ich sie in Tf-Idf Vektorraum mit Worten als Analysator und Ngram-Bereich als 1-2 konvertieren, gibt es fast 6 Millionen Features. Also muss ich Singular Value Decomposition (SVD) durchführen, um Features zu reduzieren.SVD mit Scikit-Learn und Gensim mit 6 Millionen Funktionen

Ich habe versucht, Gensim und SVD-Funktion von Sklearn. Beide funktionieren gut für die Feature-Reduzierung bis 100, aber sobald ich für 200 Features versuche, werfen sie einen Speicherfehler.

Auch ich habe nicht das gesamte Dokument (600 Tausend) als Trainingsdaten verwendet, ich habe nur 50000 Dokumente genommen. Also im Wesentlichen meine Trainingsmatrix ist: 50000 * 6 Millionen und wollen es auf 50000 * (100 bis 500) reduzieren

Gibt es einen anderen Weg, ich kann es in Python implementieren, oder muss ich Sparks mllib SVD implementieren (nur für Java und Scala geschrieben)? Wenn ja, wie viel schneller wird es sein?

Systemspezifikation: 32 Gb RAM mit 4-Core-Prozessoren auf Ubuntu 14.04

Antwort

0

Ich verstehe wirklich nicht, warum Funken mit mllib SVD Leistung verbessern würde oder Speicherfehler vermeiden. Sie überschreiten einfach die Größe Ihres Arbeitsspeichers. Sie haben einige Optionen, um damit umzugehen:

  • Reduzieren Sie die Wörterbuchgröße Ihres tf-idf (spielen mit max_df und min_df Parameter von scikit-lernen zum Beispiel).
  • Verwenden Sie einen Hash-Vektorizer anstelle von tf-idf.
  • Holen Sie mehr RAM (aber irgendwann tf-IDF + SVD ist nicht skalierbar).
  • Auch Sie sollten Ihr Code-Beispiel zeigen, könnten Sie etwas falsch in Ihrem Python-Code tun.

    +0

    Danke für die Vorschläge. Ich sollte mit den Parametern max_df und min_df herumspielen. Auch ich habe noch nicht auf Hashing Vectorizer geschaut, also werde ich sehen, was ich damit machen kann. – dudefrmbgr