Spec-Zone.ru › scikit-learn

Примечание

Перейти к концу для загрузки полного кода примера или запуска этого примера в вашем браузере через 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()
Recursive Feature Elimination  with correlated features

Из графика выше также можно заметить плато эквивалентных оценок (похожие средние значения и перекрывающиеся погрешности) для 3–5 выбранных признаков. Это результат введения коррелированных признаков. Действительно, оптимальная модель, выбранная методом RFE, может находиться в этом диапазоне, в зависимости от техники перекрестной проверки. Точность теста уменьшается при выборе более 5 признаков, то есть сохранение неинформативных признаков приводит к переобучению и, следовательно, негативно сказывается на статистических показателях моделей.

Общее время выполнения скрипта: (0 минут 0,449 секунд)

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_rfe_with_cross_validation.ipynb

Download Python source code: plot_rfe_with_cross_validation.py

Download zipped: plot_rfe_with_cross_validation.zip

Связанные примеры

Сбалансировать сложность модели и результат перекрестной проверки

Настройка стратегии переобучения с использованием перекрестной проверки

Конвейер ANOVA SVM

Настройка порогового значения функции принятия решений

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API