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:
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.
Figura 2: funzionalità indicizzate.
Questo tipo di mappatura è chiamata vocabolario.
Lessico
In un vocabolario, ogni valore rappresenta una caratteristica unica.
Index Number | Category |
---|---|
0 | Red |
1 | Orange |
2 | Blue |
... | ... |
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.
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.
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.
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.
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.