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.
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.