Risposte:
Supponiamo di avere una caratteristica categorica nel set di dati (ad es. Colore). E i tuoi campioni possono essere rossi, gialli o blu. Per passare questo argomento a un algoritmo ML, devi prima codificarlo in modo che invece di stringhe tu abbia dei numeri.
Il modo più semplice per fare una cosa del genere è creare una mappatura in cui:
rosso -> 1
giallo -> 2
blu -> 3
e sostituisci ogni stringa con il suo valore mappato.
Tuttavia, ciò potrebbe creare effetti collaterali indesiderati nel nostro modello ML poiché quando si tratta di numeri potrebbe pensare che blu> giallo (perché 3> 2) o rosso + giallo = blu (perché 1 + 2 = 3). Il modello non ha modo di sapere che questi dati erano categorici e quindi mappati come numeri interi.
La soluzione a questo problema è la codifica one-hot in cui creiamo N nuove funzionalità , in cui N è il numero di valori univoci nella funzionalità originale. Nel nostro esempio N sarebbe uguale a 3, perché abbiamo 3 colori unici (rosso, giallo e blu).
Ognuna di queste funzionalità è binaria e corrisponderebbe a uno di questi valori univoci. Nel nostro esempio la prima caratteristica sarebbe una funzione binaria che ci dice se quel campione è rosso o no, la seconda sarebbe la stessa cosa per il giallo e la terza per il blu.
Un esempio di tale trasformazione è illustrato di seguito:
Si noti che, poiché questo approccio aumenta la dimensionalità del set di dati, se si dispone di una funzione che accetta molti valori univoci, è possibile che si desideri utilizzare una codifica più sparsa (come quella che ho presentato sopra).
depth: uno scalare che definisce la profondità di una dimensione calda.
indici: un tensore di indici.
Questo è l'esempio riportato nella documentazione di Tensorflow.
1. Specificare solo gli indici e la profondità (il valore predefinito di on_value è 1 e off_value è 0)
indices = [0, 1, 2]
depth = 3
tf.one_hot(indices, depth) # output: [3 x 3]
# [[1., 0., 0.],
# [0., 1., 0.],
# [0., 0., 1.]]
indici = [0, 2, -1, 1] profondità = 3 tf.one_hot (indici, profondità, on_value = 5.0, off_value = 0.0, axis = -1) ## output: [4 x 3] # [[5.0, 0.0, 0.0], # one_hot (0) # [0.0, 0.0, 5.0], # one_hot (2) # [0.0, 0.0, 0.0], # one_hot (-1) # [0.0, 5.0, 0.0]] # one_hot (1)
Puoi anche vedere il codice su GitHub