Sto cercando di capire come posso codificare le variabili categoriali usando la stima della probabilità, ma finora ho avuto scarso successo.
Ogni suggerimento sarà molto apprezzato.
Sto cercando di capire come posso codificare le variabili categoriali usando la stima della probabilità, ma finora ho avuto scarso successo.
Ogni suggerimento sarà molto apprezzato.
Risposte:
Stavo imparando anche questo argomento, e questi sono ciò che ho trovato:
Questo tipo di codifica si chiama codifica di probabilità , codifica di impatto o codifica target
L'idea sta codificando la variabile categoriale con l'uso della variabile target (continua o categorica a seconda dell'attività). Ad esempio, se si dispone di un'attività di regressione, è possibile codificare la variabile categoriale con la media della destinazione. Per ogni categoria, si calcola la media corrispondente del target (tra questa categoria) e si sostituisce il valore di una categoria con questa media.
Se si dispone di un'attività di classificazione, si calcola la frequenza relativa del proprio target rispetto a ogni valore di categoria.
Da un punto di vista matematico, questa codifica indica una probabilità del tuo target, subordinata al valore di ciascuna categoria.
Se lo fai in modo semplice, come ho descritto sopra, probabilmente otterrai una stima distorta. Ecco perché nella comunità Kaggle di solito usano 2 livelli di validazione incrociata. Leggi questo commento di Raddar qui . Il notebook corrispondente è qui .
La citazione:
Sta prendendo il valore medio di y. Ma non mediamente semplice, ma in convalida incrociata in modo convalida incrociata;
Diciamo che abbiamo 20 convalide incrociate. dobbiamo in qualche modo calcolare il valore medio della funzione per la piega n. 1 utilizzando solo le informazioni dalle pieghe n. 2-20.
Quindi, prendi le pieghe da 2 a 20, crei un altro set di convalida incrociata (ho fatto 10 volte). calcola le medie per ogni piega per una partita (alla fine ottieni 10 medie). In media questi 10 mezzi e applichi quel vettore per il tuo set di convalida principale n. 1. Ripetere l'operazione per le restanti 19 pieghe.
È difficile da spiegare, difficile da capire e da padroneggiare :) Ma se fatto correttamente può portare molti benefici :)
Un'altra implementazione di questa codifica è qui .
Nella libreria R vtreat hanno l'implementazione della codifica di impatto. Vedi questo post .
Nella libreria CatBoost hanno molte opzioni per la codifica delle variabili categoriche inclusa la codifica target.
Non esiste ancora tale codifica in sklearn.
La codifica target è ora disponibile in sklearn tramite il pacchetto category_encoders.
Encoder target
class category_encoders.target_encoder.TargetEncoder (verbose = 0, cols = None, drop_invariant = False, return_df = True, impute_missing = True, handle_unknown = 'impute', min_samples_leaf = 1, smoothing = 1)
Codifica target per funzioni categoriali. Basato sull'approccio one one out.
Come notato da Josh nel commento sopra.
La codifica del rischio non è ancora disponibile su scikit learn. È possibile farlo creando un dizionario e quindi eseguire una funzione di sostituzione.
dict1 = {'cate1':1,'cate2':1,'cate3':2,'cate4':2}
for i in df.shape[0]:
df.iloc[i] = dict1[df.iloc[i]]