Introduction
Ce laboratoire démontre deux approches de sélection de fonctionnalités : basée sur le modèle et sélection séquentielle de fonctionnalités. L'objectif est de sélectionner les fonctionnalités les plus importantes à partir d'un ensemble de données donné. Nous utilisons l'ensemble de données Diabetes, composé de 10 fonctionnalités recueillies auprès de 442 patients diabétiques.
Conseils sur la machine virtuelle
Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes 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.
Chargement des données
Nous chargeons l'ensemble de données Diabetes à partir de scikit-learn et affichons sa description.
from sklearn.datasets import load_diabetes
diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target
print(diabetes.DESCR)
Importance des fonctionnalités à partir des coefficients
Pour avoir une idée de l'importance des fonctionnalités, nous utilisons l'estimateur RidgeCV. Les fonctionnalités ayant la valeur absolue la plus élevée de coef_ sont considérées comme les plus importantes.
from sklearn.linear_model import RidgeCV
ridge = RidgeCV(alphas=np.logspace(-6, 6, num=5)).fit(X, y)
importance = np.abs(ridge.coef_)
feature_names = np.array(diabetes.feature_names)
plt.bar(height=importance, x=feature_names)
plt.title("Feature importances via coefficients")
plt.show()
Sélection de fonctionnalités basée sur l'importance
Nous sélectionnons les deux fonctionnalités qui sont les plus importantes selon les coefficients en utilisant SelectFromModel. SelectFromModel accepte un paramètre seuil et sélectionnera les fonctionnalités dont l'importance (définie par les coefficients) est supérieure à ce seuil.
from sklearn.feature_selection import SelectFromModel
threshold = np.sort(importance)[-3] + 0.01
sfm = SelectFromModel(ridge, threshold=threshold).fit(X, y)
print(f"Features selected by SelectFromModel: {feature_names[sfm.get_support()]}")
Sélection de fonctionnalités avec la sélection séquentielle de fonctionnalités
Nous utilisons le Sélecteur séquentiel de fonctionnalités (SFS) pour sélectionner les fonctionnalités. Le SFS est une procédure gourmande où, à chaque itération, nous choisissons la meilleure nouvelle fonctionnalité à ajouter à nos fonctionnalités sélectionnées en fonction d'un score de validation croisée. Nous pouvons également aller dans la direction inverse (SFS arrière), c'est-à-dire commencer avec toutes les fonctionnalités et choisir gourmandement les fonctionnalités à supprimer une par une.
from sklearn.feature_selection import SequentialFeatureSelector
sfs_forward = SequentialFeatureSelector(ridge, n_features_to_select=2, direction="forward").fit(X, y)
sfs_backward = SequentialFeatureSelector(ridge, n_features_to_select=2, direction="backward").fit(X, y)
print(f"Features selected by forward sequential selection: {feature_names[sfs_forward.get_support()]}")
print(f"Features selected by backward sequential selection: {feature_names[sfs_backward.get_support()]}")
Sommaire
Ce laboratoire a démontré deux approches de sélection de fonctionnalités : la sélection basée sur un modèle et la sélection séquentielle de fonctionnalités. Nous avons utilisé l'estimateur RidgeCV pour obtenir l'importance des fonctionnalités et SelectFromModel pour sélectionner les fonctionnalités en fonction de leur importance. Le Sélecteur séquentiel de fonctionnalités est une procédure gourmande où, à chaque itération, nous choisissons la meilleure nouvelle fonctionnalité à ajouter à nos fonctionnalités sélectionnées en fonction d'un score de validation croisée.