Middle — Senior
38
Как обрабатывать пропуски и категориальные признаки перед обучением модели?
Companies where asked
Answer from AI
sobes.tech AI
Обработка пропусков и категориальных признаков — важный этап подготовки данных для обучения моделей машинного обучения.
Пропуски в данных:
- Удаление строк или столбцов: если пропусков мало, можно удалить соответствующие строки или столбцы.
- Заполнение значений: чаще применяют заполнение средним, медианой, модой или специальным значением (например, "Unknown"). Для временных рядов можно использовать метод прямой или обратной интерполяции.
- Использование моделей: иногда пропуски заполняют предсказаниями других моделей.
Категориальные признаки:
- Label Encoding: присваивает каждой категории числовой код. Подходит для упорядоченных категорий.
- One-Hot Encoding: создаёт бинарные признаки для каждой категории. Хорошо для неупорядоченных категорий.
- Target Encoding: заменяет категории средним значением целевой переменной, но требует аккуратности во избежание утечки данных.
Пример на Python с использованием pandas и scikit-learn:
import pandas as pd
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder
# Пример данных
data = pd.DataFrame({
'age': [25, 30, None, 22],
'city': ['Moscow', 'SPB', 'Moscow', None]
})
# Заполнение пропусков в числовом признаке медианой
imputer = SimpleImputer(strategy='median')
data['age'] = imputer.fit_transform(data[['age']])
# Заполнение пропусков в категориальном признаке модой
imputer_cat = SimpleImputer(strategy='most_frequent')
data['city'] = imputer_cat.fit_transform(data[['city']])
# One-Hot Encoding для категориального признака
encoder = OneHotEncoder(sparse=False, handle_unknown='ignore')
encoded_cities = encoder.fit_transform(data[['city']])
encoded_df = pd.DataFrame(encoded_cities, columns=encoder.get_feature_names_out(['city']))
# Итоговый датафрейм
result = pd.concat([data.drop('city', axis=1), encoded_df], axis=1)
print(result)
Таким образом, правильная обработка пропусков и категориальных признаков помогает повысить качество модели и избежать ошибок при обучении.