2016-07-20 19 views
1

Ich habe eine train Pandas df mit 20 Millionen Zeilen und eine test Pandas df mit etwa 10 Millionen Zeilen.scikit-learns LabelEncoder() Speicherproblem

Es gibt Spalten in beiden der df, denen ich LabelEncoder() zuweisen möchte, aber ich bekomme immer eine Memory Error auf meinem Laptop und sogar auf einer 64 GB RAM AWS-Instanz.

Gibt es eine Möglichkeit, dass ich in Chunks damit umgehen kann, ohne die Zuordnung zu verlieren? Hier

ist der Code, den ich verwendet wurde:

from sklearn.preprocessing import LabelEncoder 
le = LabelEncoder() 

for col in cols_to_encode: 
    le.fit(list(train[col])+list(test[col])) 
    train[col] = le.transform(train[col]) 
    test[col] = le.transform(test[col]) 

Ich probierte 500.000 Zeilen aus jedem und war in der Lage, den Code ohne Fehler laufen, so dass ich weiß, es ist nicht ein Syntaxfehler oder so etwas.

Jede Hilfe würde sehr geschätzt werden.

Antwort

1

Ich habe LabelEncoder noch nicht benutzt, aber von meiner Arbeit mit Sklearn weiß ich, dass es Optionen gibt, die helfen können, parallel zu arbeiten. Haben Sie versucht, diese Aufgabe parallel zu gestalten? Entweder mit einem Parameter wie n_jobs, den viele Sklearn-Klassifikatoren haben, oder sogar mit der Python-Multiprocessing-Bibliothek.

+0

Das erste, was ich tat, war für den 'n_jobs' Parameter zu überprüfen, aber es scheint nicht für diese Funktion zu existieren. Normalerweise ist 'n_jobs' für Klassifizierer, nicht für Hilfsfunktionen. –