Il termine dimensione è sinonimo del numero di elementi in un vettore di caratteristiche. Alcune caratteristiche categoriche sono di bassa dimensione. Ad esempio:
Nome caratteristica | # di categorie | Categorie di esempio |
---|---|---|
snowed_today | 2 | Vero, Falso |
skill_level | 3 | Principiante, medico, esperto |
season | 4 | Inverno, Primavera, Estate, Autunno |
day_of_week | 7 | Lunedì, martedì, mercoledì |
pianeta | 8 | Mercurio, Venere, Terra |
Quando una caratteristica categorica ha un numero ridotto di categorie possibili, puoi codificarla come vocabolario. Con una codifica del vocabolario, il modello tratta ogni possibile valore categorico come una caratteristica separata. Durante l'addestramento, il modello apprende diversi pesi per ogni categoria.
Ad esempio, supponiamo che tu stia creando un modello per prevedere il prezzo di un'auto in base,
in parte, a una caratteristica categorica denominata car_color
.
Forse le auto rosse valgono più di quelle verdi.
Poiché i produttori offrono un numero limitato di colori esterni, car_color
è
una caratteristica categorica a bassa dimensione.
La seguente illustrazione suggerisce un vocabolario (possibili valori) per
car_color
:
Esercizio: controlla il tuo intuito
"Red"
non è un numero in virgola mobile. Devi
convertire stringhe come "Red"
in numeri con virgola mobile.
Numeri di indice
I modelli di machine learning possono manipolare solo i numeri in virgola mobile. Pertanto, devi convertire ogni stringa in un numero di indice univoco, come nell'illustrazione seguente:
Esercizio: controlla il tuo intuito
"Black"
(numero di indice 5) come 5 volte più significativo
per il modello rispetto a "Orange"
(numero di indice 1).
"Black"
(numero di indice 5) 5 volte più significativo per il modello rispetto a "Orange"
(numero di indice 1).
Codifica one-hot
Il passaggio successivo per creare un vocabolario consiste nel convertire ogni numero di indice nella relativa codifica one-hot. In una codifica one-hot:
- Ogni categoria è rappresentata da un vettore (array) di N elementi, dove N è il numero di categorie. Ad esempio, se
car_color
ha otto possibili categorie, il vettore one-hot che lo rappresenta avrà otto elementi. - Esattamente uno degli elementi di un vettore one-hot ha il valore 1.0; tutti gli elementi rimanenti hanno il valore 0.0.
Ad esempio, la tabella seguente mostra la codifica one-hot per ciascuno in
car_color
:
Funzionalità | Rosso | Orange | Blu | Giallo | di colore verde | Neri | Viola | di colore marrone |
---|---|---|---|---|---|---|---|---|
"Rosso" | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
"Arancione" | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
"Blu" | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
"Giallo" | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
"Verde" | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
"Nero" | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
"Viola" | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
"Marrone" | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
È il vettore one-hot, non la stringa o il numero di indice, che viene passato al vettore di caratteristiche. Il modello apprende un peso separato per ogni elemento del vettore di caratteristiche.
L'illustrazione seguente suggerisce le varie trasformazioni nella representatione del vocabolario:
Rappresentazione sparsa
Una funzionalità i cui valori sono prevalentemente pari a zero (o vuoti) è definita
caratteristica sparsa. Molte
caratteristiche categoriche, come car_color
, tendono a essere caratteristiche sparse.
Per rappresentazione sparsa si intende la memorizzazione della posizione del valore 1.0 in un vettore sparso. Ad esempio, il vettore one-hot per "Blue"
è:
[0, 0, 1, 0, 0, 0, 0, 0]
Poiché 1
si trova in posizione 2 (se si inizia il conteggio da 0), la representation sparse per il vettore one-hot precedente è:
2
Nota che la rappresentazione sparsa consuma molta meno memoria del vettore one-hot a otto elementi. È importante sottolineare che il modello deve essere addestrato sul vettore one-hot, non sulla rappresentazione sparse.
Valori anomali nei dati categorici
Come i dati numerici, anche i dati categorici contengono valori anomali. Supponiamo che car_color
contenga non solo i colori più diffusi, ma anche alcuni colori outlier usati raramente, come "Mauve"
o "Avocado"
.
Anziché assegnare a ciascuno di questi colori outlier una categoria separata, puoi raggrupparli in un'unica categoria "catch-all" chiamata out-of-vocabulary
(OOV). In altre parole, tutti i colori degli outlier vengono raggruppati in un unico
bucket di outlier. Il sistema apprende un singolo peso per il bucket di valori anomali.
Codifica di caratteristiche categoriche ad alta dimensione
Alcune caratteristiche categoriche hanno un numero elevato di dimensioni, ad esempio quelle riportate nella tabella seguente:
Nome caratteristica | # di categorie | Categorie di esempio |
---|---|---|
words_in_english | ~500.000 | "happy", "walking" |
US_postal_codes | ~42.000 | "02114", "90301" |
last_names_in_Germany | ~850.000 | "Schmidt", "Schneider" |
Quando il numero di categorie è elevato, la codifica one-hot di solito è una scelta sbagliata. Gli incorporamenti, descritti in un modulo dedicato, sono in genere una scelta molto migliore. Gli incorporamenti riducono notevolmente il numero di dimensioni, il che è vantaggioso per i modelli in due modi importanti:
- In genere, il modello viene addestrato più velocemente.
- In genere, il modello creato deducono le previsioni più rapidamente. In altre parole, il modello ha una latenza inferiore.
L'hashing (chiamato anche trucco di hashing) è un modo meno comune per ridurre il numero di dimensioni.