Élimination Récursive de Caractéristiques avec Validation Croisée

Machine LearningMachine LearningBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous allons suivre une procédure étape par étape pour implémenter l'Élimination Récursive de Caractéristiques avec Validation Croisée (RFECV) à l'aide de scikit-learn. RFECV est utilisé pour la sélection de caractéristiques, qui est le processus de sélection d'un sous-ensemble de caractéristiques pertinentes pour être utilisées dans la construction de modèles. Nous utiliserons une tâche de classification avec 15 caractéristiques, dont 3 sont informatives, 2 sont redondantes et 10 sont non-informatives.

Conseils sur la VM

Une fois le démarrage de la VM terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) 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/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{{"Élimination Récursive de Caractéristiques avec Validation Croisée"}} sklearn/feature_selection -.-> lab-49268{{"Élimination Récursive de Caractéristiques avec Validation Croisée"}} sklearn/model_selection -.-> lab-49268{{"Élimination Récursive de Caractéristiques avec Validation Croisée"}} sklearn/datasets -.-> lab-49268{{"Élimination Récursive de Caractéristiques avec Validation Croisée"}} ml/sklearn -.-> lab-49268{{"Élimination Récursive de Caractéristiques avec Validation Croisée"}} end

Génération de données

Nous allons générer une tâche de classification à l'aide de la fonction make_classification de scikit-learn. Nous allons générer 500 échantillons avec 15 caractéristiques, dont 3 sont informatives, 2 sont redondantes et 10 sont non-informatives.

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

Entraînement et sélection du modèle

Nous allons créer l'objet RFECV et calculer les scores validés croisés. La stratégie de notation "accuracy" optimise la proportion d'échantillons correctement classés. Nous utiliserons la régression logistique comme estimateur et la validation croisée stratifiée k-fold avec 5 plis.

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

min_features_to_select = 1  ## Nombre minimum de caractéristiques à considérer
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"Nombre optimal de caractéristiques: {rfecv.n_features_}")

Tracer le nombre de caractéristiques en fonction des scores de validation croisée

Nous allons tracer le nombre de caractéristiques sélectionnées en fonction des scores de validation croisée. Nous utiliserons matplotlib pour créer le tracé.

import matplotlib.pyplot as plt

n_scores = len(rfecv.cv_results_["mean_test_score"])
plt.figure()
plt.xlabel("Nombre de caractéristiques sélectionnées")
plt.ylabel("Précision moyenne du test")
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("Élimination Récursive de Caractéristiques \navec des caractéristiques corrélées")
plt.show()

Sommaire

Dans ce laboratoire, nous avons suivi le processus d'implémentation de l'Élimination Récursive de Caractéristiques avec Validation Croisée (RFECV) à l'aide de scikit-learn. Nous avons généré une tâche de classification avec 15 caractéristiques, dont 3 étaient informatives, 2 étaient redondantes et 10 étaient non-informatives. Nous avons utilisé la régression logistique comme estimateur et la validation croisée stratifiée k-fold avec 5 plis. Nous avons tracé le nombre de caractéristiques sélectionnées en fonction des scores de validation croisée. Nous avons constaté que le nombre optimal de caractéristiques était 3, ce qui correspondait au vrai modèle génératif. Nous avons également remarqué un plateau de scores équivalents pour 3 à 5 caractéristiques sélectionnées en raison de l'introduction de caractéristiques corrélées.