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

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

Обработка категориальных признаков
Краткое содержание

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

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

Большинство алгоритмов машинного обучения работают только с числовыми данными. Поэтому категориальные признаки нужно преобразовать в числовой формат. Есть несколько распространенных подходов:

  1. Прямое кодирование (Label Encoding) - каждой уникальной категории присваивается число. Например:
from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()
encoded = le.fit_transform(["кошка", "собака", "кошка", "хомяк"]) 
print(encoded) # [0 1 0 2]

Проблема в том, что многие алгоритмы будут интерпретировать эти числа как упорядоченность категорий.

  1. One-Hot кодирование (OHE) - для каждой категории создается бинарный признак (dummy variable):
from sklearn.preprocessing import OneHotEncoder

ohe = OneHotEncoder()
encoded = ohe.fit_transform([["кошка"], ["собака"], ["кошка"], ["хомяк"]]).toarray()
print(encoded)
# [[1. 0. 0.]
#  [0. 0. 1.]
#  [1. 0. 0.]
#  [0. 1. 0.]]  

Теперь нет ложной упорядоченности, но возросла размерность данных.

Обработка категорий с большим числом уникальных значений

Иногда категориальный признак имеет очень много уникальных значений (например, список городов). Применение OHE приведет к "проклятию размерности". Есть несколько способов справиться с этим:

  1. Группировка редких категорий. Категории с частотой ниже порога объединяются в одну группу "Другое":
def group_rare(df, col, threshold=0.05):
    s = df[col].value_counts(normalize=True)
    rare = s[s < threshold].index
    df[col] = df[col].replace(rare, "Другое")
    return df

df = group_rare(df, "City", 0.01)  
  1. Применение техник понижения размерности после OHE, например, метод главных компонент (PCA).
  2. Использование числовых представлений категорий, например, частоты (probability encoding) или таргет кодирования (target encoding).

Правильная обработка категориальных признаков - важный этап построения модели машинного обучения. One-Hot кодирование - наиболее универсальный подход. Но для признаков с большим числом категорий приходится применять дополнительные техники, чтобы избежать "проклятия размерности". Надеюсь, мои советы будут вам полезны в работе. Удачи в ваших проектах машинного обучения!

Nerd IT 🌀 ML, DS, ANN, GPT
Привет! Меня зовут Семён, я работаю в сфере ML и аналитики данных и пишу в блог nerdit.ru статьи о своем опыте и том, что может пригодиться начинающим в начале их пути изучения больших данных.

Подписаться на новости Nerd IT

Не пропустите последние выпуски. Зарегистрируйтесь сейчас, чтобы получить полный доступ к статьям.
jamie@example.com
Подписаться