← Назад к вопросам

Что такое feature selection и какие методы существуют?

2.3 Middle🔥 181 комментариев
#Машинное обучение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Feature Selection: отбор признаков в машинном обучении

Feature selection (отбор признаков) — это процесс выбора подмножества наиболее информативных и релевантных признаков (переменных) из исходного набора данных. Это критически важный этап предобработки данных, который улучшает качество моделей, снижает переобучение и ускоряет обучение.

Зачем нужен feature selection

  • Снижение размерности данных
  • Улучшение обобщающей способности модели (снижение переобучения)
  • Ускорение обучения и предсказания
  • Уменьшение требований к вычислительным ресурсам
  • Интерпретируемость: понимание, какие признаки действительно важны
  • Удаление шумных и нерелевантных признаков

Методы feature selection

1. Univariate Statistics (Фильтровые методы)

Оценивают каждый признак независимо от других:

from sklearn.feature_selection import SelectKBest, chi2, f_classif
from sklearn.feature_selection import mutual_info_classif

# Выбор топ-10 признаков по f-score
selector = SelectKBest(score_func=f_classif, k=10)
X_new = selector.fit_transform(X, y)

# Для категориальных признаков - chi2 или mutual information
selector = SelectKBest(score_func=mutual_info_classif, k=10)

Плюсы: быстро, можно использовать с большими датасетами Минусы: не учитывает взаимодействие признаков

2. Model-based (Встроенные методы)

Используют важность признаков из самой модели:

from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectFromModel

# Random Forest автоматически ранжирует признаки
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X, y)

# Выбираем признаки с важностью выше порога
selector = SelectFromModel(rf, prefit=True, threshold=median)
X_new = selector.transform(X)

# Посмотреть важность
feature_importance = pd.DataFrame({
    feature: X.columns,
    importance: rf.feature_importances_
}).sort_values(importance, ascending=False)

Плюсы: учитывает взаимодействие, быстро Минусы: зависит от выбора модели

3. Wrapper Methods (Обёрточные методы)

Итеративно выбирают признаки, оценивая качество модели:

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

# Рекурсивное исключение признаков (RFE)
rf_model = LogisticRegression(max_iter=1000)
rfe = RFE(estimator=rf_model, n_features_to_select=10, step=1)
rfe.fit(X, y)
X_new = rfe.transform(X)

print(f"Выбранные признаки: {X.columns[rfe.support_]}")

Плюсы: учитывает влияние на качество модели Минусы: вычислительно дорого для больших датасетов

4. Dimensionality Reduction (Сокращение размерности)

Отличаются от feature selection тем, что создают новые признаки:

from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

# PCA
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
pca = PCA(n_components=10)
X_pca = pca.fit_transform(X_scaled)

print(f"Объяснённая дисперсия: {pca.explained_variance_ratio_}")

5. Permutation Feature Importance

Оценивает, насколько качество модели падает при перестановке признака:

from sklearn.inspection import permutation_importance

model = RandomForestClassifier()
model.fit(X_train, y_train)
perm_importance = permutation_importance(model, X_test, y_test)

for name, importance in zip(X.columns, perm_importance.importances_mean):
    print(f"{name}: {importance:.4f}")

Сравнение методов

МетодСкоростьВзаимодействиеИнтерпретируемость
FilterБыстроНетХорошо
Model-basedСреднеДаХорошо
WrapperМедленноДаХорошо
PCAБыстроДаПлохо

Практические рекомендации

  1. Начни с фильтровых методов — быстро отсеишь очевидный шум
  2. Используй встроенные методы моделей — они эффективны и учитывают контекст
  3. Проверяй на validation set — выбор признаков должен улучшить качество на новых данных
  4. Комбинируй методы — например, сначала filter, потом model-based
  5. Следи за доменной экспертизой — не удаляй признаки, которые имеют смысл в контексте задачи

Feature selection — это итеративный процесс, и нет универсального решения для всех задач.