Skip to content

Cum să construiești un pipeline de machine learning

DodaTech Updated 2025-01-15 2 min read

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 Pipeline oriunde ai mai mulți pași de preprocesare
  • Combină ColumnTransformer cu Pipeline pentru date mixte numerice/categorice
  • Salvează pipeline-ul cu joblib.dump — nu doar modelul
  • Folosește make_pipeline pentru sintaxă mai scurtă când nu numești pașii

Greșeli Comune

  1. Aplici scalarea manual pe train și test — riști să uiți unul dintre seturi
  2. Nu folosești ColumnTransformer pentru date mixte — preprocesarea devine greu de gestionat
  3. Salvezi doar modelul, nu întreg pipeline-ul — la restaurare nu mai ai preprocesarea
  4. Folosești același pipeline pentru probleme diferite — creează câte un pipeline per sarcină
  5. Nu setezi random_state — rezultatele nu sunt reproductibile

Întrebări Frecvente

### Ce este un pipeline în Machine Learning?

Un pipeline este un obiect sklearn care înlănțuie mai mulți pași de preprocesare și un estimator final într-o singură entitate, apelând fit și predict o singură dată.

Care este diferența dintre Pipeline și make_pipeline?

Pipeline cere nume explicite pentru fiecare pas, iar make_pipeline le generează automat. Alege Pipeline când ai nevoie să accesezi pașii după nume.

Pipeline-ul previne data leakage?

Da, pentru că scalarea se calculează doar pe datele de train în fit și se aplică pe test în transform automat, fără intervenție manuală.

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