Exercices Machine Learning Pipeline sklearn : tout enchainer
🎉

Bravo!

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

Pipeline sklearn : tout enchainer

Tu normalises tes donnees, tu selectionnes les features, tu entraines le modele, et a chaque etape tu risques d'introduire un bug subtil : appliquer le scaler sur le test set avant le fit, oublier une transformation... Le Pipeline de sklearn resout tout ca en enchainant les etapes dans un seul objet qui empeche le data leakage.

Le Pipeline de sklearn chaine toutes les étapes en un seul objet. Quand tu appelles .fit(), il applique chaque étape dans l'ordre. Quand tu appelles .predict(), il transforme les données puis predit.

Avantage crucial : le Pipeline garantit qu'il n'y a pas de data leakage. Le scaler est fit uniquement sur le train set.

from sklearn.pipeline import Pipeline
pipe = Pipeline([
('scaler', StandardScaler()),
('selector', SelectKBest(k=5)),
('model', LogisticRegression()),
])
pipe.fit(X_train, y_train)
pipe.predict(X_test)
pipe.score(X_test, y_test) # accuracy directement

Écris une fonction créer_pipeline(X_train, y_train, X_test, y_test, k_features=5) qui crée un pipeline StandardScaler + SelectKBest + LogisticRegression, l'entraine et renvoie :
'accuracy' : accuracy sur le test set
'pipeline' : l'objet pipeline entraine

Tests (4/4)

Accuracy entre 0 et 1
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=200, n_features=15, n_informative=5, random_state=42)
result = créer_pipeline(X[:150], y[:150], X[150:], y[150:])
assert 0 <= result['accuracy'] <= 1
Pipeline a 3 étapes
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=200, n_features=10, random_state=42)
result = créer_pipeline(X[:150], y[:150], X[150:], y[150:])
assert len(result['pipeline'].steps) == 3
Pipeline peut predire
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=200, n_features=10, random_state=42)
result = créer_pipeline(X[:150], y[:150], X[150:], y[150:])
preds = result['pipeline'].predict(X[150:])
assert len(preds) == 50
K features different
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=200, n_features=20, n_informative=3, random_state=42)
result = créer_pipeline(X[:150], y[:150], X[150:], y[150:], k_features=3)
assert result['pipeline'].named_steps['selector'].k == 3

Indices (3 disponibles)

solution.py