Да, в линейную модель можно включать категориальные признаки, но для этого их необходимо преобразовать в числовую форму. Давайте разберем, как это можно сделать и зачем это нужно.
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
# Пример данных
data = pd.DataFrame({'Цвет': ['Красный', 'Зеленый', 'Синий', 'Красный']})
# Применение One-Hot Encoding
ohe = OneHotEncoder()
transformed_data = ohe.fit_transform(data[['Цвет']]).toarray()
# Преобразование обратно в DataFrame
ohe_df = pd.DataFrame(transformed_data, columns=ohe.get_feature_names_out(['Цвет']))
from sklearn.preprocessing import LabelEncoder
# Пример данных
data = pd.DataFrame({'Цвет': ['Красный', 'Зеленый', 'Синий', 'Красный']})
# Применение Label Encoding
le = LabelEncoder()
data['Цвет_метка'] = le.fit_transform(data['Цвет'])
Предположим, у вас есть данные о ценах на квартиры, включая категориальный признак "Район" (центр, окраина, пригород). Мы можем использовать One-Hot Encoding для преобразования этого признака и включения его в линейную модель:
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import OneHotEncoder
# Пример данных
data = pd.DataFrame({
'Район': ['Центр', 'Окраина', 'Пригород', 'Центр'],
'Площадь': [50, 60, 70, 80],
'Цена': [200000, 150000, 120000, 250000]
})
# Применение One-Hot Encoding к категориальному признаку "Район"
ohe = OneHotEncoder(drop='first') # drop='first' чтобы избежать дамми-ловушки
encoded_districts = ohe.fit_transform(data[['Район']]).toarray()
# Объединение с исходными данными
encoded_df = pd.DataFrame(encoded_districts, columns=ohe.get_feature_names_out(['Район']))
final_data = pd.concat([data[['Площадь']], encoded_df], axis=1)
# Обучение линейной модели
model = LinearRegression()
model.fit(final_data, data['Цена'])
# Предсказание
predictions = model.predict(final_data)
Да, категориальные признаки можно включать в линейные модели, но сначала их нужно преобразовать в числовую форму с помощью методов, таких как One-Hot Encoding или Label Encoding.