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

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