استراتيجيات التحقق المتقاطع
k-fold وstratified k-fold وleave-one-out وتقسيم السلاسل الزمنية — متى تستخدم كلًّا منها.
استراتيجيات التحقق المتقاطع درس مجاني في Learn AI with Python على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn AI with Python، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn AI with Python 4 دروس في المجموع.
لماذا نستخدم التحقق المتقاطع
قد يكون تقسيم واحد إلى تدريب واختبار موفقًا أو غير موفق. يكرر التحقق المتقاطع التقييم على تقسيمات مختلفة ويحسب متوسط الدرجات، مما يعطي تقديرًا أكثر موثوقية للأداء.
التحقق المتقاطع K-Fold
تقسم KFold البيانات إلى K أجزاء متساوية. ويُستخدم كل طي مرة واحدة كمجموعة اختبار، بينما تُستخدم الأجزاء الأخرى لتدريب النموذج. وبذلك تحصلون على K درجات لحساب متوسطها.
from sklearn.model_selection import KFold
kf = KFold(n_splits=5, shuffle=True, random_state=0)
for train_idx, test_idx in kf.split(X):
Xtr, Xte = X[train_idx], X[test_idx]
ytr, yte = y[train_idx], y[test_idx]
# train and evaluate hereالتحقق المتقاطع الطبقي K-Fold للتصنيف
في مسائل التصنيف، قد ينتج عن K-Fold العادي طيات ذات نسب فئوية غير متوازنة. ويحافظ StratifiedKFold على نسب الفئات في كل طي.
from sklearn.model_selection import StratifiedKFold
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)
for train_idx, test_idx in skf.split(X, y):
# each fold keeps the same class balance as the full set
passاختصار cross_val_score
تنفذ cross_val_score الحلقة كاملة نيابةً عنكم، وتعيد مصفوفة بدرجات الطيات. وتستخدم تلقائيًا StratifiedKFold مع نماذج التصنيف.
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(random_state=0)
scores = cross_val_score(clf, X, y, cv=5, scoring="accuracy")
print(scores)
print("Mean:", scores.mean(), "Std:", scores.std())اختيار عدد الطيات
توفر الطيات الأكثر عددًا (مثل 10) تقديرًا أقل انحيازًا، لكنها تتطلب قدرة حسابية أكبر. ويُعد استخدام 5 طيات حلًا شائعًا ومتوازنًا. أما مجموعات البيانات الصغيرة جدًا، فيستخدم معها leave-one-out عدد N من الطيات، بحيث تحتوي كل مجموعة اختبار على عينة واحدة.
from sklearn.model_selection import LeaveOneOut, cross_val_score
loo = LeaveOneOut()
scores = cross_val_score(clf, X, y, cv=loo)
print("Mean:", scores.mean())TimeSeriesSplit للبيانات الزمنية
في السلاسل الزمنية، يجب عدم التدريب على المستقبل مطلقًا. إذ تستخدم TimeSeriesSplit دائمًا البيانات السابقة للتدريب والكتلة التالية للاختبار، مع توسيع نافذة التدريب عبر الطيات.
from sklearn.model_selection import TimeSeriesSplit
tscv = TimeSeriesSplit(n_splits=5)
for train_idx, test_idx in tscv.split(X):
# train_idx always precedes test_idx in time
print(len(train_idx), len(test_idx))لماذا يهم الترتيب في السلاسل الزمنية
يؤدي خلط البيانات المرتبة زمنيًا إلى تسرّب معلومات المستقبل إلى التدريب وتضخيم الدرجات. وتحترم TimeSeriesSplit الترتيب الزمني، لذلك يعكس تقييمكم ظروف التنبؤ الحقيقية.
cross_validate لعدة مقاييس
تشبه cross_validate الدالة cross_val_score، لكنها تعيد عدة مقاييس دفعةً واحدة، ويمكنها أيضًا تضمين درجات التدريب وأزمنة الملاءمة.
from sklearn.model_selection import cross_validate
results = cross_validate(
clf, X, y, cv=5,
scoring=["accuracy", "f1_macro", "roc_auc_ovr"],
return_train_score=True,
)
print(results["test_accuracy"])
print(results["test_f1_macro"])قراءة مخرجات cross_validate
تكون النتيجة قاموسًا يحتوي على مفاتيح مثل test_<metric> وtrain_<metric> وfit_time وscore_time. وتساعد مقارنة درجات التدريب بدرجات الاختبار في تشخيص فرط الملاءمة.
import numpy as np
gap = results["train_accuracy"].mean() - results["test_accuracy"].mean()
print("Overfit gap:", gap)
print("Avg fit time:", np.mean(results["fit_time"]))التحقق المتقاطع وتسرّب البيانات
احرصوا دائمًا على ملاءمة المعالجة المسبقة (التحجيم والترميز) داخل حلقة التحقق المتقاطع، وليس قبلها. استخدموا Pipeline حتى يجري تحجيم كل طي باستخدام بيانات التدريب الخاصة به فقط، مما يمنع تسرّب البيانات.
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score
pipe = make_pipeline(StandardScaler(), SVC())
scores = cross_val_score(pipe, X, y, cv=5)اختيار الاستراتيجية المناسبة
استخدموا StratifiedKFold للتصنيف، وKFold العادي للانحدار، وTimeSeriesSplit للبيانات الزمنية. ضعوا المعالجة المسبقة داخل مسار، وأبلغوا عن المتوسط والانحراف المعياري عبر الطيات.
تحقق سريع
اختبروا معرفتكم بالتحقق المتقاطع.
خلاصة
الخلاصة: يحسب التحقق المتقاطع متوسط الأداء عبر تقسيمات متعددة. استخدموا KFold للانحدار، وStratifiedKFold للتصنيف المتوازن، وTimeSeriesSplit للبيانات الزمنية. تعيد cross_val_score مقياسًا واحدًا، بينما تعيد cross_validate عدة مقاييس بالإضافة إلى أزمنة التنفيذ. أجروا المعالجة المسبقة دائمًا داخل Pipeline لمنع تسرّب البيانات.
الأسئلة الشائعة
هل درس «استراتيجيات التحقق المتقاطع» مجاني؟
نعم — نص درس «استراتيجيات التحقق المتقاطع» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn AI with Python، انتقل إلى CoddyKit PRO. تتضمن دورة Learn AI with Python 4 دروس في المجموع.
ماذا ستتعلم في «استراتيجيات التحقق المتقاطع»؟
k-fold وstratified k-fold وleave-one-out وتقسيم السلاسل الزمنية — متى تستخدم كلًّا منها. تتمرن على Learn AI with Python مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn AI with Python؟
لا تُشترط خبرة سابقة. Learn AI with Python على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «استراتيجيات التحقق المتقاطع»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn AI with Python هذا؟
نعم. كل درس في Learn AI with Python يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- استراتيجيات التحقق المتقاطع
- تعمّق في مقاييس التصنيف
- البحث الشبكي والبحث العشوائي
- التحسين البايزي باستخدام Optuna