2016-07-16 7 views
6

Ich wollte den Unterschied zwischen sklearn LabelEncoder vs Pandas get_dummies wissen. Warum sollte man LabelEncoder über get_dummies wählen? Was ist der Vorteil, wenn man einen anderen benutzt? Nachteile?Was ist der Unterschied zwischen sklearn LabelEncoder und pd.get_dummies?

Soweit ich verstehe, wenn ich eine Klasse A

ClassA = ["Apple", "Ball", "Cat"] 
encoder = [1, 2, 3] 

und

dummy = [001, 010, 100] 

Bin ich Verständnis dieses falsch haben?

+2

Das Äquivalent von 'get_dummies' ist [' OneHotEncoder'] (http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html) übrigens. – ayhan

Antwort

3

Dies sind nur Convenience-Funktionen, die auf natürliche Weise in die Art und Weise fallen, wie diese beiden Bibliotheken Dinge tun. Der erste "kondensiert" die Information, indem er die Dinge in Ganzzahlen umwandelt, und der zweite "erweitert" die Dimensionen, um (möglicherweise) einen bequemeren Zugang zu ermöglichen.


sklearn.preprocessing.LabelEncoder einfach wandelt Daten aus beliebiger Domäne, so dass seine Domain 0, ..., k - 1, wo k die Anzahl der Klassen ist.

So zum Beispiel

["paris", "paris", "tokyo", "amsterdam"] 

[0, 0, 1, 2] 

pandas.get_dummies nimmt auch eine Serie mit Elementen von einigen Domain werden könnte, sondern erweitert es in einen Datenrahmen, deren Spalten mit den Einträgen entsprechen in der Serie, und die Werte sind 0 oder 1, je nachdem, was sie ursprünglich waren. So zum Beispiel die gleiche

["paris", "paris", "tokyo", "amsterdam"] 

würde ein Datenrahmen mit Etiketten

["paris", "tokyo", "amsterdam"] 

und deren "paris" Eintrag wäre die Serie

[1, 1, 0, 0] 

Der Hauptvorteil der Die erste Methode ist, dass es Platz spart. Umgekehrt kann das Kodieren von Dingen als Integer den Eindruck erwecken (für Sie oder einen maschinellen Lernalgorithmus), dass die Reihenfolge etwas bedeutet. Ist "amsterdam" nur wegen der Integer-Codierung näher an "tokyo" als an "paris"? wahrscheinlich nicht. Die zweite Darstellung ist etwas klarer.

+0

Danke für die Klarstellung. Wenn Sie an dem Klassifizierungsproblem arbeiten würden, würden Sie auch get_dummy für Ihre Antwortvariable verwenden oder besser den Label-Encoder verwenden? – Sam

+0

Als Faustregel gilt: Wenn die Klassen keine natürliche Reihenfolge hatten, dann Dummy-Variablen, aber die wichtigste Überlegung ist, was Ihre Algorithmus-Implementierung erwartet. Vielleicht möchten Sie eine andere Frage öffnen, die das Problem und die spezielle Klassifizierung, die Sie planen, beschreibt (vorzugsweise sogar eine bestimmte Funktion in einer Bibliothek angeben). –

0

pandas.get_dummies ist One-hot-Codierung aber sklearn.preprocessing.LabelEncoder ist inkrementale Codierung, wie 0,1,2,3,4, ...

one-hot-Codierung besser geeignet für maschinelles Lernen ist. Weil Etiketten voneinander unabhängig sind, z.B. 2 bedeutet nicht zweimal den Wert von 1.

Wenn der Trainingssatz und der Testsatz eine unterschiedliche Anzahl von Klassen für die gleiche Funktion haben, finden Sie unter Keep same dummy variable in training and testing data für zwei Lösungen.

Verwandte Themen