تقييم النماذج والتحقق المتقاطع
قيّم النماذج باستخدام الدقة وF1 وROC-AUC والتحقق المتقاطع k-fold
تقييم النماذج والتحقق المتقاطع درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.
تقسيم التدريب والتحقق والاختبار
استخدم تقسيمًا ثلاثيًا: التدريب لملاءمة النموذج، والتحقق لضبط المعلمات الفائقة، والاختبار للإبلاغ عن الأداء النهائي. لا تستخدم مجموعة الاختبار مطلقًا أثناء التطوير.
from sklearn.model_selection import train_test_split
import numpy as np
X = np.random.rand(1000, 10)
y = (X[:,0] > 0.5).astype(int)
X_tr, X_rest, y_tr, y_rest = train_test_split(X, y, test_size=0.3)
X_val, X_te, y_val, y_te = train_test_split(X_rest, y_rest, test_size=0.5)درجة الدقة
تمثل accuracy_score نسبة التنبؤات الصحيحة. استخدمها مع الفئات المتوازنة؛ أما مع البيانات غير المتوازنة ففضّل F1 أو AUC.
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)
model = LogisticRegression().fit(X_tr, y_tr)
print("Accuracy:", accuracy_score(y_te, model.predict(X_te)))الدقة والاستدعاء وF1
مع الفئات غير المتوازنة: الدقة = TP/(TP+FP)، والاستدعاء = TP/(TP+FN)، وF1 = المتوسط التوافقي للدقة والاستدعاء.
from sklearn.metrics import precision_score, recall_score, f1_score, classification_report
# Use classification_report for a full summary:
print(classification_report(y_te, model.predict(X_te)))
# shows precision, recall, f1 for each classمصفوفة الالتباس
تعرض مصفوفة الالتباس الإيجابيات الحقيقية، والإيجابيات الكاذبة، والسلبيات الحقيقية، والسلبيات الكاذبة.
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
import matplotlib.pyplot as plt
cm = confusion_matrix(y_te, model.predict(X_te))
print(cm)
# [[TN FP]
# [FN TP]]منحنى ROC وAUC
تقيس roc_auc_score المساحة أسفل منحنى ROC. تمثل قيمة AUC البالغة 1.0 أداءً مثاليًا، بينما تمثل القيمة 0.5 تخمينًا عشوائيًا.
from sklearn.metrics import roc_auc_score, roc_curve
y_prob = model.predict_proba(X_te)[:,1]
print("AUC:", roc_auc_score(y_te, y_prob))
fpr, tpr, thresholds = roc_curve(y_te, y_prob)
# plot fpr vs tpr for the full ROC curveمقاييس الانحدار
استخدم mean_squared_error (MSE) وroot_mean_squared_error (RMSE) وr2_score لمهام الانحدار.
from sklearn.metrics import mean_squared_error, r2_score
y_pred = regression_model.predict(X_te)
mse = mean_squared_error(y_te, y_pred)
print("RMSE:", mse**0.5)
print("R²:", r2_score(y_te, y_pred))التحقق المتقاطع k-Fold
تقسم cross_val_score البيانات إلى k طيات، وتدرّب النموذج على k-1 طية، وتقيّمه على طية واحدة، ثم تكرر ذلك k مرات. وهذا أكثر موثوقية من تقسيم واحد.
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
X, y = make_classification(random_state=0)
scores = cross_val_score(LogisticRegression(), X, y, cv=10, scoring="accuracy")
print(f"{scores.mean():.3f} ± {scores.std():.3f}")StratifiedKFold
استخدم StratifiedKFold لضمان احتواء كل طية على التوزيع نفسه للفئات، وهو أمر بالغ الأهمية مع مجموعات البيانات غير المتوازنة.
from sklearn.model_selection import StratifiedKFold, cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
X, y = make_classification(weights=[0.9,0.1], random_state=0)
cv = StratifiedKFold(n_splits=5)
scores = cross_val_score(LogisticRegression(), X, y, cv=cv, scoring="f1")
print("Stratified F1:", scores.mean())المفاضلة بين الانحياز والتباين
الانحياز المرتفع يعني نقص التخصيص (النموذج بسيط جدًا). والتباين المرتفع يعني فرط التخصيص (النموذج معقد جدًا). يكشف التحقق المتقاطع أيًّا من المشكلتين تواجهها.
# Underfitting: low train score AND low val score
# → increase model complexity, add features
# Overfitting: high train score, low val score
# → regularise, reduce complexity, get more data
from sklearn.model_selection import validation_curve
import numpy as np
train_sc, val_sc = validation_curve(DecisionTreeClassifier(), X, y, param_name="max_depth", param_range=range(1,10))التحقق المتقاطع المتداخل
لضبط المعلمات الفائقة وتقييم النموذج دون تحيز، استخدم التحقق المتقاطع المتداخل: تضبط الحلقة الداخلية المعلمات، بينما تقيّم الحلقة الخارجية النموذج.
from sklearn.model_selection import cross_val_score, GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import make_classification
X, y = make_classification(random_state=0)
gs = GridSearchCV(SVC(), {"C":[0.1,1,10]}, cv=5)
outer_scores = cross_val_score(gs, X, y, cv=5)
print("Nested CV accuracy:", outer_scores.mean())المعايرة
قد لا تكون تقديرات الاحتمالات لدى المصنّف معايرة جيدًا. استخدم CalibratedClassifierCV للحصول على تقديرات احتمالات أفضل.
from sklearn.calibration import CalibratedClassifierCV
from sklearn.svm import SVC
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y)
cal = CalibratedClassifierCV(SVC(), cv=5).fit(X_tr, y_tr)
print(cal.predict_proba(X_te[:3]))تحقق سريع
لماذا يُفضّل التحقق المتقاطع على تقسيم واحد للتدريب والاختبار عند تقييم النماذج؟
مراجعة
استخدم الدقة في المسائل المتوازنة، وF1/AUC في المسائل غير المتوازنة. قيّم النموذج باستخدام cross_val_score ذي الطيات k، واستخدم StratifiedKFold مع البيانات غير المتوازنة، واستخدم التحقق المتقاطع المتداخل عند ضبط المعلمات الفائقة للحصول على تقدير نهائي غير متحيز. لا تطّلع مطلقًا على مجموعة الاختبار أثناء التطوير.
الأسئلة الشائعة
هل درس «تقييم النماذج والتحقق المتقاطع» مجاني؟
نعم — نص درس «تقييم النماذج والتحقق المتقاطع» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.
ماذا ستتعلم في «تقييم النماذج والتحقق المتقاطع»؟
قيّم النماذج باستخدام الدقة وF1 وROC-AUC والتحقق المتقاطع k-fold تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟
لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «تقييم النماذج والتحقق المتقاطع»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟
نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- واجهة scikit-learn: fit وtransform وpredict
- النماذج الخطية: الانحدار والتصنيف
- النماذج القائمة على الأشجار: أشجار القرار والغابات العشوائية
- تقييم النماذج والتحقق المتقاطع