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