Ответы:
Предположим, у вас есть категорическая особенность в вашем наборе данных (например, цвет). И ваши образцы могут быть красного, желтого или синего цвета. Чтобы передать этот аргумент алгоритму ML, сначала нужно его закодировать, чтобы вместо строк у вас были числа.
Самый простой способ сделать это - создать отображение, где:
красный -> 1
желтый -> 2
синий -> 3
и замените каждую строку ее сопоставленным значением.
Однако это может создать нежелательные побочные эффекты в нашей модели ML, так как при работе с числами может показаться, что синий> желтый (потому что 3> 2) или что красный + желтый = синий (потому что 1 + 2 = 3). Модель не может знать, что эти данные были категориальными, а затем были отображены как целые числа.
Решением этой проблемы является горячее кодирование, где мы создаем N новых функций , где N - это число уникальных значений в исходной функции. В нашем примере N будет равно 3, потому что у нас есть 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.]]
индексы = [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