2014-07-12 13 views
32

Dire che ho una caratteristica categorica, il colore, che assume i valoriPuò sklearn la foresta casuale gestire direttamente le funzioni categoriali?

[ 'rosso', 'blu', 'verde', 'arancione'],

e voglio usarlo per prevedere qualcosa in una foresta casuale. Se I one lo codifica (cioè lo cambio in quattro variabili dummy), come faccio a dire a sklearn che le quattro variabili dummy sono davvero una variabile? Specificamente, quando sklearn seleziona casualmente le caratteristiche da usare su nodi diversi, dovrebbe includere i manichini rosso, blu, verde e arancione insieme, o non dovrebbe includere nessuno di essi.

Ho sentito che non c'è modo di farlo, ma immagino ci debba essere un modo per gestire le variabili categoriali senza codificarle arbitrariamente come numeri o qualcosa del genere.

+0

Questa è stata una utile e duratura richiesta di miglioramento su sklearn dal 2014. Una considerazione era se avrebbero dovuto dare la priorità all'implementazione del nuovo [panda Categorico] (http://pandas.pydata.org/pandas-docs/stable /categorical.html) o numpy generico. – smci

risposta

23

No, non c'è. Qualcuno di working on this e la patch potrebbero unirsi in linea principale un giorno, ma al momento non c'è supporto per le variabili categoriali in scikit-learn tranne la codifica dummy (one-hot).

+0

Dieci pollici se questo viene finalmente implementato. Personalmente darei la priorità ai panda categorici, ma i manutentori centrali vogliono diversamente. – smci

6

Devi trasformare la variabile categoriale in una serie di variabili fittizie. Sì, lo so che è fastidioso e sembra non necessario, ma è così che funziona sklearn. se usi panda. usa pd.get_dummies, funziona davvero bene.

+3

Funziona molto bene se gli stessi valori unici sono presenti nell'allenamento e nell'inferenza, quindi non è affidabile. – marbel

5

La maggior parte delle implementazioni di foreste casuali (e molti altri algoritmi di apprendimento automatico) che accettano input categoriali sono semplicemente automatizzando la codifica di funzionalità categoriali per voi o utilizzando un metodo che diventa computationally intractable for large numbers of categories.

A notable exception is H2O. H2O ha un valore molto efficient method per la gestione diretta dei dati categoriali che spesso gli dà un vantaggio rispetto ai metodi basati su alberi che richiedono una codifica a caldo.

This article by Will McGinnis has a very good discussion of one-hot-encoding and alternatives.

This article by Nick Dingwall and Chris Potts has a very good discussion about categorical variables and tree based learners.