Ответ
Отбор признаков (feature selection) — это критический этап для повышения производительности модели, сокращения времени обучения и предотвращения переобучения. Я обычно применяю комбинацию методов, начиная с быстрых фильтров и заканчивая более точными встроенными или обёрточными подходами.
Основные методы, которые я использую:
-
Фильтрационные методы (Filter Methods): Быстрая предварительная оценка.
- Удаление константных и квази-константных признаков.
- Удаление сильно коррелирующих признаков: Я удаляю один из пары признаков с корреляцией выше 0.85-0.9, чтобы снизить мультиколлинеарность.
import numpy as np import pandas as pd
corr_matrix = df.corr().abs() upper_triangle = corr_matrix.where(np.triu(np.ones_like(corr_matrix), k=1).astype(bool)) to_drop = [col for col in upper_triangle.columns if any(upper_triangle[col] > 0.9)] df_reduced = df.drop(to_drop, axis=1)
* **Статистические тесты:** `SelectKBest` с `f_classif` (ANOVA) для классификации или `f_regression` для регрессии. -
Встроенные методы (Embedded Methods): Признаки отбираются в процессе обучения модели.
- Важность признаков из деревьев: Использую
feature_importances_уRandomForestClassifierилиGradientBoostingClassifier. Это даёт понимание, какие признаки модель считает ключевыми. - L1-регуляризация (Lasso): В линейных моделях L1-регуляризация обнуляет веса неинформативных признаков. Это эффективный способ автоматического отбора.
- Важность признаков из деревьев: Использую
-
Методы-обёртки (Wrapper Methods): Точные, но вычислительно дорогие. Использую для финальной тонкой настройки набора признаков.
- Recursive Feature Elimination (RFE): Итеративно удаляет наименее важные признаки, используя оценку важности от модели (например, SVM или того же RandomForest).
from sklearn.feature_selection import RFE from sklearn.ensemble import RandomForestClassifier
estimator = RandomForestClassifier(n_estimators=50) selector = RFE(estimator, n_features_to_select=15, step=1) selector = selector.fit(X_train, y_train) X_train_selected = selector.transform(X_train)
- Recursive Feature Elimination (RFE): Итеративно удаляет наименее важные признаки, используя оценку важности от модели (например, SVM или того же RandomForest).
Мой типичный рабочий процесс:
- Удаляю константы и дубликаты.
- Анализирую и удаляю высокие корреляции.
- Применяю
SelectKBestдля быстрого сужения круга. - Обучаю модель с L1-регуляризацией или смотрю важность признаков из RandomForest.
- Для наиболее важных задач финализирую набор с помощью RFE.
Ключевой принцип — всегда проверять качество модели на отложенной выборке (validation set) после каждого этапа отбора, чтобы убедиться, что мы не выбросили что-то важное.