Термин размерность является синонимом количества элементов в векторе признаков . Некоторые категориальные признаки имеют низкую размерность. Например:
Название функции | количество категорий | Примеры категорий |
---|---|---|
снег_сегодня | 2 | Правда, Ложь |
навык_уровень | 3 | Новичок, Практик, Эксперт |
сезон | 4 | Зима, Весна, Лето, Осень |
день_недели | 7 | понедельник, вторник, среда |
планета | 8 | Меркурий, Венера, Земля |
Если категориальный признак имеет небольшое количество возможных категорий, его можно закодировать как словарь . При словарном кодировании модель рассматривает каждое возможное категориальное значение как отдельный признак . Во время обучения модель изучает разные веса для каждой категории.
Например, предположим, что вы создаете модель для прогнозирования цены автомобиля, частично основанную на категориальном признаке с именем car_color
. Возможно, красные машины стоят дороже, чем зеленые. Поскольку производители предлагают ограниченное количество цветов кузова, car_color
является категориальным признаком низкой размерности. На следующем рисунке представлен словарь (возможные значения) для car_color
:
Упражнение: проверьте свою интуицию
"Red"
не является числом с плавающей запятой. Вам необходимо преобразовать строки типа "Red"
в числа с плавающей запятой.Индексные номера
Модели машинного обучения могут манипулировать только числами с плавающей запятой. Поэтому вам необходимо преобразовать каждую строку в уникальный индексный номер, как показано на следующем рисунке:
Упражнение: проверьте свою интуицию
"Black"
(номер индекса 5) в 5 раз более значим для модели, чем "Orange"
(номер индекса 1)."Black"
(номер индекса 5) в 5 раз более значимым для модели, чем "Orange"
(номер индекса 1). Горячее кодирование
Следующим шагом в создании словаря является преобразование каждого индексного номера в его горячую кодировку . В горячей кодировке:
- Каждая категория представлена вектором (массивом) из N элементов, где N — количество категорий. Например, если
car_color
имеет восемь возможных категорий, то векторное представление one-hot будет состоять из восьми элементов. - Ровно один из элементов горячего вектора имеет значение 1,0; все остальные элементы имеют значение 0,0.
Например, в следующей таблице показана горячая кодировка для каждого параметра 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 |
В вектор признаков передается «горячий» вектор, а не строка или номер индекса. Модель изучает отдельный вес для каждого элемента вектора признаков.
На следующей иллюстрации показаны различные преобразования в представлении словаря:
Разреженное представление
Объект, значения которого преимущественно равны нулю (или пусты), называется разреженным объектом . Многие категориальные функции, такие как car_color
, обычно являются редкими функциями. Разреженное представление означает сохранение позиции 1.0 в разреженном векторе. Например, горячий вектор для "Blue"
:
[0, 0, 1, 0, 0, 0, 0, 0]
Поскольку 1
находится в позиции 2 (при начале отсчета с 0), разреженное представление для предыдущего горячего вектора:
2
Обратите внимание, что разреженное представление потребляет гораздо меньше памяти, чем восьмиэлементный вектор с одним горячим элементом. Важно отметить, что модель должна обучаться на «горячем» векторе, а не на разреженном представлении.
Выбросы в категориальных данных
Как и числовые данные, категориальные данные также содержат выбросы. Предположим, что car_color
содержит не только популярные цвета, но и некоторые редко используемые цвета, такие как "Mauve"
или "Avocado"
. Вместо того, чтобы выделять каждый из этих цветов-выбросов в отдельную категорию, вы можете объединить их в одну «всеобъемлющую» категорию, называемую вне словарного запаса (OOV) . Другими словами, все цвета выбросов объединяются в одну корзину выбросов. Система запоминает один вес для этого сегмента выбросов.
Кодирование многомерных категориальных признаков
Некоторые категориальные функции имеют большое количество измерений, например, в следующей таблице:
Название функции | количество категорий | Примеры категорий |
---|---|---|
слова_на_английском | ~500 000 | «счастливый», «гуляющий» |
US_postal_codes | ~42 000 | «02114», «90301» |
фамилии_в_Германии | ~850 000 | «Шмидт», «Шнайдер» |
Когда количество категорий велико, горячее кодирование обычно является плохим выбором. Вложения , подробно описанные в отдельном модуле «Внедрения» , обычно являются гораздо лучшим выбором. Вложения существенно сокращают количество измерений, что дает моделям два важных преимущества:
- Модель обычно обучается быстрее.
- Построенная модель обычно делает прогнозы быстрее. То есть модель имеет меньшую задержку.
Хеширование (также называемое трюком хеширования ) — менее распространенный способ уменьшить количество измерений.