التحقق المتقاطع
Cross Validation
تقدير أداء النموذج بموثوقية أكبر بتدويره على عدة تقسيمات للبيانات.
الفكرة
تقسيم واحد إلى تدريب واختبار يعطي تقديراً متأثراً بالحظ في اختيار العينة. التحقق المتقاطع يكرر التقييم على عدة تقسيمات ويعطي متوسطاً وتشتتاً.
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) يفصل ضبط المعاملات عن تقدير الأداء.
أسئلة مراجعة
-
متى تستخدم GroupKFold؟
عندما تحتوي البيانات على مجموعات مترابطة، مثل عدة صور للمريض نفسه، لضمان ألا يظهر أفراد المجموعة الواحدة في التدريب والتقييم معاً.
-
لماذا يكون best_score_ في GridSearchCV متفائلاً؟
لأنه أفضل نتيجة من بين مرشحين كثيرين على البيانات نفسها التي اختيرت بها المعاملات.
المصادر والمراجع
إكمال الدرس
أكملت كل دروس المسار! يمكنك الآن طلب شهادة إكمال المسار.
اطلب الشهادة