Cross-Validation
يدرّب التحقق المتقاطع نموذجًا ويقيّمه باستخدام تقسيمات متناوبة عددها k لمجموعة بيانات واحدة، لتقدير قدرته على التعميم. يتناول هذا الموضوع خطوات التحقق المتقاطع k-fold وأنواعه وتسرب البيانات والأمثلة البرمجية.
يقدّر التحقق المتقاطع أداء النموذج على بيانات غير مرئية من خلال تدريبه وتقييمه عدة مرات على تقسيمات مختلفة من مجموعة البيانات نفسها، ثم جمع الدرجات. في التحقق المتقاطع ذي k طيات، تُقسّم البيانات إلى k أجزاء متساوية تُسمى طيات، وتُستخدم كل طية مرة واحدة بوصفها بيانات تحقق، بينما يُدرّب النموذج على الطيات k − 1 الأخرى. يقدّر متوسط الدرجات k الأداء، ويبيّن تشتتها مدى اعتماد هذا التقدير على الأمثلة التي صادف وقوعها في مجموعة التحقق. ويُعد التحقق المتقاطع أسلوب التقييم القياسي عندما تكون البيانات شحيحة جدًا بحيث لا يوفر تقسيم واحد إلى بيانات محجوبة درجة موثوقة، ويُستخدم على نطاق واسع لمقارنة الخوارزميات وضبط المعلمات الفائقة دون المساس بـبيانات الاختبار.
آلية عمل التحقق المتقاطع بطريقة k طيات#
تُخلط مجموعة البيانات مرة واحدة وتُقسّم إلى k طيات، غالبًا 5 أو 10. وفي كل جولة من الجولات k، يُدرّب نموذج جديد على k − 1 طية، ويُقيّم على الطية المتبقية، بحيث تُستخدم كل عينة للتحقق مرة واحدة بالضبط وللتدريب k − 1 مرة. ويُحسب متوسط الدرجات k ويُبلّغ عنه مع الانحراف المعياري. بعد أن يختار التحقق المتقاطع نموذجًا أو مجموعة من المعلمات الفائقة، يُعاد عادةً تدريب النموذج النهائي على كامل بيانات التدريب باستخدام تلك الإعدادات. ويمثل التحقق المتقاطع بترك عينة واحدة الحالة القصوى التي يساوي فيها k عدد الأمثلة، ما يتيح استخدام أكبر قدر من البيانات للتدريب في كل جولة، مقابل تدريب عدد من النماذج يساوي عدد الأمثلة.
قراءة درجات التحقق المتقاطع#
يقدم التشتت بين الطيات معلومات لا تقل أهمية عن المتوسط. يشغّل البرنامج النصي أدناه scikit-learn التحقق المتقاطع بخمس طيات على مجموعة بيانات سرطان الثدي المرفقة:
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import StratifiedKFold, cross_val_score
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
# 569 labeled tumor samples with 30 features each
X, y = load_breast_cancer(return_X_y=True)
# The scaler sits inside the pipeline, so each round fits it on that round's training folds only
model = make_pipeline(StandardScaler(), LogisticRegression(max_iter=1000))
# 5 stratified folds: each sample is validated exactly once
folds = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)
scores = cross_val_score(model, X, y, cv=folds)
print("Fold accuracies:", scores.round(3))
print(f"Mean {scores.mean():.3f} +/- {scores.std():.3f}")يتراوح إحكام الطيات الخمس من 0.956 إلى 1.000، بمتوسط 0.979 وانحراف معياري 0.014. وكان تقسيم وحيد بنسبة 80/20 سيعطي إحدى هذه القيم الخمس، أي نطاقًا قدره 4.4 نقاط مئوية. ويضمن وضع أداة تحجيم البيانات داخل مسار العمل استبعاد طية التحقق من إحصاءات المعالجة المسبقة للبيانات؛ أما تحجيم مجموعة البيانات كاملةً أولًا فيؤدي إلى تسرّب البيانات من كل طية تحقق إلى التدريب.
اختيار نوع التحقق المتقاطع#
يفترض أسلوب k طيات العادي استقلال الأمثلة وإمكانية تبادلها. وإذا لم يتحقق ذلك، فإن التقسيم العشوائي يسرّب المعلومات أو ينتج طيات لا تمثل المهمة تمثيلًا صحيحًا:
- k طيات الطبقي: يحافظ على تساوي نسب الفئات في كل طية مع نسبها في مجموعة البيانات كاملة، وهو أمر مهم عندما تكون الفئة النادرة معرضة للغياب عن إحدى الطيات.
- التحقق المتقاطع k-fold حسب المجموعات: يُبقي جميع الأمثلة التابعة لمجموعة واحدة، مثل مريض أو فيديو أو موقع ميداني، في الطية نفسها، كيلا يجري التحقق على صور تدريب شبه مكررة. ويجمع التحقق المتقاطع الطبقي حسب المجموعات بين القيدين.
- تقسيم السلاسل الزمنية: يدرّب النموذج على الماضي فقط، ويُجري التحقق على الفترة التالية، مع توسيع نافذة التدريب في كل جولة، لأن خلط البيانات المرتبة زمنيًا يتيح للنموذج الاطلاع على المستقبل.
- التحقق المتقاطع المتداخل: يشغّل حلقة تحقق متقاطع داخلية لضبط المعلمات الفائقة ضمن كل طية خارجية، حتى لا تتضخم الدرجة الخارجية بسبب الضبط على الطيات نفسها التي يجري تقييم النموذج عليها.
التحقق المتقاطع للتعلّم العميق#
يضاعف تدريب شبكة عميقة k مرات تكلفة الحوسبة k أضعاف، لذا تستخدم مجموعات البيانات الكبيرة مثل ImageNet وCOCO تقسيمًا ثابتًا واحدًا للتحقق، إذ يكفي حجمه أصلًا للحصول على درجة مستقرة. ويُجدي التحقق المتقاطع نفعًا مع مجموعات بيانات الرؤية الصغيرة التي تضم بضع مئات إلى بضعة آلاف من الصور، حيث قد لا يحتوي تقسيم التحقق الواحد إلا على عدد قليل من الأمثلة لكل فئة. يقسم دليل التحقق المتقاطع بطريقة K طيات من Ultralytics مجموعة بيانات اكتشاف إلى خمس طيات باستخدام KFold من scikit-learn، وينشئ لكل طية قوائم صور التدريب والتحقق وملف YAML لمجموعة البيانات، ثم يدرّب نموذج YOLO26 واحدًا لكل طية. ولأن صور الاكتشاف تحتوي عادةً على عدة فئات، لا يمكن تقسيمها طبقيًا استنادًا إلى تصنيف واحد، لذا يسجل الدليل أيضًا نسبة تصنيفات التحقق إلى تصنيفات التدريب لكل فئة في كل طية.
التحقق المتقاطع والمصطلحات ذات الصلة#
- التحقق بالاستبعاد: تقسيم واحد، مثل 80/20، يُقيّم مرة واحدة. لا يتطلب سوى جولة تدريب واحدة، ويناسب مجموعات البيانات الكبيرة، وتعتمد درجته على الأمثلة التي تقع في مجموعة التحقق.
- أخذ العينات التمهيدية: ينشئ مجموعات التدريب بأخذ عينات مع الإرجاع، ويقيّم كل نموذج على الأمثلة التي لم تدخل في عينته. أما أسلوب k طيات فيقسم البيانات دون إرجاع، لذا تقع كل عينة في طية واحدة بالضبط.
- تقييم مجموعة الاختبار: يختار التحقق المتقاطع بين النماذج والإعدادات. وتوفر مجموعة اختبار منفصلة، تُستبعد من جميع الطيات، التقدير النهائي للنموذج المختار.










