Un Pipeline enchaîne plusieurs étapes (prétraitement + modèle) comme un seul "objet". Évite les fuites de données et simplifie le code.
Si tu standardises avant le train/test split, le test connaît les stats du train → fuite de données. Si tu standardises séparément train/test, tes valeurs ne sont pas alignées.
Le pipeline résout ça : il fitte le scaler uniquement sur le train, puis l'applique au test.
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegressionpipe = Pipeline([
('scaler', StandardScaler()),
('classifier', LogisticRegression())
])Format : liste de tuples (nom, estimateur). Le dernier doit être le modèle, les précédents transforment les données.
Pipeline a les mêmes méthodes que n'importe quel modèle :
pipe.fit(X_train, y_train)
pipe.predict(X_test)
pipe.score(X_test, y_test)
cross_val_score(pipe, X, y, cv=5)Accéder à une étape :
pipe.named_steps['classifier'] → le LogisticRegression
pipe.named_steps['scaler'] → le StandardScalerimport numpy as np
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_scorenp.random.seed(42)
X = np.random.randn(200, 3) * [1, 100, 0.01] # features d'amplitudes très différentes
y = (X[:, 0] + X[:, 1]/100 > 0).astype(int)pipe = Pipeline([
('scaler', StandardScaler()),
('clf', LogisticRegression())
])scores = cross_val_score(pipe, X, y, cv=5)
print(f'Pipeline accuracy: {scores.mean():.4f} (+/- {scores.std():.4f})')pipe.fit(X, y)
print(f'Predictions: {pipe.predict(X[:5])}')from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, StandardScalerpreproc = ColumnTransformer([
('num', StandardScaler(), ['age', 'salaire']),
('cat', OneHotEncoder(), ['ville', 'dept']),
])pipe = Pipeline([('preproc', preproc), ('clf', RandomForestClassifier())])Toujours emballer un projet ML en pipeline avant la mise en prod. Garantit la cohérence train/inférence.
Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →