Что такое горячее кодирование в тензорном потоке?

11

В настоящее время я делаю курс по тензорному потоку, в котором они использовали tf.one_hot (индексы, глубина). Теперь я не понимаю, как эти индексы превращаются в эту двоичную последовательность.

Может кто-нибудь, пожалуйста, объясните мне точный процесс ???

thanatoz
источник

Ответы:

14

Предположим, у вас есть категорическая особенность в вашем наборе данных (например, цвет). И ваши образцы могут быть красного, желтого или синего цвета. Чтобы передать этот аргумент алгоритму ML, сначала нужно его закодировать, чтобы вместо строк у вас были числа.

Самый простой способ сделать это - создать отображение, где:

красный -> 1
желтый -> 2
синий -> 3

и замените каждую строку ее сопоставленным значением.

Однако это может создать нежелательные побочные эффекты в нашей модели ML, так как при работе с числами может показаться, что синий> желтый (потому что 3> 2) или что красный + желтый = синий (потому что 1 + 2 = 3). Модель не может знать, что эти данные были категориальными, а затем были отображены как целые числа.

Решением этой проблемы является горячее кодирование, где мы создаем N новых функций , где N - это число уникальных значений в исходной функции. В нашем примере N будет равно 3, потому что у нас есть 3 уникальных цвета (красный, желтый и синий).

Каждая из этих функций должна быть двоичной и соответствовать одному из этих уникальных значений. В нашем примере первая функция будет бинарной, сообщающей нам, является ли этот образец красным или нет, вторая будет то же самое для желтого и третья для синего.

Пример такого преобразования иллюстрируется ниже:

Обратите внимание, что, поскольку этот подход увеличивает размерность набора данных, если у нас есть функция, которая принимает много уникальных значений, мы можем захотеть использовать более разреженную кодировку (такую, как я представил выше).

Djib2011
источник
3

глубина: скаляр, определяющий глубину одного горячего измерения.

индексы: тензор индексов.

Этот пример приведен в документации по тензорному потоку.
1. Только указание индексов и глубины (значения по умолчанию для on_value равно 1, а 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. Указание on_value и off_value
индексы = [0, 2, -1, 1]
глубина = 3
tf.one_hot (индексы, глубина, on_value = 5.0, off_value = 0.0, ось = -1)
## вывод: [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)

Вы также можете увидеть код на GitHub

Vallie
источник
Документ tf более понятен: tenorflow.org/api_docs/python/tf/one_hot
dturvene