Exercices Machine Learning SelectKBest : selection de features
🎉

Bravo!

Avancé 🧠 Fondamentaux 30 XP 0 personnes ont réussi

SelectKBest : selection de features

Tu as 100 colonnes dans ton dataset, mais est-ce que toutes sont utiles ? Certaines sont du bruit, d'autres sont redondantes. Garder trop de features peut meme degrader les performances de ton modele (la malediction de la dimensionnalite). SelectKBest te permet de garder seulement les features qui comptent vraiment.

SelectKBest selectionne les k meilleures features selon un test statistique. Pour la classification, on utilise souvent f_classif (test ANOVA F). Pour la regression, mutual_info_regression.

Le test mesure a quel point chaque feature est liee a la cible. Les features avec les scores les plus eleves sont gardees.

from sklearn.feature_selection import SelectKBest, f_classif
selector = SelectKBest(score_func=f_classif, k=5)
X_selected = selector.fit_transform(X, y)
selector.scores_ # score de chaque feature
selector.get_support() # True/False pour chaque feature

Écris une fonction selectionner_features(X, y, k=5, feature_names=None) qui selectionne les k meilleures features et renvoie :
'X_selected' : les features selectionnees (array)
'scores' : dictionnaire feature_name (ou index) -> score
'features_gardees' : liste des noms (ou indices) des features gardees

Tests (4/4)

Bonne dimension
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=100, n_features=10, n_informative=5, random_state=42)
result = selectionner_features(X, y, k=5)
assert result['X_selected'].shape[1] == 5
K features gardees
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=100, n_features=10, random_state=42)
names = [f'f{i}' for i in range(10)]
result = selectionner_features(X, y, k=3, feature_names=names)
assert len(result['features_gardees']) == 3
Scores pour toutes les features
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=100, n_features=5, random_state=42)
result = selectionner_features(X, y, k=3)
assert len(result['scores']) == 5
Avec noms de features
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=100, n_features=4, random_state=42)
result = selectionner_features(X, y, k=2, feature_names=['age', 'taille', 'poids', 'salaire'])
assert all(isinstance(n, str) for n in result['features_gardees'])

Indices (3 disponibles)

solution.py