Категориальные данные: словарь и горячее кодирование.

Термин « размерность» является синонимом количества элементов в векторе признаков . Некоторые категориальные признаки имеют низкую размерность. Например:

Название функции # категорий Примеры категорий
Сегодня выпал снег 2 Верно, Неверно
уровень_навыка 3 Начинающий, Практик, Эксперт
сезон 4 Зима, весна, лето, осень
день_недели 7 Понедельник, вторник, среда
планета 8 Меркурий, Венера, Земля

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

Например, предположим, вы создаёте модель для прогнозирования цены автомобиля, частично основанную на категориальном признаке под названием car_color . Возможно, красные автомобили стоят дороже зелёных. Поскольку производители предлагают ограниченное количество цветов кузова, car_color — это низкоразмерный категориальный признак. Следующая иллюстрация предлагает словарь (возможные значения) для car_color :

Рисунок 1. Каждый цвет в палитре представлен как отдельный признак. То есть каждый цвет является отдельным признаком в векторе признаков. Например, «Красный» — это признак, «Оранжевый» — это отдельный признак, и так далее.
Рисунок 1. Уникальная особенность каждой категории.

Индексные номера

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

Рисунок 2. Каждому цвету соответствует уникальное целое число. Например, «красный» соответствует целому числу 0, «оранжевый» — целому числу 1 и так далее.
Рисунок 2. Индексированные признаки.

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

Однократное кодирование

Следующий шаг в построении словаря — преобразование каждого индексного номера в его one-hot кодировку . В one-hot кодировке:

  • Каждая категория представлена ​​вектором (массивом) из N элементов, где N — количество категорий. Например, если у car_color восемь возможных категорий, то one-hot вектор, представляющий эту категорию, будет содержать восемь элементов.
  • Ровно один из элементов в one-hot векторе имеет значение 1,0; все остальные элементы имеют значение 0,0.

Например, в следующей таблице показано one-hot кодирование для каждого цвета в car_color :

Особенность Красный Апельсин Синий Желтый Зеленый Черный Фиолетовый Коричневый
"Красный" 1 0 0 0 0 0 0 0
"Апельсин" 0 1 0 0 0 0 0 0
"Синий" 0 0 1 0 0 0 0 0
"Желтый" 0 0 0 1 0 0 0 0
"Зеленый" 0 0 0 0 1 0 0 0
«Черный» 0 0 0 0 0 1 0 0
"Фиолетовый" 0 0 0 0 0 0 1 0
"Коричневый" 0 0 0 0 0 0 0 1

В вектор признаков передается не строка и не номер индекса, а one-hot вектор. Модель обучается присваивать отдельный вес каждому элементу вектора признаков.

Следующая иллюстрация иллюстрирует различные преобразования в представлении словаря:

Рисунок 3. Схема сквозного процесса сопоставления категорий с векторами признаков. На схеме входными признаками являются «Желтый»,  «Оранжевый», «Синий» и «Синий» во второй раз. Система использует сохраненный словарь («Красный» — 0, «Оранжевый» — 1, «Синий» — 2, «Желтый» — 3 и и так далее) для сопоставления входного значения с идентификатором. Таким образом, система сопоставляет «Желтый»,  «Оранжевый», «Синий» и «Синий» с 3, 1, 2, 2. Затем система преобразует эти значения в вектор признаков one-hot. Например, если система имеет восемь возможных цветов, 3 становится 0, 0, 0, 1, 0, 0, 0, 0.
Рисунок 3. Полный цикл процесса сопоставления категорий с векторами признаков.

Разреженное представление

Признак, значения которого преимущественно равны нулю (или пусты), называется разреженным признаком . Многие категориальные признаки, такие как car_color , как правило, являются разреженными признаками. Разреженное представление означает хранение позиции значения 1.0 в разреженном векторе. Например, one-hot вектор для "Blue" выглядит так:

[0, 0, 1, 0, 0, 0, 0, 0]

Поскольку 1 находится на позиции 2 (при начале отсчета с 0), разреженное представление предыдущего one-hot вектора выглядит следующим образом:

2

Обратите внимание, что разреженное представление потребляет гораздо меньше памяти, чем восьмиэлементный one-hot вектор. Важно отметить, что модель должна обучаться на one-hot векторе, а не на разреженном представлении.

Выбросы в категориальных данных

Как и числовые данные, категориальные данные также содержат выбросы. Предположим, что car_color содержит не только популярные цвета, но и некоторые редко используемые цвета-выбросы, такие как "Mauve" или "Avocado" . Вместо того чтобы присваивать каждому из этих цветов-выбросов отдельную категорию, их можно объединить в одну «универсальную» категорию, называемую «выбросы вне словаря» (OOV) . Другими словами, все цвета-выбросы объединяются в одну группу выбросов. Система обучается присваивать этой группе выбросов один вес.

Кодирование многомерных категориальных признаков

Некоторые категориальные признаки имеют большое количество измерений, например, как показано в следующей таблице:

Название функции # категорий Примеры категорий
слова_на_английском ~500 000 "счастливый", "ходьба"
Почтовые индексы США ~42 000 "02114", "90301"
фамилии_в_Германии ~850 000 «Шмидт», «Шнайдер»

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

  • Как правило, модель обучается быстрее.
  • Как правило, построенная модель делает прогнозы быстрее. То есть, у модели меньше задержка.

Хэширование (также называемое хэш-трюком ) — это менее распространенный способ уменьшения количества измерений.

Упражнение: Проверьте свои знания

Верно или неверно: Модель машинного обучения может обучаться непосредственно на исходных строковых значениях, таких как «Красный» и «Черный» , без преобразования этих значений в числовые векторы.
Истинный
В процессе обучения модель может работать только с числами с плавающей запятой. Строка "Red" не является числом с плавающей запятой. Необходимо преобразовывать строки типа "Red" в числа с плавающей запятой.
ЛОЖЬ
Модель машинного обучения может обучаться только на признаках, содержащих значения с плавающей запятой, поэтому перед обучением вам потребуется преобразовать эти строки в значения с плавающей запятой.