Respostas:
Suponha que você tenha um recurso categórico no seu conjunto de dados (por exemplo, cor). E suas amostras podem ser vermelhas, amarelas ou azuis. Para passar esse argumento para um algoritmo ML, você primeiro precisa codificá-lo para que, em vez de cadeias, tenha números.
A maneira mais fácil de fazer isso é criar um mapeamento em que:
vermelho -> 1
amarelo -> 2
azul -> 3
e substitua cada sequência pelo seu valor mapeado.
No entanto, isso pode criar efeitos colaterais indesejados em nosso modelo de ML, pois ao lidar com números, pode pensar que azul> amarelo (porque 3> 2) ou que vermelho + amarelo = azul (porque 1 + 2 = 3). O modelo não tem como saber que esses dados eram categóricos e, em seguida, foram mapeados como números inteiros.
A solução para esse problema é a codificação one-hot, onde criamos N novos recursos , onde N é o número de valores exclusivos no recurso original. Em nosso exame, N seria igual a 3, porque temos três cores únicas (vermelho, amarelo e azul).
Cada um desses recursos é binário e corresponderia a um desses valores exclusivos. No nosso exemplo, o primeiro recurso seria um recurso binário informando se a amostra é vermelha ou não; o segundo seria o mesmo para amarelo e o terceiro para azul.
Um exemplo dessa transformação é ilustrado abaixo:
Observe que, como essa abordagem aumenta a dimensionalidade do conjunto de dados, se tivermos um recurso que aceita muitos valores exclusivos, convém usar uma codificação mais esparsa (como a que apresentei acima).
depth: Um escalar que define a profundidade de uma dimensão quente.
índices: um tensor de índices.
Este é o exemplo dado na documentação do tensorflow.
1. Especificando apenas índices e profundidade (os valores padrão de on_value são 1 e off_value são 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.]]
índices = [0, 2, -1, 1] depth = 3 tf.one_hot (índices, profundidade, on_value = 5.0, off_value = 0.0, eixo = -1) ## saída: [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], # um_hot (-1) # [0,0, 5,0, 0,0]] # um_hot (1)
Você também pode ver o código no GitHub