One hot encoding des string kategorischen features
Ich versuche, führen Sie eine one-hot-Kodierung des trivialen Datensatzes.
data = [['a', 'dog', 'red']
['b', 'cat', 'green']]
Was ist der beste Weg Vorverarbeitung dieser Daten mit Hilfe von Scikit-Learn?
Auf dem ersten Instinkt, würden Sie Ihren Blick auf Scikit-Learn ist OneHotEncoder. Aber die one-hot-encoder unterstützt keine strings als Funktionen, sondern nur diskretisiert zahlen.
So, dann würden Sie einen LabelEncoder, würde die Kodierung der strings in zahlen. Aber dann haben Sie auf anwenden, um die label-encoder in den einzelnen Spalten und speichern jedes dieser label-Encoder (wie auch die Spalten, die Sie angewendet wurden, auf). Und das fühlt sich extrem klobig.
So, was ist das besten Weg, es zu tun in Scikit-Learn?
Bitte nicht schlagen pandas.get_dummies. Das ist, was ich verwende in der Regel heute für eine hot-encodings. Aber seine begrenzt in der Tatsache, dass Sie nicht die Kodierung Trainings /test-set separat.
- auch pandas.get_dummies binäre Codierung behandelt wird als kontinuierliche, durch die decision tree classifier, die es nicht anwendbar für dieses Szenario.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie auf sklearn>0.20.dev0
Wenn Sie auf sklearn==0.20.dev0
Anderen Weg, es zu tun, ist die Verwendung category_encoders.
Hier ist ein Beispiel:
Sehr schöne Frage.
Jedoch, in gewissem Sinne, es ist ein privater Fall von etwas, das kommt (zumindest für mich) ziemlich oft - gegeben
sklearn
Phasen anwendbar Teilmengen derX
matrix, die ich anwenden möchten (eventuell mehrere) die gesamte matrix. Hier, zum Beispiel, Sie haben eine Bühne, die weiß, laufen auf eine einzige Spalte, und Sie möchten, beantragen Sie dreimal - einmal pro Spalte.Dies ist ein klassischer Fall für den Einsatz der Composite-Design-Pattern.
Hier ist ein (Skizze a) wiederverwendbare Phase akzeptiert eine dictionary-Zuordnung eine Spalte ein index in der transformation zu bewerben:
Nun, um es in diesem Kontext, beginnend mit
würden Sie einfach verwenden, um die Zuordnung der einzelnen Spalte index der transformation, die Sie wollen:
Sobald Sie entwickeln so eine Phase (ich kann nicht post, die ich verwenden), können Sie es über und über für die verschiedenen Einstellungen.
LabelEncoder#transform
stürzt ab, wenn man die strings, die nicht erscheinen im training.fit_transform
beheben?Habe ich angesichts dieses problem viele Male, und ich fand eine Lösung in diese Buch an seiner Seite 100 :
- und sample-code ist hier :
und als Ergebnis :
Beachten Sie, dass dies gibt ein dichtes NumPy-Arrays standardmäßig. Kann man eine sparse-matrix anstelle von übergeben
sparse_output=True LabelBinarizer Konstruktor.
Und finden Sie mehr über die LabelBinarizer, hier in der sklearn offizielle Dokumentation