تعلم الآلة متقدم · Advanced 12 دقيقة

التحقق المتقاطع

Cross Validation

تقدير أداء النموذج بموثوقية أكبر بتدويره على عدة تقسيمات للبيانات.

تقدّمك في المسار0%

الفكرة

تقسيم واحد إلى تدريب واختبار يعطي تقديراً متأثراً بالحظ في اختيار العينة. التحقق المتقاطع يكرر التقييم على عدة تقسيمات ويعطي متوسطاً وتشتتاً.

K-Fold

from sklearn.model_selection import cross_validate, StratifiedKFold
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)
res = cross_validate(model, X, y, cv=cv, scoring=["accuracy", "f1_macro"])
print(res["test_f1_macro"].mean(), res["test_f1_macro"].std())

اختيار نوع التقسيم

طبيعة البياناتالأداة
تصنيف بفئات غير متوازنةStratifiedKFold
عدة عينات لكل مريض أو مستخدمGroupKFold أو StratifiedGroupKFold
سلاسل زمنيةTimeSeriesSplit
بيانات صغيرة جداًRepeatedStratifiedKFold

التحقق المتداخل

عند ضبط المعاملات الفائقة واختيار النموذج على البيانات نفسها، تكون أفضل نتيجة متفائلة. الحل:

from sklearn.model_selection import GridSearchCV, cross_val_score
inner = StratifiedKFold(5, shuffle=True, random_state=1)
outer = StratifiedKFold(5, shuffle=True, random_state=2)
search = GridSearchCV(model, param_grid, cv=inner)
scores = cross_val_score(search, X, y, cv=outer)
print(scores.mean(), scores.std())

الحلقة الداخلية تختار المعاملات، والخارجية تقدّر أداء الإجراء كاملاً.

أخطاء شائعة

  • المعالجة المسبقة خارج الطيات (تسرب). ضع كل شيء في Pipeline.
  • اختيار السمات على كامل البيانات قبل التحقق المتقاطع.
  • الإبلاغ عن أفضل طية بدلاً من المتوسط.

مصطلحات الدرس

التحقق المتقاطع الطبقي Stratified K-Fold
تقسيم يحافظ على نسب الفئات في كل طية.
التحقق المتقاطع المتداخل Nested Cross-Validation
حلقة خارجية لتقدير الأداء وحلقة داخلية لضبط المعاملات الفائقة، لتجنب التقدير المتفائل.
التحقق المتقاطع بـ K طيات K-Fold Cross-Validation
تقسيم البيانات إلى K أجزاء وتدريب النموذج K مرات بحيث يُستخدم كل جزء للتقييم مرة واحدة.

الملخص

التحقق المتقاطع بـ K طيات (K-Fold) يقسم البيانات إلى K أجزاء، ويدرب النموذج K مرات في كل مرة على K-1 جزءاً ويقيّمه على الجزء المتبقي، ثم يحسب متوسط الأداء وتشتته. يحتاج إلى أنواع خاصة حسب البيانات: Stratified للفئات غير المتوازنة، وGroup عند وجود مجموعات مترابطة مثل المرضى، وTimeSeriesSplit للبيانات الزمنية. التحقق المتقاطع المتداخل (Nested CV) يفصل ضبط المعاملات عن تقدير الأداء.

أسئلة مراجعة

  1. متى تستخدم GroupKFold؟

    عندما تحتوي البيانات على مجموعات مترابطة، مثل عدة صور للمريض نفسه، لضمان ألا يظهر أفراد المجموعة الواحدة في التدريب والتقييم معاً.

  2. لماذا يكون best_score_ في GridSearchCV متفائلاً؟

    لأنه أفضل نتيجة من بين مرشحين كثيرين على البيانات نفسها التي اختيرت بها المعاملات.

المصادر والمراجع

  1. scikit-learn — Cross-validation: evaluating estimator performance
  2. scikit-learn — Nested versus non-nested cross-validation
  3. Varma & Simon (2006) Bias in error estimation when using cross-validation for model selection — BMC Bioinformatics

إكمال الدرس