Perché dobbiamo codificare le variabili categoriali


22

Non sono sicuro del motivo per cui dobbiamo codificare le variabili categoriali. Ad esempio, se ho una variabile categoriale con quattro possibili valori 0,1,2,3 posso sostituirla con due dimensioni. Se la variabile avesse valore 0, avrebbe 0,0 nelle due dimensioni, se avesse 3, avrebbe 1,1 nelle due dimensioni e così via.

Non sono sicuro del motivo per cui dobbiamo farlo?

Risposte:


21

Supponiamo che le tue quattro categorie siano i colori degli occhi (codice): marrone (1), blu (2), verde (3), nocciola (4): eterocromia, viola, rosso, grigio, ecc. Per il momento.

In nessun modo (che posso immaginare attualmente) vorremmo dire che verde =3× marrone, o quel nocciolo =2× blu come implicano i nostri codici, anche se 3=3×1 e 4=2×2 .

Pertanto (a meno che per qualche motivo non desideriamo che tale significato scivoli nelle nostre analisi), dobbiamo usare una sorta di codifica. La codifica fittizia è un esempio, che elimina tali relazioni dalle storie statistiche che vogliamo raccontare sul colore degli occhi. La codifica degli effetti e la codifica Heckman sono altri esempi.

Aggiornamento: il tuo esempio di due variabili per quattro categorie non corrisponde alla mia comprensione del termine "codice fittizio" che in genere comporta la sostituzione di categorie k (diciamo 4) con k1 variabili fittizie (ordinamento delle osservazioni per categoria):

id  category  dummy1 dummy2 dummy3
 1         1       1      0      0
 2         1       1      0      0
 3         2       0      1      0
 4         2       0      1      0
 5         3       0      0      1
 6         3       0      0      1
 7         4       0      0      0
 8         4       0      0      0

Qui la categoria 4 è la categoria di riferimento, supponendo che nel modello sia presente una costante, ad esempio:

y=β0+β1d1+β2d2+β3d3+ε

dove è il valore medio di y quando la categoria = 4 e i termini β associati a ciascun manichino indicano la quantità y che cambia da β 0 per quella categoria.β0yβyβ0

Se non hai un termine costante ( ) nel modello, allora hai bisogno di un altro predittore "fittizio" (forse meno spesso chiamato "variabili indicatore"), in effetti i manichini si comportano come costanti modello per ogni categoria :β0

y=β1d1+β2d2+β3d3+β4d4+ε

Quindi questo potrebbe portare al problema di creare relazioni quantitative senza senso tra i codici di categoria che menziono all'inizio, ma perché non usare la codifica user12331 come suggerisci? candidato A codice utente12331:

id  category   code1  code2
 1         1       0      ?
 2         1       0      ?
 3         2       1      ?
 4         2       1      ?
 5         3       ?      0
 6         3       ?      0
 7         4       ?      1
 8         4       ?      1

hai ragione nel sottolineare che si possono rappresentare 4 valori usando 2 variabili binarie (cioè due bit). Sfortunatamente, un approccio a questo (codice 1 per le categorie 1 e 2 e codice2 per le categorie 3 e 4) lascia l'ambiguità indicata dai punti interrogativi: quali valori andrebbero lì ?!

Bene, che dire di un secondo approccio, chiamalo user12331-codificante candidato B:

id  category   code1  code2
 1         1       0      0
 2         1       0      0
 3         2       0      1
 4         2       0      1
 5         3       1      0
 6         3       1      0
 7         4       1      1
 8         4       1      1

Là! Nessuna ambiguità, giusto? Giusto! Sfortunatamente, tutto ciò che codifica fa è rappresentare le quantità numeriche 1–4 (o 0–3) nella notazione binaria , il che lascia intatto il problema di dare alle relazioni quantitative indesiderate le categorie.

Quindi, la necessità di un altro schema di codifica.

β


5
Mentre questa risposta dimostra il motivo per cui non possiamo usare una variabile (cioè che abbiamo davvero bisogno di 'una sorta di codifica'), non spiega (ancora) perché non possiamo farlo con diciamo due variabili, come l'OP suggerisce nella domanda.
Glen_b -Restate Monica

@Glen_b Grazie. Spero che il mio aggiornamento abbia aiutato a risolvere il problema.
Alexis,

2
Si noti che 2 variabili binarie sono sufficienti per rappresentare 4 categorie [(0,0), (0,1), (1,0), (1,1)], ma non è il modo appropriato per falsificare il codice per l'analisi. L'OP sembra codificare in modo errato.
Ellis Valentiner,

@ user12202013 Sì. Come nel mio ultimo esempio.
Alexis,

E se dovessi fare una codifica binaria usando due variabili come suggerito da OP, ma se l'obiettivo è la previsione, un classificatore / regressore non parametrico e non lineare funzionerebbe altrettanto bene?
tool.ish,

1

La mia opinione su questa domanda è che codificare i quattro stati possibili con solo due variabili è meno espressivo con alcuni algoritmi di apprendimento automatico rispetto all'uso di 4 variabili.

Ad esempio, immagina di voler eseguire la regressione lineare e la tua vera mappatura mappa i valori da 0,1 e 2 a 0 e il valore da 3 a 1. Puoi verificare rapidamente che non è possibile apprendere questa mappatura con regressione lineare durante la codifica la tua variabile categoriale con solo due binari (prova solo ad adattare il piano corrispondente nella tua testa). D'altra parte, quando si utilizza una codifica 1-Of-K, questo non sarebbe un problema.


0

La tua alternativa è anche un codice fittizio. Scegli il codice fittizio che esprime meglio la relazione con la tua variabile dipendente. Ad esempio, il colore potrebbe essere espresso come 1 di n, oppure potresti trasformarlo in componenti numerici di rgb, oppure potresti classificare: girly / muddy / ... 1 di n significa sostanzialmente che ogni istanza viene appresa separatamente, il che è positivo se non c'è relazione. .. ma dove c'è una relazione che stai sprecando i tuoi dati .. devi stimare separatamente il coefficiente per ogni istanza della categoria ... considera il lavoro come una variabile categoriale. Potresti essere classificato come settore di mercato e anzianità.

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.