📌 Можно ли в линейную модель поместит категориальные признаки?



💬 Спрашивают в 14% собеседований



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



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



1️⃣ One-Hot Encoding (OHE):



Каждый категориальный признак преобразуется в несколько бинарных (0 или 1) признаков. Например, если у вас есть признак "Цвет" с возможными значениями "Красный", "Зеленый" и "Синий", он будет преобразован в три бинарных признака: "Цвет_Красный", "Цвет_Зеленый" и "Цвет_Синий".



Пример:

     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(['Цвет']))





2️⃣ Label Encoding:



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



Пример:

     from sklearn.preprocessing import LabelEncoder



# Пример данных

data = pd.DataFrame({'Цвет': ['Красный', 'Зеленый', 'Синий', 'Красный']})



# Применение Label Encoding

le = LabelEncoder()

data['Цвет_метка'] = le.fit_transform(data['Цвет'])





🤔 Почему это нужно:



1️⃣ Совместимость с математическими операциями:

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



2️⃣ Улучшение предсказательной мощности:



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



🤔 Пример использования в линейной регрессии:



Предположим, у вас есть данные о ценах на квартиры, включая категориальный признак "Район" (центр, окраина, пригород). Мы можем использовать 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.



🔥 ТОП ВОПРОСОВ С СОБЕСОВ



🔒 База собесов | 🔒 База тестовых