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, Professionista, 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 pesi diversi 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: verifica di aver compreso
Numeri di indice
I modelli di machine learning possono manipolare solo numeri in virgola mobile. Pertanto, devi convertire ogni stringa in un numero di indice univoco, come nell'illustrazione seguente:
Dopo aver convertito le stringhe in numeri di indice univoci, dovrai elaborare ulteriormente i dati per rappresentarli in modo che il modello possa apprendere relazioni significative tra i valori. Se i dati delle caratteristiche categoriche vengono lasciati come interi indicizzati e caricati in un modello, il modello tratterà i valori indicizzati come numeri in virgola mobile continui. Il modello considererebbe quindi "viola" sei volte più probabile di "arancione".
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 ogni incar_color
:
Funzionalità | Rosso | Orange | Blu | Giallo | Verde | Neri | Viola | di colore marrone |
---|---|---|---|---|---|---|---|---|
"Rosso" | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
"Arancia" | 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 sparse
Una funzionalità i cui valori sono prevalentemente pari a zero (o vuoti) è definita
caratteristica sparsa. Molte
caratteristiche categoriche, come car_color
, tendono ad essere 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
Tieni presente che la rappresentazione sparsa consuma molta meno memoria rispetto al vettore one-hot di otto elementi. È importante sottolineare che il modello deve addestrarsi 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 "generica" denominata 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 è in genere una cattiva scelta. 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.
Fai clic qui per scoprire di più sull'hashing