2016-10-15 3 views
1

Ich habe 9 GB segmentierte Dokumente auf meiner Festplatte und mein vps hat nur 4 GB Speicher.scikit-lernen Vektorisieren mit großen Datensätzen

Wie kann ich den gesamten Datensatz vektorisieren, ohne den gesamten Korpus bei der Initialisierung zu laden? Gibt es einen Beispielcode?

mein Code ist wie folgt:

contents = [open('./seg_corpus/' + filename).read() 
      for filename in filenames] 
vectorizer = CountVectorizer(stop_words=stop_words) 
vectorizer.fit(contents) 

Antwort

1

die Sie interessieren, statt alle Texte in den Arbeitsspeicher laden Sie nur Griffe, um Dateien in fit Methode übergeben können, aber Sie müssen input='file' in CountVectorizer Konstruktor angeben.

contents = [open('./seg_corpus/' + filename) 
     for filename in filenames] 
vectorizer = CountVectorizer(stop_words=stop_words, input='file') 
vectorizer.fit(contents) 
+0

Vielen Dank. Anothor Frage, Gibt es ein paar Tricks auf Scikit-lernen KMeans wie "input = 'file'", ich kann auch nicht die spärliche Matrix in den Speicher laden. –

+0

@KalenBlue, es ist ziemlich seltsam, dass Sie nicht spärlich Matrix in den Speicher laden können, ist es so groß? Oder tritt ein Fehler auf, wenn Sie versuchen, KMeans darauf zu verwenden? Denn es sieht eher so aus, als würden Programmierer Fehler machen, wenn man eine spärliche Matrix nicht in den Speicher laden kann. Wie auch immer, Sie können versuchen, Matrix in verschiedenen Chargen zu speichern, sie separat zu laden und 'MiniBatchKMeans' zu verwenden, mit Partial_fit-Methode. Oder (einfachere Methode) komprimieren Feature-Speicherplatz und ermöglichen es, sparse Matrix im Speicher zu halten. Versuchen Sie zum Beispiel, alle Features zu entfernen, die durch zu häufige n-gramme oder zu selten erstellt werden. –

+0

Sie können mit den Parametern max_features, max_df und min_df spielen, um die resultierende Matrix von CountVectorizer kleiner zu machen. –

Verwandte Themen