Il termine dimensione è un sinonimo per il numero di elementi in una vettore di caratteristiche. Alcune caratteristiche categoriche sono a bassa dimensionalità. Ad esempio:
Nome caratteristica | N. 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 basso di categorie possibili, è possibile codificalo come vocabolario. Con una codifica del vocabolario, il modello tratta ogni possibile valore categorico come 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 al prezzo,
in parte, su una caratteristica categorica denominata car_color
.
Forse le auto rosse valgono più delle auto verdi.
Poiché i produttori offrono un numero limitato di colori degli esterni, car_color
è
una caratteristica categorica a bassa dimensionalità.
L'illustrazione seguente suggerisce un vocabolario (possibili valori) per
car_color
:
Allenamento: controlla le tue intuizioni
"Red"
non è un numero in virgola mobile. Tu
deve convertire stringhe come "Red"
in numeri con rappresentazione in 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 la seguente illustrazione:
Controlla la tua intuizione
"Black"
(numero di indice 5) per essere 5 volte più significativo
al modello rispetto a "Orange"
(numero di indice 1).
"Black"
(numero di indice 5) come
5 volte più significativa per il modello rispetto a "Orange"
(numero indice 1).
Codifica one-hot
Il passaggio successivo nella creazione di un vocabolario è convertire ogni numero di indice in la 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 per
car_color
sono possibili otto le categorie, il vettore one-hot che rappresenta avrà otto elementi. - Esattamente uno degli elementi in un vettore one-hot ha il valore 1,0; tutti gli altri elementi hanno il valore 0,0.
Ad esempio, la tabella seguente mostra la codifica one-hot per ogni
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 il vettore di caratteristiche.
L'illustrazione seguente suggerisce le varie trasformazioni nel rappresentazione del vocabolario:
Rappresentazione sparsa
Una caratteristica i cui valori sono prevalentemente zero (o vuoti) viene definita
caratteristica sparsa. Molti
caratteristiche categoriche, come car_color
, tendono a essere caratteristiche sparse.
Rappresentazione sparsa
significa archiviare la posizione del modulo 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 nella posizione 2 (quando il conteggio inizia da 0), la
la rappresentazione sparsa per il vettore one-hot precedente è:
2
Nota che la rappresentazione sparsa consuma molta meno memoria rispetto alla vettore one-hot a otto elementi. È importante sottolineare che il modello deve addestrarsi sulla un vettore one-hot, non la rappresentazione sparsa.
Valori anomali nei dati categorici
Come i dati numerici, anche i dati categorici contengono valori anomali. Supponiamo che
car_color
contiene non solo i colori popolari, ma anche alcuni usati raramente
colori anomali, ad esempio "Mauve"
o "Avocado"
.
Anziché assegnare a ciascuno di questi colori anomali una categoria separata,
puoi riunirli in un unico "catch-all" categoria chiamata out-of-vocabulary
(VOCE FUORI CAMPO) In altre parole, tutti i colori anomali vengono raggruppati in un'unica
un bucket outlier. Il sistema apprende un singolo peso per quel bucket outlier.
Codificare caratteristiche categoriche ad alta dimensionalità
Alcune caratteristiche categoriche hanno un elevato numero di dimensioni, come quelli riportati nella seguente tabella:
Nome caratteristica | N. di categorie | Categorie di esempio |
---|---|---|
words_in_english | ~500.000 | "felice", "camminare" |
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. Incorporamenti, descritti in una sezione Modulo Incorporamenti, di solito è una scelta decisamente migliore. Gli incorporamenti riducono notevolmente il numero di il che avvantaggia i modelli in due importanti modi:
- In genere il modello si addestra più velocemente.
- In genere il modello creato deduce più rapidamente le previsioni. Vale a dire che modello ha una latenza più bassa.
L'hashing (chiamato anche hashing) ) è un modo meno comune per ridurre il numero di dimensioni.