Ответ
При работе с высокоразмерными данными (тысячи признаков) я применяю многоэтапный подход к отбору фич, комбинируя фильтрующие, встроенные и модельные методы.
Моя типичная стратегия:
-
Фильтрующие методы (Filter Methods): Быстрая первичная отсечка.
- Удаляю константные и квази-константные признаки.
- Удаляю дубликаты и признаки с очень высокой корреляцией (например, >0.95).
import pandas as pd import numpy as np
Вычисление корреляционной матрицы
corr_matrix = X.corr().abs()
Выбор верхнего треугольника матрицы
upper = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(bool))
Поиск признаков с корреляцией выше порога
to_drop = [column for column in upper.columns if any(upper[column] > 0.95)] X_filtered = X.drop(columns=to_drop)
-
Встроенные методы (Embedded Methods): Отбор в процессе обучения модели.
- Использую модели с регуляризацией L1 (Lasso), которая зануляет неважные веса.
- Анализирую
feature_importances_из ансамблевых моделей (RandomForest, Gradient Boosting).from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_estimators=100, random_state=42) rf.fit(X_filtered, y) importances = rf.featureimportances
Выбираю топ-N признаков
top_n_indices = np.argsort(importances)[-20:] # топ-20 X_selected = X_filtered.iloc[:, top_n_indices]
-
Методы-обёртки (Wrapper Methods): Для финальной тонкой настройки, если позволяет время.
- Recursive Feature Elimination (RFE) с простой моделью-оценщиком.
Критерий остановки: Я сравниваю качество модели (например, ROC-AUC) на валидационной выборке до и после отбора. Цель — сохранить или улучшить метрику, значительно сократив пространство признаков.