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

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

Часто вы должны представлять объекты, содержащие целочисленные значения, как категориальные данные, а не как числовые данные. Например, рассмотрим функцию почтового индекса, в которой значения являются целыми числами. Если вы ошибочно представляете эту функцию в числовом виде, то вы просите модель найти числовое соотношение между различными почтовыми индексами; например, вы ожидаете, что модель определит, что почтовый индекс 20004 в два раза (или вдвое) больше сигнала, чем почтовый индекс 10002. Представляя почтовые индексы в виде категориальных данных, вы позволяете модели находить отдельные сигналы для каждого отдельного почтового индекса.

Если количество категорий поля данных невелико, например день недели или ограниченная палитра цветов, вы можете сделать уникальную функцию для каждой категории. Например:

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

Затем модель может выучить отдельный вес для каждого цвета. Например, возможно, модель могла бы узнать, что красные автомобили дороже, чем зеленые.

Затем функции могут быть проиндексированы.

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

Такой вид отображения называется словарем .

Запас слов

В словаре каждое значение представляет уникальную функцию.

Index Number Category
0 Red
1 Orange
2 Blue
... ...

Модель ищет индекс в строке, присваивая 1,0 соответствующему слоту в векторе признаков и 0,0 всем остальным слотам в векторе признаков.

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

Примечание о разреженном представлении

Если вашими категориями являются дни недели, вы можете, например, представить пятницу вектором признаков [0, 0, 0, 0, 1, 0, 0]. Однако большинство реализаций систем ML будут представлять этот вектор в памяти в разреженном представлении. Распространенным представлением является список непустых значений и соответствующих им индексов, например, 1,0 для значения и [4] для индекса. Это позволяет вам тратить меньше памяти на хранение огромного количества нулей и обеспечивает более эффективное умножение матриц. С точки зрения базовой математики [4] эквивалентно [0, 0, 0, 0, 1, 0, 0].

Вне словарного запаса (OOV)

Как числовые данные содержат выбросы, так и категориальные данные тоже. Например, рассмотрим набор данных, содержащий описания автомобилей. Одной из особенностей этого набора данных может быть цвет автомобиля. Предположим, что распространенные цвета автомобилей (черный, белый, серый и т. д.) хорошо представлены в этом наборе данных, и вы выделяете каждый из них в категорию, чтобы узнать, как эти разные цвета влияют на стоимость. Однако предположим, что этот набор данных содержит небольшое количество автомобилей эксцентричных цветов (лиловый, багряный, авокадо). Вместо того, чтобы выделять каждый из этих цветов в отдельную категорию, вы можете объединить их в общую категорию под названием Out of Vocab ( OOV ). Используя OOV, система не будет тратить время на обучение каждому из этих редких цветов.

Хеширование

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

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

Диаграмма, показывающая два списка слов. Один список состоит из 10 слов. Другой список показывает 10 слов, разделенных на 8 хэш-сегментов. Таким образом, 6 хэш-сегментов содержат одно слово, а 2 хэш-сегмента содержат по 2 слова. Каждое хэш-сегмент идентифицируется числом от 1 до 8 включительно. Рисунок 4: Сопоставление элементов со словарем.

Гибрид хеширования и словаря

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

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

Диаграмма, показывающая три списка слов. Один список состоит из 10 слов для классификации. Два других списка отображают эти 10 слов в словарь и хэш-сегменты. То есть 5 слов сопоставляются непосредственно со словарем, а 5 других слов сопоставляются с двумя хэш-сегментами. Одно хеш-ведро содержит два слова; другое хеш-ведро содержит три слова. Словарный запас содержит общеупотребительные слова; хэш-ведро содержит более редкие слова. Рисунок 5: Гибридный подход, сочетающий словарный запас и хеширование.

Примечание о вложениях

Вспомним из ускоренного курса по машинному обучению , что встраивание — это категориальная функция, представленная как функция с непрерывным значением. Глубокие модели часто преобразуют индексы из индекса во вложение.

Диаграмма, показывающая сквозной процесс сопоставления категорий с векторами признаков посредством встраивания. Таблица внедрения состоит из пронумерованного набора строк. Каждая строка состоит из набора значений с плавающей запятой от 0,0 до 1,0. Для преобразования категории система копирует соответствующую строку из таблицы внедрения. Например, если входной категорией было 0, система копирует первую строку таблицы внедрения в вектор признаков. Если входная категория была 1, система копирует вторую строку таблицы внедрения в вектор признаков. Рисунок 6: Векторы разреженных признаков посредством встраивания

Другие преобразования, которые мы обсуждали, могут быть сохранены на диске, но встраивание отличается. Поскольку встраивания обучаются, они не являются типичным преобразованием данных — они являются частью модели. Они обучаются с другими весами модели и функционально эквивалентны слою весов.

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