تخطَّ إلى المحتوى

sklearn Pipeline

خط أنابيب scikit-learn (Pipeline) sklearn Pipeline

Pipeline يربط عدة خطوات معالجة و/أو نموذج في كائن واحد بواجهة fit/predict — يمنع تسريب البيانات (data leakage) ويبسّط الكود.

Pipeline سلسلة من المحوّلات (transformers) ينتهي بمُقدِّر (estimator). عند fit() يطبّق كل خطوة بالتتابع على المُخرج السابق. عند predict() يطبّق التحويلات ثم يستدعي predict على النموذج النهائي. الفائدة الأساسية: fit على بيانات التدريب فقط، ثم التحويلات نفسها تطبّق تلقائيًا على بيانات الاختبار — منع تسريب البيانات الذي يحدث حين تعدّل StandardScaler على كل البيانات قبل التقسيم.

make_pipeline() يبني Pipeline تلقائيًا بأسماء افتراضية. Pipeline() يطلب تسمية كل خطوة (مفيد للوصول اللاحق عبر named_steps). ColumnTransformer يحلّ مشكلة "أريد StandardScaler للأعمدة الرقمية فقط، OneHotEncoder للفئوية" داخل Pipeline.

مع GridSearchCV يمكنك ضبط معاملات أي خطوة عبر 'stepname__param'، مثل 'scaler__with_mean': [True, False]. هذا يجعل اختيار preprocessing جزءًا من اختيار النموذج — وليس قرارًا منفصلًا قد يفشل.

الصياغة

from sklearn.pipeline import Pipeline

pipe = Pipeline([
    ("scaler", StandardScaler()),
    ("model", LogisticRegression()),
])
pipe.fit(X_train, y_train)
y_pred = pipe.predict(X_test)

📄 مثال

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_wine

X, y = load_wine(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42, stratify=y)

# scaler يُطبَّق على fit(X_train) فقط — يمنع data leakage
pipe = Pipeline([
    ("scaler", StandardScaler()),
    ("clf", LogisticRegression(max_iter=1000)),
])

pipe.fit(X_train, y_train)
print(f"دقة الاختبار: {pipe.score(X_test, y_test):.3f}")
print(f"اسم الخطوة: {pipe.named_steps['clf'].__class__.__name__}")

أهم النقاط

النقطةالوظيفة
stepsقائمة الخطوات كـ (name, transformer/estimator)
named_stepsوصول للخطوات بالاسم بعد البناء
fit / predictواجهة موحّدة — تستدعي الخطوات بالتتابع
make_pipelineاختصار — يولّد أسماء تلقائية بالأنواع

💡 نصائح عملية

  • ضع أي preprocessing داخل Pipeline وليس خارجه — وإلا ستحصل على نتائج تدريب وهمية أعلى من الأداء الحقيقي
  • ادمج Pipeline مع GridSearchCV لضبط معاملات preprocessing مع معاملات النموذج في نفس البحث

⚠️ أخطاء شائعة

  • تطبيق fit على scaler باستخدام كامل البيانات قبل train_test_split — تسرّب إحصائيات الاختبار إلى التدريب
  • وضع نماذج معًا في Pipeline بدون تحقق من ترتيب fit/predict — Pipeline يحترم واجهة sklearn القياسية

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار AI-ML الكامل بالعربي.

📚 للتعمق التقني الكامل بالإنجليزية: scikit-learn Documentation