Quando utilizzare One Hot Encoding vs LabelEncoder vs DictVectorizor?


97

Ho creato modelli con dati categorici per un po 'di tempo e quando in questa situazione fondamentalmente non utilizzo la funzione LabelEncoder di scikit-learn per trasformare questi dati prima di creare un modello.

Capisco la differenza tra OHE, LabelEncodere DictVectorizorin termini di ciò che stanno facendo per i dati, ma ciò che non è chiaro per me è quando si potrebbe scegliere di impiegare una tecnica piuttosto che un'altra.

Esistono determinati algoritmi o situazioni in cui si hanno vantaggi / svantaggi rispetto agli altri?


2
In riferimento alla risposta di AN6U5 e a questa affermazione:> Esistono ancora algoritmi come alberi decisionali e foreste casuali che possono funzionare bene con le variabili categoriali e LabelEncoder può essere usato per archiviare valori usando meno spazio su disco. L'uso di LabelEncoder non trasformerebbe una caratteristica categorica in una caratteristica numerica, facendo sì che un albero decisionale esegua divisioni a un valore che non ha davvero senso poiché la mappatura è arbitraria?
Nico,

1
Nico, penso che ciò che AN6U5 sta dicendo sia specifico per gli alberi decisionali che funzioni bene, perché l'albero si dividerebbe su cane, gatto, topo o 1,2,3 e il significato di "gatto" vs "2" non è importante per un albero (pensa al modo in cui si divide). Nel caso di qualcosa di simile alla regressione logistica, i valori fanno parte di un'equazione poiché moltiplichi i valori di peso * in modo che possa causare problemi di allenamento e problemi di peso dato che cane: 1 e cat: 2 non ha una relazione numerica 1 * 2 (sebbene può ancora funzionare con sufficienti esempi ed epoche di addestramento).
Doug F,

Risposte:


126

Ci sono alcuni casi in cui LabelEncoder o DictVectorizor sono utili, ma secondo me sono abbastanza limitati a causa dell'ordinalità.

LabelEncoder può trasformare [cane, gatto, cane, topo, gatto] in [1,2,1,3,2], ma poi l'ordinalità imposta significa che la media di cane e topo è gatto. Esistono comunque algoritmi come alberi decisionali e foreste casuali che possono funzionare bene con le variabili categoriali e LabelEncoder può essere usato per memorizzare valori usando meno spazio su disco.

La codifica a caldo unico ha il vantaggio che il risultato è binario piuttosto che ordinale e che tutto si trova in uno spazio vettoriale ortogonale. Lo svantaggio è che per l'alta cardinalità, lo spazio delle funzionalità può davvero esplodere rapidamente e inizi a combattere con la maledizione della dimensionalità. In questi casi, in genere utilizzo una codifica a caldo seguita da PCA per la riduzione della dimensionalità. Trovo che la combinazione giudiziosa di one-hot plus PCA raramente può essere battuta da altri schemi di codifica. PCA trova la sovrapposizione lineare, quindi tenderà naturalmente a raggruppare funzioni simili nella stessa funzione.


1
Grazie mille - questo è molto utile e ha molto senso. Ci sono altri schemi di codifica che usi per casi specifici / limite? Ti capita mai di trovarti in una situazione in cui utilizzerai schemi di codifica diversi per funzionalità diverse?
anthr

21

Mentre AN6U5 ha dato un'ottima risposta, volevo aggiungere alcuni punti per riferimento futuro. Quando si considera One Hot Encoding (OHE) e Label Encoding , dobbiamo cercare di capire quale modello stai cercando di costruire. In particolare, le due categorie di modelli che prenderemo in considerazione sono:

  1. Modelli basati su alberi : alberi decisionali a gradiente potenziato e foreste casuali.
  2. Modelli senza albero : basati su rete lineare, kNN o neurale.

Consideriamo quando applicare OHE e quando applicare la codifica etichetta durante la creazione di modelli basati su alberi.

Applichiamo OHE quando:

  1. Quando i valori vicini l'uno all'altro nella codifica dell'etichetta corrispondono ai valori target non vicini (dati non lineari).
  2. Quando la funzione categoriale non è ordinale (cane, gatto, topo).

Applichiamo la codifica dell'etichetta quando:

  1. La caratteristica categoriale è ordinale (Jr. kg, Sr. kg, Scuola elementare, scuola superiore, ecc.).
  2. Quando riusciamo a trovare un codificatore di etichette che assegna etichette vicine a categorie simili : questo porta a meno spilt nelle trecce, riducendo così i tempi di esecuzione.
  3. Quando il numero di funzioni categoriche nel set di dati è enorme: la codifica one-hot di una caratteristica categoriale con un numero enorme di valori può portare a (1) elevato consumo di memoria e (2) il caso in cui le funzioni non categoriche vengono utilizzate raramente dal modello. Puoi occuparti del primo caso se impieghi matrici sparse. Il secondo caso può verificarsi se si costruisce un albero utilizzando solo un sottoinsieme di funzionalità. Ad esempio, se hai 9 funzioni numeriche e 1 categoriale con 100 valori univoci e hai codificato a caldo quella funzione categoriale, otterrai 109 funzioni. Se un albero viene creato con solo un sottoinsieme di funzioni, le funzioni numeriche iniziali 9 verranno utilizzate raramente. In questo caso, è possibile aumentare il parametro che controlla la dimensione di questo sottoinsieme. In xgboost si chiama colsample_bytree, in max_features di Random Forest di sklearn.

Nel caso in cui desideri continuare con OHE, come suggerito da @ AN6U5, potresti voler combinare PCA con OHE.

Consideriamo quando applicare OHE e la codifica delle etichette durante la creazione di modelli non basati su alberi.

Per applicare la codifica Label, la dipendenza tra feature e target deve essere lineare affinché la codifica Label sia utilizzata in modo efficace.

Allo stesso modo, nel caso in cui la dipendenza non sia lineare, è possibile utilizzare OHE per lo stesso.

Nota: alcune delle spiegazioni sono state citate in Come vincere un concorso di data science di Coursera.


Spiegazione molto intuitiva. Non dovrebbe essere "scissione", non "spilt"?
dzieciou

0

LabelEncoder è per i dati ordinali, mentre OHE è per i dati nominali.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.