Sélection de fonctionnalités avec Scikit-Learn

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

La sélection de fonctionnalités est une étape importante en apprentissage automatique. Elle consiste à sélectionner les fonctionnalités les plus pertinentes à partir d'un ensemble de données pour améliorer la précision et les performances du modèle. Dans scikit-learn, le module sklearn.feature_selection fournit diverses méthodes pour la sélection de fonctionnalités et la réduction de la dimensionalité.

Ce laboratoire vous guidera tout au long du processus de sélection de fonctionnalités en utilisant scikit-learn. Nous aborderons des techniques telles que la suppression de fonctionnalités avec une faible variance, la sélection de fonctionnalités univariées, l'élimination récursive de fonctionnalités et la sélection de fonctionnalités en utilisant SelectFromModel.

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 des commentaires après la session, et nous résoudrons rapidement le problème pour vous.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/DataPreprocessingandFeatureEngineeringGroup(["Data Preprocessing and Feature Engineering"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/ensemble("Ensemble Methods") sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/svm("Support Vector Machines") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/feature_selection("Feature Selection") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/ensemble -.-> lab-71110{{"Sélection de fonctionnalités avec Scikit-Learn"}} sklearn/svm -.-> lab-71110{{"Sélection de fonctionnalités avec Scikit-Learn"}} sklearn/feature_selection -.-> lab-71110{{"Sélection de fonctionnalités avec Scikit-Learn"}} sklearn/datasets -.-> lab-71110{{"Sélection de fonctionnalités avec Scikit-Learn"}} ml/sklearn -.-> lab-71110{{"Sélection de fonctionnalités avec Scikit-Learn"}} end

Suppression de fonctionnalités avec une faible variance

La classe VarianceThreshold dans scikit-learn peut être utilisée pour supprimer les fonctionnalités avec une faible variance. Les fonctionnalités avec une faible variance ne fournissent généralement pas beaucoup d'informations pour le modèle. Nous allons démontrer comment utiliser VarianceThreshold pour supprimer les fonctionnalités à variance nulle.

from sklearn.feature_selection import VarianceThreshold

X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]

## Initialise VarianceThreshold avec un seuil de variabilité de 80%
sel = VarianceThreshold(seuil=(.8 * (1 -.8)))

## Sélectionne les fonctionnalités avec une forte variabilité
X_sélectionné = sel.fit_transform(X)

print("Forme originale de X :", X.shape)
print("Forme de X avec les fonctionnalités sélectionnées :", X_sélectionné.shape)
print("Fonctionnalités sélectionnées :", sel.get_support(indices=True))

Ce extrait de code démontre comment utiliser VarianceThreshold pour supprimer les fonctionnalités à variance nulle d'un ensemble de données. La sortie montrera la forme originale de l'ensemble de données et la forme après la sélection des fonctionnalités avec une forte variabilité.

Sélection de fonctionnalités univariées

La sélection de fonctionnalités univariées fonctionne en sélectionnant les meilleures fonctionnalités sur la base de tests statistiques univariés. Dans scikit-learn, plusieurs classes implémentent la sélection de fonctionnalités univariées :

  • SelectKBest : sélectionne les k meilleures fonctionnalités ayant les scores les plus élevés
  • SelectPercentile : sélectionne un pourcentage spécifié par l'utilisateur des fonctionnalités ayant les scores les plus élevés
  • SelectFpr : sélectionne les fonctionnalités sur la base du taux de faux positifs
  • SelectFdr : sélectionne les fonctionnalités sur la base du taux de découverte de faux positifs
  • SelectFwe : sélectionne les fonctionnalités sur la base de l'erreur globale familiale
  • GenericUnivariateSelect : permet la sélection avec une stratégie configurable

Voici un exemple d'utilisation de SelectKBest pour sélectionner les deux meilleures fonctionnalités à partir du jeu de données Iris :

from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_classif

## Charge le jeu de données Iris
X, y = load_iris(return_X_y=True)

## Initialise SelectKBest avec la fonction de scoring f_classif et k = 2
sélecteur = SelectKBest(f_classif, k = 2)

## Sélectionne les meilleures fonctionnalités
X_sélectionné = sélecteur.fit_transform(X, y)

print("Forme originale de X :", X.shape)
print("Forme de X avec les fonctionnalités sélectionnées :", X_sélectionné.shape)
print("Fonctionnalités sélectionnées :", sélecteur.get_support(indices=True))

Dans cet exemple, nous utilisons la fonction de scoring f_classif et sélectionnons les deux meilleures fonctionnalités à partir du jeu de données Iris. La sortie montrera la forme originale de l'ensemble de données et la forme après la sélection des meilleures fonctionnalités.

Élimination récursive de fonctionnalités

L'élimination récursive de fonctionnalités (RFE) est une méthode de sélection de fonctionnalités qui considère de manière récursive des ensembles de fonctionnalités de plus en plus petits pour sélectionner les plus importantes. Elle fonctionne en entraînant un estimateur externe avec des poids attribués aux fonctionnalités et en éliminant les fonctionnalités les moins importantes.

from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.feature_selection import RFE

## Charge le jeu de données Iris
X, y = load_iris(return_X_y=True)

## Initialise SVC comme estimateur externe
estimateur = SVC(kernel="linear")

## Initialise RFE avec l'estimateur externe et sélectionne 2 fonctionnalités
sélecteur = RFE(estimateur, n_features_to_select=2)

## Sélectionne les meilleures fonctionnalités
X_sélectionné = sélecteur.fit_transform(X, y)

print("Forme originale de X :", X.shape)
print("Forme de X avec les fonctionnalités sélectionnées :", X_sélectionné.shape)
print("Fonctionnalités sélectionnées :", sélecteur.get_support(indices=True))

Dans cet exemple, nous utilisons un classifieur à vecteurs de support (SVC) comme estimateur externe et sélectionnons les deux meilleures fonctionnalités à partir du jeu de données Iris. La sortie montrera la forme originale de l'ensemble de données et la forme après la sélection des meilleures fonctionnalités.

Sélection de fonctionnalités en utilisant SelectFromModel

La classe SelectFromModel est un méta-transformateur qui peut être utilisé avec tout estimateur qui attribue une importance à chaque fonctionnalité. Elle sélectionne les fonctionnalités en fonction de leur importance et élimine les fonctionnalités inférieures à un seuil spécifié.

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectFromModel

## Charge le jeu de données Iris
X, y = load_iris(return_X_y=True)

## Initialise RandomForestClassifier comme estimateur
estimateur = RandomForestClassifier()

## Initialise SelectFromModel avec l'estimateur et le seuil "moyenne"
sélecteur = SelectFromModel(estimateur, seuil="moyenne")

## Sélectionne les meilleures fonctionnalités
X_sélectionné = sélecteur.fit_transform(X, y)

print("Forme originale de X :", X.shape)
print("Forme de X avec les fonctionnalités sélectionnées :", X_sélectionné.shape)
print("Fonctionnalités sélectionnées :", sélecteur.get_support(indices=True))

Dans cet exemple, nous utilisons un classifieur à forêt aléatoire comme estimateur et sélectionnons les fonctionnalités dont l'importance est supérieure à l'importance moyenne. La sortie montrera la forme originale de l'ensemble de données et la forme après la sélection des meilleures fonctionnalités.

Sommaire

La sélection de fonctionnalités est une étape essentielle en apprentissage automatique pour améliorer la précision et les performances des modèles. Dans ce laboratoire, nous avons abordé diverses techniques telles que la suppression de fonctionnalités avec une faible variance, la sélection de fonctionnalités univariées, l'élimination récursive de fonctionnalités et la sélection de fonctionnalités en utilisant SelectFromModel. Ces techniques aident à sélectionner les fonctionnalités les plus pertinentes et à réduire la dimensionalité de l'ensemble de données, ce qui entraîne une amélioration des performances du modèle.