2016-07-16 148 views
6

Volevo sapere la differenza tra sklearn LabelEncoder e pandas get_dummies. Perché scegliere LabelEncoder su get_dummies. Qual è il vantaggio di usarne uno rispetto all'altro? Svantaggi?Qual è la differenza tra sklearn LabelEncoder e pd.get_dummies?

Per quanto ho capito se ho una classe A

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

e

dummy = [001, 010, 100] 

Perchè sono la comprensione di questo in modo errato?

+2

L'equivalente di 'get_dummies' è [' OneHotEncoder'] (http://scikit-learn.org/stable/modules/generated/sklearn.preelaborazione.OneHotEncoder.html) a proposito. – ayhan

risposta

3

Queste sono solo funzioni di convenienza che ricadono naturalmente nel modo in cui queste due librerie tendono a fare le cose, rispettivamente. Il primo "condensa" le informazioni cambiando le cose in numeri interi, e il secondo "espande" le dimensioni permettendo (eventualmente) un accesso più conveniente.


sklearn.preprocessing.LabelEncoder trasforma semplicemente i dati, da qualunque dominio, in modo che il suo dominio è 0, ..., k - 1, dove k è il numero di classi.

Così, per esempio

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

potrebbe diventare

[0, 0, 1, 2] 

pandas.get_dummies prende anche una serie di elementi di qualche dominio, ma si espande in un dataframe cui colonne corrispondono alle voci nella serie, e i valori sono 0 o 1 a seconda di ciò che erano originariamente. Così, per esempio, lo stesso

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

sarebbe diventato un dataframe con le etichette

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

e la cui "paris" entrata sarebbe la serie

[1, 1, 0, 0] 

Il vantaggio principale del il primo metodo è che conserva lo spazio. Al contrario, codificare le cose come numeri interi potrebbe dare l'impressione (a te o ad un algoritmo di apprendimento automatico) che l'ordine significhi qualcosa. "Amsterdam" è più vicino a "tokyo" che a "paris" solo per la codifica intera? probabilmente no. La seconda rappresentazione è un po 'più chiara su questo.

+0

Grazie per il chiarimento. Se dovessi lavorare sul problema della classificazione, useresti anche get_dummy sulla tua variabile di risposta o è meglio usare il codificatore Label? – Sam

+0

Come regola generale, se le classi non avevano un ordine naturale, allora le variabili dummy, ma la considerazione più importante è ciò che l'implementazione dell'algoritmo si aspetta, però. Potresti voler aprire una domanda diversa che descrive un po 'il problema e quale classificazione specifica stai usando (preferibilmente anche specificando una funzione specifica in una libreria). –

0

pandas.get_dummies è codifica un caldo ma sklearn.preprocessing.LabelEncoder è codifica incrementale, ad esempio 0,1,2,3,4, ...

codifica

un caldo è più adatto per l'apprendimento automatico. Poiché le etichette sono indipendenti l'una dall'altra, ad es. 2 non significa il doppio di 1.

Se il set di addestramento e il set di prova hanno un numero diverso di classi per la stessa funzione, fare riferimento a Keep same dummy variable in training and testing data per due soluzioni.