Feature Selection (sélection des variables pertinentes)

La Feature Selection (sélection des variables pertinentes) est un processus qui consiste à choisir un sous-ensemble des caractéristiques (ou variables) les plus significatives d’un jeu de données pour améliorer les performances d’un modèle d’apprentissage automatique. Cela permet de réduire la complexité du modèle, d’éviter le surapprentissage (overfitting), d’améliorer l’interprétabilité du modèle et de réduire les coûts computationnels. La sélection des variables peut se faire par différentes méthodes telles que : Méthodes filtrantes : elles évaluent l’importance des variables indépendamment du modèle, en utilisant des tests statistiques (comme le chi-carré, la corrélation, etc.). Méthodes wrapper : elles évaluent la performance du modèle en utilisant différentes combinaisons de variables et choisissent celles qui optimisent la performance. Méthodes imbriquées : elles intègrent la sélection des variables directement dans le processus d’apprentissage du modèle, comme dans les algorithmes Lasso (régression) ou les arbres de décision. La feature selection permet donc de simplifier les modèles, améliorer leur efficacité et leur précision tout en réduisant le bruit des données.

Fonctions :

  • SelectKBest()

    SelectKBest est une méthode de sélection de variables qui choisit les k meilleures caractéristiques en fonction d'un test statistique.

    Importation :

    from sklearn.feature_selection import SelectKBest, f_regression

    Attributs :

    Paramètre Description
    score_func Fonction statistique utilisée (ex: f_regression, chi2, mutual_info_classif)
    k Nombre de caractéristiques à sélectionner
    fit(X, y) Entraîne le sélecteur sur les données
    transform(X) Applique la sélection sur les données

    Exemple de code :

    from sklearn.feature_selection import SelectKBest, f_regression
    import pandas as pd
    import numpy as np
    
    # Création d'un DataFrame avec des variables aléatoires
    np.random.seed(42)
    X = pd.DataFrame(np.random.rand(100, 15), columns=[f'feature_{i}' for i in range(15)])
    y = np.random.rand(100)  # Variable cible
    
    # Sélection des 10 meilleures variables
    selector = SelectKBest(score_func=f_regression, k=10)
    X_selected = selector.fit_transform(X, y)
    
    # Affichage des variables sélectionnées
    selected_features = X.columns[selector.get_support()]
    print("Variables sélectionnées :", selected_features)

    Explication du code :

    1. Création des données :
      • X contient 15 variables aléatoires.
      • y est la variable cible (régression).
    2. Sélection avec SelectKBest :
      • f_regression calcule la corrélation entre chaque variable et y.
      • Seules les k=10 meilleures sont conservées.
    3. Affichage des variables retenues :
      • selector.get_support() retourne un masque booléen des features sélectionnées.

    🔎 Remarques

    • Pour un problème de classification, utiliser f_classif ou mutual_info_classif.
    • D'autres méthodes existent (RFE, VarianceThreshold, etc.) pour améliorer la sélection.