fit / predict
واجهة fit و predict في scikit-learn fit / predict
كل نماذج scikit-learn تتبع نفس الواجهة: fit(X, y) للتدريب، predict(X) للتنبؤ، و predict_proba(X) لاحتمالات التصنيف — اتساق يجعل التبديل بين النماذج سهلًا.
اتساق الواجهة في scikit-learn من أقوى نقاطه: أي مصنّف (Classifier) أو منحدر (Regressor) يقدّم fit(X, y) للتدريب، predict(X) للتنبؤ، و score(X, y) لتقييم سريع. مصنّفات التصنيف تضيف predict_proba(X) لاحتمالات كل فئة، و decision_function(X) في بعض النماذج (مثل SVM) لدرجات القرار.
fit() يأخذ المُدخلات X كمصفوفة (n_samples, n_features) والمُخرجات y كـ 1D. predict() يأخذ نفس شكل X (لكن بعدد مختلف من العيّنات) ويُرجع تنبؤات بنفس طول عدد العيّنات. score() مقياس افتراضي للنموذج (R² للانحدار، accuracy للتصنيف).
هذا التوحيد يعني يمكنك تبديل LogisticRegression بـ RandomForestClassifier بدون تغيير باقي الـ pipeline — يكفي تعديل سطر واحد. وهو ما يتيح تقنيات مثل cross_val_score و GridSearchCV العمل على أي نموذج.
الصياغة
model = SomeEstimator() model.fit(X_train, y_train) # تدريب y_pred = model.predict(X_test) # تنبؤ score = model.score(X_test, y_test) # تقييم proba = model.predict_proba(X_test) # احتمالات (مصنّفات فقط)
📄 مثال
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42, stratify=y)
# نفس الواجهة لكلا النموذجين — تبديل سطر واحد
model = LogisticRegression(max_iter=1000)
# model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(f"دقة: {model.score(X_test, y_test):.3f}")
print(f"احتمالات أول عيّنة: {model.predict_proba(X_test[:1]).round(2)}")أهم النقاط
| النقطة | الوظيفة |
|---|---|
| fit(X, y) | تدريب النموذج على البيانات — يعدّل المعاملات الداخلية |
| predict(X) | تنبؤ بالتصنيف/القيمة لعيّنات جديدة |
| predict_proba(X) | احتمالات كل فئة — متاح لمصنّفات التصنيف فقط |
| score(X, y) | مقياس افتراضي تلقائي (R² أو accuracy) |
💡 نصائح عملية
- احفظ النموذج المُدرَّب بـ joblib.dump(model, 'file.pkl') للاستخدام لاحقًا بدون إعادة تدريب
- استخدم predict_proba بدل predict حين تحتاج تعدّل threshold لاحقًا — التنبؤ الثنائي يفقد المرونة
⚠️ أخطاء شائعة
- استدعاء predict_proba على نموذج انحدار — غير متاح، المنحدرات ليس لها "احتمالات"
- إعادة fit() على بيانات جديدة بدل إنشاء نموذج جديد — fit يعيد ضبط المعاملات، لا يتراكم تدريبيًا
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار AI-ML الكامل بالعربي.
📚 للتعمق التقني الكامل بالإنجليزية: scikit-learn Documentation