Добавить в корзинуПозвонить
Найти в Дзене
Властелин машин

Бинарное кодирование

Для численного представления категорий в моделях машинного обучения существуют разные методики (распространенные примеры OneHotEncoder и OrdinalEncoder). Рассмотрим одну из них - BinaryEncoder, которая напоминает OneHotEncoder, так как ставит каждой категории в соответствие вектор из 0 и 1, но в отличие от него формирует более плотное представление. Так, если OneHotEncoder ставит категории в соответствии вектор со всеми 0 и лишь одной 1 на месте порядкового номера этой категории в общем списке (соответственно, вектор имеет размерность N - количество уникальных категорий), то бинарный кодировщик каждому порядковому номеру уникальной категории ставит в соответствие его битовое представление (количество категорий - logN). Одна из реализаций бинарного кодировщика реализована в классе BinaryEncoder библиотеки category_encoders. Для демонстрации его работы рассмотрим датафрейм: Создадим экземпляр класса, обучим и запустим трансформер: В конструктор класса можно передать параметр (cols) со с

Для численного представления категорий в моделях машинного обучения существуют разные методики (распространенные примеры OneHotEncoder и OrdinalEncoder). Рассмотрим одну из них - BinaryEncoder, которая напоминает OneHotEncoder, так как ставит каждой категории в соответствие вектор из 0 и 1, но в отличие от него формирует более плотное представление.

Так, если OneHotEncoder ставит категории в соответствии вектор со всеми 0 и лишь одной 1 на месте порядкового номера этой категории в общем списке (соответственно, вектор имеет размерность N - количество уникальных категорий), то бинарный кодировщик каждому порядковому номеру уникальной категории ставит в соответствие его битовое представление (количество категорий - logN).

Одна из реализаций бинарного кодировщика реализована в классе BinaryEncoder библиотеки category_encoders. Для демонстрации его работы рассмотрим датафрейм:

Создадим экземпляр класса, обучим и запустим трансформер:

-2

В конструктор класса можно передать параметр (cols) со списком имен колонок для трансформации, если не заданы преобразуются все с типом object или category.

Обратите внимание, что несмотря на наличие 4 категорий во второй колонке (cat2) под нее был зарезервирован вектор длины 3 (в строке под номером 2 две единицы в cat2_1 и cat2_2). Если бы использовали OneHotEncoder, единица была бы только в одном столбце для новых колонок категориального столбца:

-3

Если встретится новая категория, то по умолчанию она будет трансформирована в вектор нулей:

-4

Обратная трансформация неизвестной категории приведет к Nan:

-5

-6