Ich verarbeite eine große Datei von Datensätzen mit 2,000,000
rows. Jede Zeile enthält Funktionen zu E-Mails und ein binäres Label [0,1]
für Nicht-Spam bzw. Spam.
Ich möchte alle Features wie email_type
, die Werte von [1,10]
annehmen, in eine binäre Matrix konvertieren.
Dies kann mit pd.get_dummies()
erreicht werden, das eine binäre Matrix aus einer Spalte von Features erstellt.
Das funktioniert perfekt auf einer kleinen Teilmenge der Daten, sagen wir 10,000
rows. Für 100,000+
rows sehe ich jedoch den Fehler Killed:9
.
Um dies anzugehen, habe ich Folgendes versucht:
Schritte:
numpyp.array_split()
Code:
%Vor%Einige Beispielausgaben:
%Vor% Schritt 2 (Umwandlung in binäre Matrix) ist nach der Verarbeitung von 32
blocks ( 320,000
rows) nicht mehr im Speicher. Es kann jedoch zu wenig Speicher vorhanden sein, da der Chunk wie folgt an eine Liste von Datenrahmen angehängt wird df_chunks.append(df)
.
Schritt 3 hat nicht genügend Arbeitsspeicher, um 20
erfolgreich verarbeitete Blöcke zu verketten ( 200,000
rows)
Die ideale Ausgabe ist numpy.ndarray
, die ich einem sklearn
Logistic Regression Klassifikator zuführen kann.
Welche anderen Ansätze kann ich ausprobieren? Ich fange an, maschinelles Lernen mit Datensätzen dieser Größe regelmäßiger zu machen.
Ich bin nach Beratung und offen für Vorschläge wie:
Wenn Sie so etwas wie "One-Hot Encoding" machen oder auf jeden Fall viele Nullen haben, haben Sie in Betracht gezogen, dünn besetzte Matrizen ? Dies sollte nach der Vorverarbeitung erfolgen, z. B.:
%Vor%pandas hat auch einen spärlichen Typ :
%Vor%Eine Anmerkung: Da Sie schneiden und reihenweise aneinanderreihen, ist csr besser als csc.
Tags und Links python performance numpy pandas bigdata