Che cos'è una codifica a caldo in tensorflow?


10

Attualmente sto facendo un corso in tensorflow in cui hanno usato tf.one_hot (indici, profondità). Ora non capisco come questi indici si trasformino in quella sequenza binaria.

Qualcuno può spiegarmi il processo esatto per favore ???

Risposte:


14

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).


3

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.]]
  1. Specificare on_value e off_value
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


Il documento tf è più comprensibile: tensorflow.org/api_docs/python/tf/one_hot
dturvene
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.