Trasformazione dei dati categorici

Alcune delle tue caratteristiche potrebbero essere valori discreti che non sono in una relazione ordinata. Alcuni esempi sono razze di cani, parole o codici postali. Queste funzionalità sono note come categoric e ogni valore è chiamato categoria. Puoi rappresentare i valori categorici come stringhe o numeri pari, ma non potrai confrontare questi numeri o sottrarre l'uno dall'altro.

Spesso, è consigliabile rappresentare le funzionalità che contengono valori interi come dati categorici anziché come dati numerici. Ad esempio, considera una funzionalità del codice postale in cui i valori sono numeri interi. Se rappresenti erroneamente questa funzionalità in formato numerico, chiedi al modello di trovare una relazione numerica tra i diversi codici postali. Ad esempio, ti aspetti che il modello stabilisca che il codice postale 20004 è il doppio (o la metà) del segnale come codice postale 10002. Se rappresenti i codici postali come dati categorici, consenti al modello di trovare indicatori separati per ogni singolo codice postale.

Se il numero di categorie di un campo di dati è piccolo, ad esempio il giorno della settimana o una tavolozza di colori limitata, puoi creare una caratteristica univoca per ogni categoria. Ad esempio:

Ogni colore nella tavolozza è rappresentato come una caratteristica separata.
Ciò significa che ogni colore è una caratteristica separata nel vettoriale.
Ad esempio, il rosso è una funzionalità, l'arancione è una funzionalità separata e così via. Figura 1. Una funzionalità univoca per ogni categoria.

 

Un modello può quindi apprendere un peso separato per ogni colore. Ad esempio, il modello potrebbe scoprire che le auto rosse sono più costose delle auto verdi.

Le funzionalità possono quindi essere indicizzate.

Ogni colore nella tavolozza ora appartiene alla stessa funzionalità. 
Ciò significa che il colore è solo una caratteristica del Vettore.
Ogni colore ha un valore univoco. Ad esempio, il rosso ha il valore 0, l'arancione ha il valore 1 e così via. Figura 2: funzionalità indicizzate.

 

Questo tipo di mappatura è chiamata vocabolario.

Lessico

In un vocabolario, ogni valore rappresenta una caratteristica unica.

Index NumberCategory
0Red
1Orange
2Blue
......

Il modello cerca l'indice dalla stringa, assegnando 1,0 all'area corrispondente nel Vettore di funzionalità e 0,0 a tutte le altre aree nel Vettore di caratteristiche.

Diagramma del processo end-to-end per mappare le categorie con vettori.
Nel diagramma, le funzionalità di input sono giallo, arancione, blu, blu. Il sistema utilizza un vocabolario archiviato (rosso è 0, arancione è 1, blu è 2, giallo è 3 e così via) per mappare il valore di input a un ID. Pertanto, il sistema mappa giallo, arancione, blu, blu a 3, 1, 2, 2. Il sistema convertirà questi valori in un feature phone one-hot. Ad esempio, dato un sistema con sette possibili colori, 3 diventa 0,0, 0,0, 0,0, 1,0, 0,0, 0,0, 0,0. Figura 3: il processo end-to-end per mappare le categorie per mostrare i vettori.

Nota sulla rappresentazione sparsa

Se le categorie sono i giorni della settimana, ad esempio, potresti rappresentare venerdì con il vettore delle caratteristiche [0, 0, 0, 0, 1, 0, 0]. Tuttavia, la maggior parte delle implementazioni di sistemi ML rappresenterà questo vettore in memoria con una rappresentazione sparsa. Una rappresentazione comune è un elenco di valori non vuoti e i relativi indici corrispondenti, ad esempio 1.0 per il valore e [4] per l'indice. Ciò consente di spendere meno memoria memorizzando una quantità enorme di 0 e consente una moltiplicazione delle matrici più efficiente. In termini matematici sottostanti, la [4] equivale a [0, 0, 0, 0, 1, 0, 0].

Fuori vocab (OOV)

I dati numerici contengono anomalie, ma anche dati categorici. Ad esempio, prendi in considerazione un set di dati contenente descrizioni di automobili. Una delle funzionalità di questo set di dati potrebbe essere il colore dell'auto. Supponiamo che i colori comuni delle auto (nero, bianco, grigio e così via) siano rappresentati correttamente in questo set di dati e che ognuno di essi venga incluso in una categoria in modo da poter scoprire come questi diversi colori influiscono sul valore. Tuttavia, supponiamo che questo set di dati contenga un numero ridotto di auto con colori eccentrici (malva, puce, avocado). Anziché assegnare a ciascuno di questi colori una categoria separata, potresti raggrupparli in una categoria generica chiamata Fuori vocab (OOV). Utilizzando OOV, il sistema non perderà tempo ad addestrare ognuno di quei colori rari.

Hashing

Un'altra opzione è eseguire l'hashing di ogni stringa (categoria) nello spazio di indicizzazione disponibile. L'hashing spesso causa collisioni, ma ti affidi al modello di apprendimento di una rappresentazione condivisa delle categorie nello stesso indice che funziona bene per il determinato problema.

Per termini importanti, l'hashing può essere peggiore della selezione di un vocabolario, a causa di collisioni. D'altra parte, l'hashing non richiede di assemblare un vocabolario, il che è vantaggioso se la distribuzione delle funzionalità cambia molto nel tempo.

Diagramma che mostra due elenchi di parole. Un elenco è composto da 10 parole. L'altro elenco mostra le 10 parole divise in 8 bucket hash. Pertanto, sei bucket di hash contengono una parola, mentre due di questi hash contengono due parole.  Ogni bucket hash è identificato da un numero da 1 a 8, inclusi. Figura 4: mappatura degli elementi a un vocabolario.

Ibrido di hashing e vocabolario

Puoi adottare un approccio ibrido e combinare l'hashing in un vocabolario. Utilizza un vocabolario per le categorie più importanti nei tuoi dati, ma sostituisci il bucket OOV con più bucket OOV e utilizza l'hashing per assegnare le categorie ai bucket.

Le categorie nei bucket hash devono condividere un indice e il modello probabilmente non farà previsioni buone, ma abbiamo allocato una certa quantità di memoria per tentare di imparare le categorie al di fuori del nostro vocabolario.

Diagramma che mostra tre elenchi di parole. Un elenco è composto da 10 parole
da classificare. Gli altri due elenchi mappano quelle 10 parole
in bucket di vocabolario e hash. Ciò significa che cinque parole vengono mappate direttamente al vocabolario, mentre altre cinque sono mappate a due bucket di hash. Un bucket hash contiene due parole, l'altro bucket contiene tre parole.  Il vocabolario contiene parole comuni; il bucket di hash contiene parole più rare. Figura 5: approccio ibrido che combina vocabolario ed hashing.

Nota sugli incorporamenti

Ricorda dal corso di arresto anomalo del machine learning che un incorporamento è una funzionalità categorica rappresentata come una funzionalità a valore continuo. I modelli diretti convertino spesso gli indici da un indice a un incorporamento.

Diagramma che mostra il processo end-to-end per mappare le categorie con i vettori tramite incorporamento. Una tabella di incorporamento è composta da un insieme numerato di righe. Ogni riga è composta da un insieme di valori in virgola mobile compresi tra 0,0 e 1,0. Per convertire una categoria, il sistema copia la riga corrispondente dalla tabella di incorporamento.
Ad esempio, se la categoria di input era 0, il sistema copia la prima riga della tabella di incorporamento nel vettore della funzionalità. Se la categoria di input era 1,
il sistema copia la seconda riga della tabella di incorporazione nel
vettore delle caratteristiche. Figura 6: sparsi vettori di funzionalità tramite incorporamento

Le altre trasformazioni di cui abbiamo parlato potrebbero essere archiviate su disco, ma gli incorporamenti sono diversi. Poiché gli incorporamenti sono addestrati, non sono una normale trasformazione dei dati, ma fanno parte del modello. Sono addestrati con altri modelli di peso e, dal punto di vista funzionale, sono equivalenti a uno strato di pesi.

E per quanto riguarda gli incorporamenti preaddestrati? In genere gli incorporamenti preaddestrati sono comunque modificabili durante l'addestramento, quindi fanno concettualmente parte del modello.