Cum să construiești un pipeline de machine learning
In this tutorial, you'll learn how to build a Machine Learning pipeline using sklearn's Pipeline class to chain preprocessing and model training into a single reproducible workflow, saving time and preventing data leakage.
Problema
Când prelucrezi date și antrenezi un model ML în pași separați, riști să uiți o transformare, să aplici preprocesarea diferit pe train și test sau să introduci data leakage. Un pipeline leagă toți pașii într-un singur obiect, eliminând aceste probleme.
Soluția Greșită
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
df = pd.read_csv("date.csv")
X = df.drop("target", axis=1)
y = df["target"]
X_train, X_test, y_train, y_test = train_test_split(X, y)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test) # usor de uitat
model = LogisticRegression()
model.fit(X_train_scaled, y_train)
print(model.score(X_test_scaled, y_test))
Problema: Dacă uiți să aplici scaler.transform pe test, codul crapă sau, mai rău, folosești date nescalate la predicție.
Soluția Corectă
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
import pandas as pd
df = pd.read_csv("date.csv")
X = df.drop("target", axis=1)
y = df["target"]
X_train, X_test, y_train, y_test = train_test_split(X, y)
pipeline = Pipeline([
("scaler", StandardScaler()),
("clf", LogisticRegression())
])
pipeline.fit(X_train, y_train)
print(pipeline.score(X_test, y_test))
Output:
0.94
Totul — scalare și antrenare — se face într-un singur apel fit. La predicție, pipeline aplică automat scalarea.
Implementare Pas cu Pas
1. Definiește pașii pipeline-ului
Fiecare pas este o tuplă (nume, estimator). Toți pașii, în afară de ultimul, trebuie să aibă fit_transform. Ultimul trebuie să aibă fit.
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
preprocesare = ColumnTransformer([
("numeric", StandardScaler(), ["varsta", "salariu"]),
("categoric", OneHotEncoder(), ["oras", "departament"])
])
pipeline = Pipeline([
("preprocesare", preprocesare),
("clf", RandomForestClassifier())
])
2. Antrenează pipeline-ul
pipeline.fit(X_train, y_train)
3. Fă predicții
predictii = pipeline.predict(X_test)
probabilitati = pipeline.predict_proba(X_test)
4. Accesează pașii individuali
# Accesează modelul antrenat
model = pipeline.named_steps["clf"]
print(model.feature_importances_)
Sfaturi pentru Prevenire
- Folosește
Pipelineoriunde ai mai mulți pași de preprocesare - Combină
ColumnTransformercuPipelinepentru date mixte numerice/categorice - Salvează pipeline-ul cu
joblib.dump— nu doar modelul - Folosește
make_pipelinepentru sintaxă mai scurtă când nu numești pașii
Greșeli Comune
- Aplici scalarea manual pe train și test — riști să uiți unul dintre seturi
- Nu folosești ColumnTransformer pentru date mixte — preprocesarea devine greu de gestionat
- Salvezi doar modelul, nu întreg pipeline-ul — la restaurare nu mai ai preprocesarea
- Folosești același pipeline pentru probleme diferite — creează câte un pipeline per sarcină
- Nu setezi random_state — rezultatele nu sunt reproductibile
Întrebări Frecvente
Built by the developers of Doda Browser, DodaZIP, and Durga Antivirus Pro. DodaTech tools integrate seamlessly with sklearn for enhanced productivity and security.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro