Термин « размерность» является синонимом количества элементов в векторе признаков . Некоторые категориальные признаки имеют низкую размерность. Например:
| Название функции | # категорий | Примеры категорий |
|---|---|---|
| Сегодня выпал снег | 2 | Верно, Неверно |
| уровень_навыка | 3 | Начинающий, Практик, Эксперт |
| сезон | 4 | Зима, весна, лето, осень |
| день_недели | 7 | Понедельник, вторник, среда |
| планета | 8 | Меркурий, Венера, Земля |
Когда категориальный признак имеет небольшое количество возможных категорий, его можно закодировать в виде словаря . При кодировании в виде словаря модель рассматривает каждое возможное категориальное значение как отдельный признак . В процессе обучения модель изучает различные веса для каждой категории.
Например, предположим, вы создаёте модель для прогнозирования цены автомобиля, частично основанную на категориальном признаке под названием car_color . Возможно, красные автомобили стоят дороже зелёных. Поскольку производители предлагают ограниченное количество цветов кузова, car_color — это низкоразмерный категориальный признак. Следующая иллюстрация предлагает словарь (возможные значения) для car_color :
Индексные номера
Модели машинного обучения могут работать только с числами с плавающей запятой. Поэтому каждую строку необходимо преобразовать в уникальный порядковый номер, как показано на следующем рисунке:
После преобразования строк в уникальные индексы вам потребуется дополнительно обработать данные, чтобы представить их таким образом, который поможет модели выявить осмысленные взаимосвязи между значениями. Если данные о категориальных признаках оставить в виде индексированных целых чисел и загрузить в модель, модель будет рассматривать индексированные значения как непрерывные числа с плавающей запятой. В этом случае модель будет считать значение «фиолетовый» в шесть раз более вероятным, чем значение «оранжевый».
Однократное кодирование
Следующий шаг в построении словаря — преобразование каждого индексного номера в его 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 вектор. Модель обучается присваивать отдельный вес каждому элементу вектора признаков.
Следующая иллюстрация иллюстрирует различные преобразования в представлении словаря:
Разреженное представление
Признак, значения которого преимущественно равны нулю (или пусты), называется разреженным признаком . Многие категориальные признаки, такие как 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" в числа с плавающей запятой.