Кодирование категориальных переменных – это важный шаг в подготовке данных для машинного обучения. Существует несколько методов, каждый из которых подходит для разных типов данных и моделей.
Преобразует каждую категорию в бинарный вектор. Для каждой категории создается отдельный бинарный признак.
Категориальный признак "Цвет" с возможными значениями "красный", "синий" и "зеленый" будет преобразован в три бинарных признака.
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
# Пример данных
data = {'Цвет': ['красный', 'синий', 'зеленый']}
df = pd.DataFrame(data)
# Преобразование категориального признака с использованием OneHotEncoder
encoder = OneHotEncoder(sparse=False)
encoded_colors = encoder.fit_transform(df[['Цвет']])
# Создание DataFrame с закодированными признаками
encoded_df = pd.DataFrame(encoded_colors, columns=encoder.get_feature_names_out(['Цвет']))
print(encoded_df)
Преобразует каждую категорию в уникальное целое число. Этот метод прост, но может быть проблематичным для линейных моделей, так как они могут интерпретировать числовые значения как упорядоченные.
from sklearn.preprocessing import LabelEncoder
# Пример данных
data = {'Цвет': ['красный', 'синий', 'зеленый']}
df = pd.DataFrame(data)
# Преобразование категориального признака с использованием LabelEncoder
encoder = LabelEncoder()
df['Цвет_код'] = encoder.fit_transform(df['Цвет'])
print(df)
Заменяет категориальные признаки средним значением целевой переменной для каждой категории. Этот метод может улучшить качество модели, но требует осторожности, чтобы избежать переобучения.
import category_encoders as ce
# Пример данных
data = {'Цвет': ['красный', 'синий', 'зеленый', 'красный', 'синий'],
'Цена': [10, 15, 12, 10, 20]}
df = pd.DataFrame(data)
# Преобразование категориального признака с использованием TargetEncoder
encoder = ce.TargetEncoder(cols=['Цвет'])
df['Цвет_код'] = encoder.fit_transform(df['Цвет'], df['Цена'])
print(df)
Присваивает каждой категории уникальное целое число, как и Label Encoding, но используется, когда категории имеют естественный порядок.
from sklearn.preprocessing import OrdinalEncoder
# Пример данных
data = {'Размер': ['маленький', 'средний', 'большой']}
df = pd.DataFrame(data)
# Преобразование категориального признака с использованием OrdinalEncoder
encoder = OrdinalEncoder(categories=[['маленький', 'средний', 'большой']])
df['Размер_код'] = encoder.fit_transform(df[['Размер']])
print(df)
Сначала преобразует категории в целые числа, а затем кодирует эти числа в двоичную форму.
import category_encoders as ce
# Пример данных
data = {'Цвет': ['красный', 'синий', 'зеленый']}
df = pd.DataFrame(data)
# Преобразование категориального признака с использованием BinaryEncoder
encoder = ce.BinaryEncoder(cols=['Цвет'])
df = encoder.fit_transform(df)
print(df)
Заменяет каждую категорию на частоту её появления в данных.
# Пример данных
data = {'Цвет': ['красный', 'синий', 'зеленый', 'красный', 'синий']}
df = pd.DataFrame(data)
# Преобразование категориального признака с использованием Frequency Encoding
df['Цвет_частота'] = df['Цвет'].map(df['Цвет'].value_counts()) / len(df)
print(df)
Существует множество способов кодирования категориальных переменных, включая One-Hot Encoding, Label Encoding, Target Encoding, Ordinal Encoding, Binary Encoding и Frequency Encoding. Выбор метода зависит от данных и типа модели, которую вы используете.