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