Обработка категориальной переменной — на что обращать внимание?

Машинное обучение требует, чтобы ввод и вывод были числовыми переменными для эффективного функционирования. Следовательно, необходимо преобразовать категориальные переменные (dtype=object) в числовые переменные. В машинном обучении есть много типов кодировщиков, и они могут приводить к ошибкам разного типа при выполнении с разными требованиями к набору данных.

Кодировщик ярлыков

Кодирование метки просто преобразует каждое значение в столбце в число. Каждому уникальному значению в столбце также присваивается целочисленное значение. Он кодирует целевые метки со значением от 0 до n_classes-1. Например, кошка = 0, собака = 1, кит = 2.

Ключевые моменты, на которые следует обратить внимание:

  • Должно быть для номинальных переменных, что означает, что переменные не упорядочены (например, яблоко, банан, апельсин).
  • Для одномерных данных (n-выборок): можно использовать только в «одном столбце», в противном случае вы также можете предварительно обрабатывать столбцы по одному со вторым.
  • Подходит для «Целевой переменной», так как может кодировать только 1 столбец за раз.
  • Изученный параметр = классы

Недостатки использования Label Encoder заключаются в том, что присвоение номера каждому уникальному значению в столбце может привести к их иерархическому порядку. То же, что и порядковый энкодер. Может возникнуть неправильное понимание более высокого приоритета по сравнению с числом, присвоенным уникальному значению, например, 0 ‹ 1 ‹ 2. Однако это можно решить с помощью One Hot Encoder, который будет обсуждаться позже.

Порядковый кодировщик

Как и в Label Encoder, каждому уникальному значению в столбце также присваивается целочисленное значение. Однако значение может быть легко обратимо из-за природы упорядоченных переменных. Часто используются целые значения, начинающиеся с нуля.

Ключевые моменты, на которые следует обратить внимание:

  • Ввод должен быть массивом целых чисел или строк.
  • Должен быть для порядковых переменных, что означает, что переменные упорядочены (например, холодный, теплый, горячий)
  • Для 2D-данных (n-выборок, n-признаков): может соответствовать нескольким столбцам одновременно.
  • Подходит для «Переменной функции»
  • Изученный параметр = категории

Распространенные ошибки:

  • Ошибка значения: y содержит ранее невиданные метки: '[Пример значения]': Ошибка значения является результатом того, что значения появляются в тестовых данных, но не в данных обучения. Существуют разные способы справиться с этим, и наиболее распространенным будет удаление проблемного категориального столбца, если он не является значимым.

Один горячий кодировщик (фиктивная переменная)

Один горячий кодировщик, также известный как фиктивная переменная, может быть очень полезен при решении иерархической проблемы меточного/порядкового кодирования, поскольку он устраняет любую проблему более высоких категориальных значений, влияющих на данные, поскольку в каждом столбце создается двоичная единица или 0.

Ключевые моменты, на которые следует обратить внимание:

  • Не имеет значения, являются ли переменные номинальными или порядковыми, так как присваивается двоичная единица или 0.
  • Горячее кодирование удалит индекс, при необходимости вернет его обратно.
  • Регрессия: отбросить переменную, которая показывает мультиколлинеарность с другими переменными и с достаточным количеством наблюдений; Не нуждается в древовидных алгоритмах
  • Может привести к неэффективности древовидной модели, поскольку вызывает разреженность из-за ограниченной возможности разделения (0 или 1) Для дальнейшего чтения перейдите по ссылке.

Тем не менее это может привести к разреженным столбцам в наборе данных, если кардинальность (уникальное значение) высока. Разреженные столбцы будут иметь линейную связь друг с другом, что приведет к тому, что мы называем мультиколлинеарностью в многомерном наборе данных. Обычно можно определить кардинальность каждого столбца, чтобы выбрать только идеальные столбцы для One Hot Encoding. Например:

# Столбцы, которые будут закодированы горячим способом

low_cardinality_cols = [столбец для столбца в object_cols, если X_train[col].nunique() ‹ 10]

# Столбцы, которые будут удалены из набора данных

high_cardinality_cols = список (набор (object_cols) - набор (low_cardinality_cols))

OH_cols_train = набор данных поезда (OH_encoder.fit_transform (X_train [low_cardinality_cols]))

OH_cols_test = набор тестовых данных (OH_encoder.transform (X_test [low_cardinality_cols]))

Кроме того, мы также можем уменьшить размерность, комбинируя PCA с One Hot Encoding при запуске моделей. Горячее кодирование также может быть проблематичным в древовидных моделях.

Целевой кодировщик

Target Encoder заменяет каждую категорию средним целевым значением для проб, имеющих эту категорию.

Ключевые моменты, на которые следует обратить внимание:

  • Утечка цели может произойти легко, особенно когда целевое кодирование выполняется до разделения тестового поезда, что приводит к переоснащению.
  • Решение путем добавления крошечных случайных значений в новую переменную: # добавить немного шума cntrl = 0.2; или используйте метод, называемый принципом упорядочения в Catboost
  • Может произойти сбой в случаях, когда функция может иметь значения, которые редко встречаются в данных.

Необходимо ли преобразование в числовые переменные?

Некоторые реализации алгоритмов машинного обучения требуют, чтобы все данные были числовыми. Например, у scikit-learn есть такое требование. Однако не все данные требуют преобразования в числовые переменные. Будьте достаточно внимательны, чтобы понимать различные алгоритмы машинного обучения. Например, дерево решений можно изучить непосредственно из категориальных данных без необходимости преобразования данных (это зависит от конкретной реализации).

Никогда не бывает лучшего выбора метода преобразования, и это зависит от типов данных, с которыми вы работаете.