0Pricing
Learn AI with Python · Урок

Методы отбора признаков

Фильтрующие (дисперсия, корреляция), обёрточные (RFE) и встроенные (L1-регуляризация) методы.

«Методы отбора признаков» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.

Зачем выбирать признаки

Отбор признаков сохраняет только самые полезные столбцы. Меньшее число признаков означает более быстрое обучение, меньший риск переобучения и более простую интерпретацию. Удаление шума часто также повышает точность.

Три семейства методов

Методы отбора делятся на три группы:

  • Фильтрующие ранжируют признаки по статистическому показателю (быстрые, независимые от модели)
  • Обёрточные перебирают подмножества, обучая модели (медленные, точные)
  • Встроенные выполняют отбор во время обучения модели

VarianceThreshold

Самый простой фильтр: VarianceThreshold удаляет признаки, дисперсия которых ниже порога. Почти постоянные столбцы не несут информации.

from sklearn.feature_selection import VarianceThreshold

sel = VarianceThreshold(threshold=0.01)
X_reduced = sel.fit_transform(X)
print("Kept:", X_reduced.shape[1], "of", X.shape[1])

SelectKBest с f_classif

SelectKBest сохраняет K признаков с наивысшими оценками. При использовании f_classif применяется F-критерий ANOVA, измеряющий силу связи каждого признака с меткой класса.

from sklearn.feature_selection import SelectKBest, f_classif

sel = SelectKBest(score_func=f_classif, k=10)
X_best = sel.fit_transform(X, y)
print(sel.get_support(indices=True))

Взаимная информация

mutual_info_classif измеряет любую зависимость, в том числе нелинейную, между признаком и целевой переменной. В отличие от F-критерия, этот метод выявляет нелинейные связи, которые ANOVA не обнаруживает.

from sklearn.feature_selection import SelectKBest, mutual_info_classif

sel = SelectKBest(score_func=mutual_info_classif, k=10)
X_mi = sel.fit_transform(X, y)

Сравнение f_classif и mutual_info

f_classif работает быстро и обнаруживает линейные связи; mutual_info_classif работает медленнее, но выявляет нелинейные связи. Если Вы предполагаете наличие сложных взаимосвязей, отдайте предпочтение взаимной информации.

import numpy as np
from sklearn.feature_selection import f_classif, mutual_info_classif

f_scores, _ = f_classif(X, y)
mi_scores = mutual_info_classif(X, y)
print("F-test top:", np.argsort(f_scores)[::-1][:5])
print("MI top:", np.argsort(mi_scores)[::-1][:5])

Рекурсивное исключение признаков

RFE — обёрточный метод: он обучает модель, удаляет наименее важный признак и повторяет процесс. Для ранжирования признаков используется собственный показатель важности модели.

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

rfe = RFE(estimator=LogisticRegression(max_iter=1000), n_features_to_select=10)
rfe.fit(X, y)
print(rfe.support_)

RFECV: автоматический выбор количества

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

from sklearn.feature_selection import RFECV
from sklearn.ensemble import RandomForestClassifier

rfecv = RFECV(
    estimator=RandomForestClassifier(),
    cv=5,
    scoring="accuracy",
)
rfecv.fit(X, y)
print("Optimal features:", rfecv.n_features_)

SelectFromModel с Lasso

Встроенный отбор: Lasso (L1) уменьшает неважные коэффициенты ровно до нуля. Затем SelectFromModel сохраняет только ненулевые коэффициенты.

from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import Lasso

sel = SelectFromModel(Lasso(alpha=0.01))
sel.fit(X, y)
X_lasso = sel.transform(X)
print("Kept:", X_lasso.shape[1])

SelectFromModel с важностями деревьев

SelectFromModel также работает с любым оценщиком, предоставляющим feature_importances_, например со случайными лесами. Задайте threshold, например "mean" или "median".

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

sel = SelectFromModel(
    RandomForestClassifier(n_estimators=200),
    threshold="median",
)
sel.fit(X, y)

Выбор метода

Начните с дешёвых фильтров (VarianceThreshold, SelectKBest), чтобы удалить явно бесполезные признаки. Используйте встроенный SelectFromModel для хорошего баланса. Выбирайте RFECV, когда точность наиболее важна и вычислительные ресурсы позволяют его применить.

Быстрая проверка

Проверьте свои знания об отборе признаков.

Итоги

Итоги: Отбор признаков включает фильтрующие методы (VarianceThreshold, SelectKBest с f_classif или mutual_info_classif), обёрточные методы (RFECV) и встроенные методы (SelectFromModel с Lasso или важностями деревьев). Фильтры работают быстрее всего, а RFECV обычно обеспечивает наибольшую точность. Используйте взаимную информацию для нелинейных связей.

Часто задаваемые вопросы

Урок «Методы отбора признаков» бесплатный?

Да — полный текст урока «Методы отбора признаков» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.

Чему я научусь в уроке «Методы отбора признаков»?

Фильтрующие (дисперсия, корреляция), обёрточные (RFE) и встроенные (L1-регуляризация) методы. Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn AI with Python?

Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Методы отбора признаков»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn AI with Python?

Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Методы отбора признаков
  2. Создание взаимодействий и полиномиальных признаков
  3. Целевое кодирование и расширенная обработка категорий
  4. Автоматизированное конструирование признаков с Featuretools
← Назад к Learn AI with Python