Включение категориальных признаков в линейные модели требует их преобразования в числовую форму. Существует несколько методов для этого, каждый из которых имеет свои преимущества и недостатки.
Преобразует категориальные признаки в бинарные вектора. Для каждой категории создается отдельный бинарный признак, который принимает значение 1, если объект принадлежит этой категории, и 0 в противном случае.
Категориальный признак "Цвет" с возможными значениями "красный", "синий" и "зеленый" будет преобразован в три бинарных признака.
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import OneHotEncoder
# Пример данных
data = {'Цвет': ['красный', 'синий', 'зеленый', 'красный', 'синий'],
'Цена': [10, 15, 12, 10, 20]}
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(['Цвет']))
# Объединение закодированных признаков с исходными данными
df = pd.concat([df.drop('Цвет', axis=1), encoded_df], axis=1)
# Обучение линейной модели
X = df.drop('Цена', axis=1)
y = df['Цена']
model = LinearRegression()
model.fit(X, y)
# Предсказание
predictions = model.predict(X)
print(predictions)
Преобразует каждую категорию в уникальное целое число. Этот метод прост, но может быть проблематичным для линейных моделей, так как они могут интерпретировать числовые значения как упорядоченные.
from sklearn.preprocessing import LabelEncoder
# Пример данных
data = {'Цвет': ['красный', 'синий', 'зеленый', 'красный', 'синий'],
'Цена': [10, 15, 12, 10, 20]}
df = pd.DataFrame(data)
# Преобразование категориального признака с использованием LabelEncoder
encoder = LabelEncoder()
df['Цвет_код'] = encoder.fit_transform(df['Цвет'])
# Обучение линейной модели
X = df[['Цвет_код']]
y = df['Цена']
model = LinearRegression()
model.fit(X, y)
# Предсказание
predictions = model.predict(X)
print(predictions)
Заменяет категориальные признаки средним значением целевой переменной для каждой категории. Этот метод может улучшить качество модели, но требует осторожности, чтобы избежать переобучения.
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['Цена'])
# Обучение линейной модели
X = df[['Цвет_код']]
y = df['Цена']
model = LinearRegression()
model.fit(X, y)
# Предсказание
predictions = model.predict(X)
print(predictions)
Чтобы включить категориальные признаки в линейную модель, их нужно преобразовать в числовую форму. Основные методы включают One-Hot Encoding, Label Encoding и Target Encoding. Каждый метод имеет свои преимущества и применяется в зависимости от конкретной задачи и данных.