Dati categorici: vocabolario e codifica one-hot

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:

Figura 1. Ogni colore della tavolozza è rappresentato come un
      funzionalità. In altre parole, ogni colore è una caratteristica separata nel vettore di caratteristiche.
      Ad esempio, "Rosso" è una funzionalità, "Orange" è una funzionalità separata,
      e così via.
Figura 1. Una caratteristica unica per ogni categoria.

Allenamento: controlla le tue intuizioni

Vero o falso: un modello di machine learning può essere addestrato direttamente su valori stringa non elaborati, come "Red" e "Black", senza convertendo questi valori in vettori numerici.
Vero
Durante l'addestramento, un modello può manipolare solo i numeri in virgola mobile. La stringa "Red" non è un numero in virgola mobile. Tu deve convertire stringhe come "Red" in numeri con rappresentazione in virgola mobile.
Falso
Un modello di machine learning può essere addestrato solo su caratteristiche con con rappresentazione in virgola mobile, quindi dovrai convertirle in i valori in virgola mobile prima dell'addestramento.

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:

Figura 2. Ogni colore è associato a un valore intero univoco. Per
      esempio, "Rosso" è associato al numero intero 0, "Orange" con
      numero intero 1 e così via.
Figura 2. Caratteristiche indicizzate.

Controlla la tua intuizione

Il modello deve essere addestrato direttamente sui numeri di indice mostrati come mostrato nella Figura 2?
Se il modello si addestrasse sui numeri di indice, trattare ognuno come un valore numerico e considerare "Black" (numero di indice 5) per essere 5 volte più significativo al modello rispetto a "Orange" (numero di indice 1).
No
Il modello non deve essere addestrato sui numeri di indice. In tal caso, il modello considererebbe ogni numero di indice come un numero e considera "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:

Figura 3. Diagramma del processo end-to-end per mappare le categorie a
      vettori di caratteristiche. Nel diagramma, le caratteristiche di input sono "Giallo",
      "Orange", "Blue" e "Blue" una seconda volta.  Il sistema utilizza un modello
      vocabolario ("Rosso" è 0, 'arancione' è 1, 'Blu' è 2, 'Giallo' è 3 e
      e così via) per mappare il valore di input a un ID. Pertanto, il sistema mappa "Giallo",
      "Orange", "Blue" e "Blue" a 3, 1, 2, 2. Il sistema converte quindi
      questi valori in un vettore di caratteristiche one-hot. Ad esempio, dato un sistema
      con otto possibili colori, 3 diventa 0, 0, 0, 1, 0, 0, 0, 0.
. Figura 3. Il processo end-to-end per mappare le categorie ai vettori di caratteristiche.

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.