العودة إلى المدونة
Machine Learning 5 نونبر 2024 6 min للقراءة

خطوط أنابيب Scikit-learn: الطريقة الصحيحة لبناء تدفقات عمل تعلم الآلة

لماذا يجب تغليف كل شيء في Pipeline من sklearn — منع تسرب البيانات، التحقق المتقاطع الصحيح.

المشكلة بدون خطوط الأنابيب

# WRONG: Fit scaler on all data (data leakage!)
scaler.fit(X)  # should only fit on train set
X_scaled = scaler.transform(X)
cross_val_score(model, X_scaled, y)  # LEAKS validation data into scaler

الطريقة الصحيحة

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.impute import SimpleImputer

pipe = Pipeline([
    ('imputer', SimpleImputer(strategy='median')),
    ('scaler', StandardScaler()),
    ('model', LGBMClassifier()),
])

# Now CV is correct — scaler only fits on train fold
cross_val_score(pipe, X, y, cv=5)  # CORRECT

محوّل مخصص

class LogTransformer(BaseEstimator, TransformerMixin):
    def fit(self, X, y=None): return self
    def transform(self, X):
        return np.log1p(np.abs(X))
Scikit-learnPipelineData LeakageBest PracticesML
O

Ossama Elhakki

مهندس ذكاء اصطناعي وأنظمة ML — المغرب