Рекурсивное исключение признаков с использованием кросс-валидации

Machine LearningMachine LearningBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии мы пройдем по шагам реализации Метода рекурсивного исключения признаков с использованием кросс-валидации (RFECV) с использованием scikit-learn. RFECV используется для выбора признаков, что представляет собой процесс выбора подмножества значимых признаков для использования в построении модели. Мы будем использовать задачу классификации с 15 признаками, из которых 3 информативных, 2 избыточных и 10 неинформативных.

Советы по работе с ВМ

После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы столкнетесь с проблемами во время обучения, не стесняйтесь задавать вопросы Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/DataPreprocessingandFeatureEngineeringGroup(["Data Preprocessing and Feature Engineering"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/linear_model("Linear Models") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/feature_selection("Feature Selection") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-49268{{"Рекурсивное исключение признаков с использованием кросс-валидации"}} sklearn/feature_selection -.-> lab-49268{{"Рекурсивное исключение признаков с использованием кросс-валидации"}} sklearn/model_selection -.-> lab-49268{{"Рекурсивное исключение признаков с использованием кросс-валидации"}} sklearn/datasets -.-> lab-49268{{"Рекурсивное исключение признаков с использованием кросс-валидации"}} ml/sklearn -.-> lab-49268{{"Рекурсивное исключение признаков с использованием кросс-валидации"}} end

Генерация данных

Мы сгенерируем задачу классификации с использованием функции make_classification из scikit-learn. Мы сгенерируем 500 выборок с 15 признаками, из которых 3 информативных, 2 избыточных и 10 неинформативных.

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,
)

Обучение и выбор модели

Мы создадим объект RFECV и вычислим кросс-валидированные оценки. Стратегия оценивания "accuracy" оптимизирует долю правильно классифицированных выборок. Мы будем использовать логистическую регрессию в качестве оценщика и стратифицированную k-кратную кросс-валидацию с 5 фолдами.

from sklearn.feature_selection import RFECV
from sklearn.model_selection import StratifiedKFold
from sklearn.linear_model import LogisticRegression

min_features_to_select = 1  ## Минимальное количество признаков для рассмотрения
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_}")

Построение графика количества признаков по сравнению с результатами кросс-валидации

Мы построим график количества выбранных признаков по сравнению с результатами кросс-валидации. Для создания графика мы будем использовать matplotlib.

import matplotlib.pyplot as plt

n_scores = len(rfecv.cv_results_["mean_test_score"])
plt.figure()
plt.xlabel("Number of features selected")
plt.ylabel("Mean test accuracy")
plt.errorbar(
    range(min_features_to_select, n_scores + min_features_to_select),
    rfecv.cv_results_["mean_test_score"],
    yerr=rfecv.cv_results_["std_test_score"],
)
plt.title("Recursive Feature Elimination \nwith correlated features")
plt.show()

Резюме

В этом практическом занятии мы прошли процесс реализации Метода рекурсивного исключения признаков с использованием кросс-валидации (RFECV) с использованием scikit-learn. Мы сгенерировали задачу классификации с 15 признаками, из которых 3 были информативными, 2 были избыточными и 10 были неинформативными. Мы использовали логистическую регрессию в качестве оценщика и стратифицированную k-кратную кросс-валидацию с 5 фолдами. Мы построили график количества выбранных признаков по сравнению с результатами кросс-валидации. Мы обнаружили, что оптимальное количество признаков было равно 3, что соответствовало истинной генеративной модели. Мы также заметили участок равных оценок для 3 - 5 выбранных признаков из-за введения коррелированных признаков.