Il termine dimensione è un sinonimo del numero di elementi in un vettore delle caratteristiche. Alcune caratteristiche categoriche sono a bassa dimensionalità. Ad esempio:
Nome caratteristica | Numero 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, supponi di creare un modello per prevedere il prezzo di un'auto in base,
in parte, a una funzionalità categorica denominata car_color
.
Forse le auto rosse valgono di più di quelle verdi.
Poiché i produttori offrono un numero limitato di colori esterni, car_color
è
una caratteristica categorica a bassa dimensionalità.
La seguente illustrazione suggerisce un vocabolario (valori possibili) per
car_color
:
Esercizio: verifica la tua comprensione
"Red"
non è un numero in virgola mobile. Devi
convertire le stringhe come "Red"
in numeri in virgola mobile.
Numeri indice
I modelli di machine learning possono manipolare solo numeri in virgola mobile. Pertanto, devi convertire ogni stringa in un numero indice univoco, come nell'illustrazione seguente:
Dopo aver convertito le stringhe in numeri di indice univoci, devi elaborare ulteriormente i dati per rappresentarli in modo da aiutare il modello ad apprendere relazioni significative tra i valori. Se i dati delle caratteristiche categoriche vengono lasciati come numeri interi indicizzati e caricati in un modello, quest'ultimo 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 nella creazione di 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 seguente tabella mostra la codifica one-hot per ogni colore in
car_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, a essere passato al vettore delle caratteristiche. Il modello apprende un peso separato per ogni elemento del vettore delle caratteristiche.
La seguente illustrazione suggerisce le varie trasformazioni nella rappresentazione del vocabolario:
Rappresentazione sparsa
Una funzionalità i cui valori sono prevalentemente zero (o vuoti) è definita
funzionalità sparsa. Molte
caratteristiche categoriche, come car_color
, tendono a essere caratteristiche sparse.
Rappresentazione sparsa
significa memorizzare la posizione di 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 (quando si inizia il conteggio da 0), la
rappresentazione sparsa per il vettore one-hot precedente è:
2
Tieni presente che la rappresentazione sparsa consuma molta meno memoria rispetto al vettore one-hot a otto elementi. È importante che il modello venga addestrato sul vettore one-hot, non sulla rappresentazione sparsa.
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ù comuni, ma anche alcuni colori
anomali usati raramente, come "Mauve"
o "Avocado"
.
Invece di assegnare a ciascuno di questi colori anomali una categoria separata, puoi
raggrupparli in un'unica categoria "jolly" chiamata fuori vocabolario
(OOV). In altre parole, tutti i colori anomali vengono raggruppati in un unico
bucket di valori anomali. Il sistema apprende un singolo peso per questo bucket di outlier.
Codifica delle caratteristiche categoriche ad alta dimensionalità
Alcune caratteristiche categoriche hanno un numero elevato di dimensioni, ad esempio quelle nella tabella seguente:
Nome caratteristica | Numero 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 scelta sbagliata. Gli incorporamenti, descritti in un modulo Incorporamenti separato, sono in genere una scelta molto migliore. Gli incorporamenti riducono notevolmente il numero di dimensioni, il che avvantaggia i modelli in due modi importanti:
- In genere, il modello viene addestrato più rapidamente.
- Il modello creato in genere inferisce le previsioni più rapidamente. ovvero il modello ha una latenza inferiore.
L'hashing (chiamato anche trucco dell'hashing) è un modo meno comune per ridurre il numero di dimensioni.