Nachdem ich ein Buch über ML durchgesehen hatte, ging ich die offizielle Dokumentation von scikit-learn learn durch und stieß auf Folgendes:
In der Dokumentation wird darüber berichtet, sklearn.preprocessing.OrdinalEncoder()
während es in dem Buch, über das es gegeben wurde sklearn.preprocessing.LabelEncoder()
, für mich gleich aussah, als ich ihre Funktionalität überprüfte. Kann mir bitte jemand den Unterschied zwischen den beiden sagen?
quelle
OrdinalEncoder
?LabelEncoder
] nicht für Funktionen verwendet werden, sondern nur für überwachte Lernziele."Wie für Unterschiede in
OrdinalEncoder
undLabelEncoder
Implementierung , die akzeptierte Antwort , die Form der Daten erwähnt: (OrdinalEncoder
für 2D - Daten, Form(n_samples, n_features)
,LabelEncoder
ist für 1D - Daten: für Form(n_samples,)
)Deshalb
OrdinalEncoder
würde a einen Fehler bekommen:... wenn Sie versuchen, auf 1D-Daten zu passen:
OrdinalEncoder().fit(['a','b'])
Ein weiterer Unterschied zwischen den Encodern ist jedoch der Name ihres gelernten Parameters .
LabelEncoder
lerntclasses_
OrdinalEncoder
lerntcategories_
Beachten Sie die Unterschiede in der Anpassung
LabelEncoder
vsOrdinalEncoder
und die Unterschiede in den Werten dieser gelernten Parameter.LabelEncoder.classes_
ist 1D, währendOrdinalEncoder.categories_
2D ist.Andere Encoder, die in 2D arbeiten,
OneHotEncoder
verwenden die Eigenschaft ebenfallscategories_
Weitere Informationen hier zum dtype
<U1
(Little-Endian, Unicode, 1 Byte; dh eine Zeichenfolge mit der Länge 1)BEARBEITEN
In den Kommentaren zu meiner Antwort ist Piotr anderer Meinung ; Piotr weist darauf hin , den Unterschied zwischen ordinal Codierung und Etiketten kodieren allgemeiner.
cold
,warm
,hot
);blonde
,brunette
)Dies ist ein großartiges Konzept, aber diese Frage fragt nach den
sklearn
Klassen / Implementierungen. Es ist interessant zu sehen, wie die Implementierung nicht zu den Konzepten passt. besondersOrdinalEncoder
; speziell, wie Sie die Ordnungscodierung selbst durchführen müssen .Wie für die Umsetzung scheint es , wie
LabelEncoder
undOrdinalEncoder
haben ein einheitliches Verhalten bis zu den gewählten Zahlen . Sie beide assign ganzen Zahlen basierend auf alphabetischer Reihenfolge . Zum Beispiel:Beachten Sie, wie beide Encoder Ganzzahlen in alphabetischer Reihenfolge 'c' <'h' <'w' zugewiesen haben .
Dieser Teil ist jedoch wichtig: Beachten Sie, dass keiner der Encoder die "echte" Reihenfolge korrekt erhalten hat (dh die tatsächliche Reihenfolge sollte die Temperatur widerspiegeln, wobei die Reihenfolge "kalt" <"warm" <"heiß" ist). basierend auf der "realen" Reihenfolge hätte der Wert
'warm'
die ganze Zahl 1 erhalten.In dem von Piotr referenzierten Blog-Beitrag verwendet der Autor nicht einmal
OrdinalEncoder()
. Um eine ordinale Codierung zu erreichen , führt der Autor dies manuell durch: Ordnet jede Temperatur einer "echten" Ordnungszahl zu, wobei ein Wörterbuch wie das folgende verwendet wird{'cold':0, 'warm':1, 'hot':2}
:Mit anderen Worten, wenn Sie sich fragen, ob Sie es verwenden sollen
OrdinalEncoder
, beachten Sie bitteOrdinalEncoder
dass die "Ordnungscodierung" möglicherweise nicht so ist, wie Sie es erwarten !quelle
Sie verwenden die Ordnungscodierung, um die Reihenfolge der kategorialen Daten beizubehalten, z. B. kalt, warm, heiß. Niedrig Mittel Hoch. Sie verwenden die Etikettencodierung oder eine Hot-Codierung für kategoriale Daten, bei denen die Daten keine Reihenfolge haben, z. B. Hund, Katze, Wal. Überprüfen Sie diesen Beitrag auf Medium. Es erklärt diese Konzepte gut.
quelle