Примечание
Перейти к концу для загрузки полного кода примера или запуска этого примера в вашем браузере через JupyterLite или Binder
Пошаговое исключение признаков с перекрестной проверкой
Пример пошагового исключения признаков (RFE) с автоматической настройкой количества выбранных признаков с помощью перекрестной проверки.
# Authors: The scikit-learn developers # SPDX-License-Identifier: BSD-3-Clause
Генерация данных
Мы создаем задачу классификации, используя 3 информативных признака. Введение 2 дополнительных избыточных (т.е. коррелированных) признаков приводит к тому, что выбранные признаки меняются в зависимости от перекрестной проверки. Остальные признаки неинформативны, так как они случайным образом выбираются.
from sklearn.datasets import make_classification
X, y = make_classification(
n_samples=500,
n_features=15,
n_informative=3,
n_redundant=2,
n_repeated=0,
n_classes=8,
n_clusters_per_class=1,
class_sep=0.8,
random_state=0,
)
Обучение и подбор модели
Мы создаем объект RFE и вычисляем результаты перекрестной проверки. Стратегия оценки «точность» оптимизирует долю правильно классифицированных образцов.
from sklearn.feature_selection import RFECV
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import StratifiedKFold
min_features_to_select = 1 # Minimum number of features to consider
clf = LogisticRegression()
cv = StratifiedKFold(5)
rfecv = RFECV(
estimator=clf,
step=1,
cv=cv,
scoring="accuracy",
min_features_to_select=min_features_to_select,
n_jobs=2,
)
rfecv.fit(X, y)
print(f"Optimal number of features: {rfecv.n_features_}")
Optimal number of features: 3
В данном случае модель с 3 признаками (что соответствует истинной порождающей модели) оказалась наиболее оптимальной.
График количества признаков VS. результаты перекрестной проверки
import matplotlib.pyplot as plt
import pandas as pd
cv_results = pd.DataFrame(rfecv.cv_results_)
plt.figure()
plt.xlabel("Number of features selected")
plt.ylabel("Mean test accuracy")
plt.errorbar(
x=cv_results["n_features"],
y=cv_results["mean_test_score"],
yerr=cv_results["std_test_score"],
)
plt.title("Recursive Feature Elimination \nwith correlated features")
plt.show()

Из графика выше также можно заметить плато эквивалентных оценок (похожие средние значения и перекрывающиеся погрешности) для 3–5 выбранных признаков. Это результат введения коррелированных признаков. Действительно, оптимальная модель, выбранная методом RFE, может находиться в этом диапазоне, в зависимости от техники перекрестной проверки. Точность теста уменьшается при выборе более 5 признаков, то есть сохранение неинформативных признаков приводит к переобучению и, следовательно, негативно сказывается на статистических показателях моделей.
Общее время выполнения скрипта: (0 минут 0,449 секунд)
Связанные примеры
© 2007–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/auto_examples/feature_selection/plot_rfe_with_cross_validation.html