تعلم الآلةعلم البياناتمترجم

5 أسباب لاستخدام التحقق المتقاطع (Cross-Validation) في مشاريعك في علوم البيانات

كتابة: Dima Shulga   ترجمة: فارس القنيعير   مراجعة: أسيل الداود

[تم ترجمة هذا الدرس من موقع kdnuggets]

يعتبر التحقق المتقاطع (Cross-Validation) أداة أساسية في صندوق أدوات عالم البيانات، حيث يساعدنا لاستخدام البيانات التي لدينا بطريقة أفضل. قبل استعراض الخمسة أسباب لاستخدام التحقق المتقاطع، سأستعرض بشكل سريع ما هو التحقق المتقاطع وأعرض بعض الاستراتيجيات الدارجة.

إذا أردنا بناء نموذج لتعلم الآلة باستخدام البيانات فإننا غالباً ما نقسم البيانات إلى مجموعات تدريب، وتحقق، واختبار. تستخدم مجموعة التدريب لتدريب النموذج، ومجموعتي التحقق والاختبار للتحقق من النتائج على بيانات لم يسبق رؤيتها من قبل. الطريقة التقليدية هي تقسيم البيانات إلى قسمين، تدريب واختبار 80%-20%، وأحياناً تختلف هذه النسب، فيمكن أن تكون 70%-30% أو 90%-10%.

في التحقق المتقاطع، نقوم بعمل أكثر من تقسيم. يمكننا أن نعمل 3 ،5، 10 أو أي عدد س من التقسيمات. هذه الأقسام يطلق عليها أجزاء (Folds) وهناك العديد من الاستراتيجيات لعملها.

توضيح للتحقق المتقاطع باستخدام 4 أجزاء (س=4)

التحقق المتقاطع البسيط (Simple K-Folds): نقسم البيانات لدينا إلى س جزء، لنستخدم س=3 في مثالنا هنا. إذا كان لدينا 3000 نقطة من البيانات، نقسمها إلى ثلاثة أجزاء، جزء 1، جزء 2، وجزء 3. بعدها نبني ثلاثة نماذج، كل نموذج يتم تدريبه على جزئين واختباره على الثالث. النموذج الأول يتم تدريبه على الجزء 1 والجزء 2، واختباره على الجزء 3. النموذج الثاني يتم تدريبه على الجزء 1 والجزء 3، واختباره على الجزء 2، وهكذا.

الإبقاء على واحد (Leave One Out): هذه الحالة الأكثر تطرفاً لعمل التحقق المتقاطع. لكل نقطة في البيانات التي لدينا، نقوم ببناء نموذج باستخدام كل النقاط الأخرى ثم اختباره على هذه النقطة.

التحقق المتقاطع الطبقي (Stratified Cross Validation): عندما نقوم بتقسيم البيانات التي لدينا إلى أجزاء، فإننا نود أن نجعل كل جزء لديه تمثيل جيد للبيانات ككل. كمثال، نحتاج أن يكون هناك تناسب في عدد العيّنات لكل صنف (class) في كل جزء. في كثير من الأحيان قد يمكن عمل ذلك عشوائياً، ولكن في بعض الأحيان في مجموعات البيانات المعقدة نحتاج أن نفرض التناسب الصحيح لكل جزء.

هذه خمس نقاط أعتقد أنه يجب أن نستخدم التحقق المتقاطع بسببها:

1- استخدم كل بياناتك

إذا كان لدينا بيانات قليلة، فإن تقسيمها إلى مجموعات تدريب واختبار قد ينتج لنا مجموعة اختبار صغيرة. لنقل أن لدينا 100 عينة، إذا قسمناها بنسبة 80%-20% سنحصل على 20 عينة في مجموعة الاختبار، وهي غير كافية غالباً. قد نحصل على أي نتيجة بناء على هذه المجموعة من قبيل الصدفة فقط. ويزداد حجم المشكلة إذا كان لدينا عدة أصناف (classes). إذا كان لدينا 10 أصناف وفقط 20 عينة اختبار، سيكون تقريباً لدينا عينتين لكل صنف في المتوسط. اختبار أي شيء على عينتين فقط لن يعطينا نتيجة مؤكدة.

إذا استخدمنا التحقق المتقاطع في هذه الحالة، سنبني س نموذج مختلف، بحيث نستطيع الاختبار على كل البيانات. لكل عينة نقوم بعمل التوقع عن طريق نموذج لم يتم تدريبه عليها (أي العينة)، وهكذا سيكون لدينا 100 عينة في مجموعة الاختبار. وبالنسبة إذا كان لدينا أصناف متعددة، فسيكون لدينا في المتوسط 10 عينات لكل صنف، وهو أفضل بكثير من 2 فقط. بعد أن نتحقق من خوارزمية التعلم (أنظر النقطة 2 في الأسفل) يمكننا تدريب النموذج على كل البيانات لدينا، لأنه إذا أعطتنا 5 نماذج نتائج متقاربة باستخدام مجموعات تدريب مختلفة فإننا نستطيع الافتراض أنه إذا دربناه على البيانات كلها سيعطينا نتيجة مقاربة.

باستخدام التحقق المتقاطع نستطيع استخدام كل الـ 100 عينة لكل من التدريب والاختبار، مع المحافظة على شرط التحقق من النماذج باستخدام عينات لم يسبق رؤيتها من قبل.

2- المزيد من المقاييس (Metrics)

كما ذُكر في النقطة الأولى، إذا أنشأنا خمس نماذج مختلفة باستخدام خوارزمية تعلم الآلة ثم اختبرناها على خمس مجموعات اختبارات مختلفة فإننا سنكون واثقين أكثر بأداء الخوارزمية. إذا قمنا بالتحقق مرة واحدة على مجموعة الاختبار سنحصل على نتيجة واحدة فقط. بينما لو قمنا بالتحقق خمس أو عشر مرات سيكون لدينا إمكانية أفضل لفهم ماذا يحدث. لنفترض أننا دربنا خمسة نماذج واستخدامنا الدقّة (Accuracy) لقياس النتائج، قد ننتهي إلى عدة أحوال نتائج. أفضل الأحوال أن تكون النتائج متقاربة في كل الأجزاء، مثلاً: 92.0، 91.5، 92.0، 92.5، و91.8. هذا يعني أن خوارزمية التعلم (والبيانات لدينا) متسقة وثابتة، مما يعطينا ثقة أكبر بأنه إذا دربنا النموذج على البيانات الكاملة فسيعطينا نتيجة مقاربة.

لكن قد ننتهي إلى نتيجة مختلفة، لنقل: 92.0، 44.0، 91.5، 92.5، و91.8. هذه النتائج تبدو غريبة، فأحد الأجزاء يبدو كأنه آتٍ من توزيعة بيانات (distribution) مختلفة. نحتاج أن نرجع إلى البيانات التي لدينا ونتأكد أنها هي ما نعتقد فعلاً.

أسوأ حالة قد نصل إليها هي إذا كان هناك تباين كبير في النتائج، مثلاً: 80، 44، 99، 60، و87. هنا يبدو أن الخوارزمية، أو البيانات، أو كلاهما، غير متسقين. قد تكون الخوارزمية غير قادرة على التعلم بطريقة صحيحة، أو أن البيانات معقدة بشكل كبير.

باستخدام التحقق المتقاطع نستطيع الحصول على قياسات أكثر لنصل إلى فهم أفضل وقرارات أوضح، سواء على مستوى الخوارزميات أو البيانات التي لدينا.

3- استخدام النماذج المتراصة (Models Stacking)

أحياناً نحتاج أن نبني خط عمل (pipeline) من النماذج لحل مشكلة ما. لنأخذ الشبكات العصبية (Neural Networks) كمثال، نستطيع إنشاء العديد من الطبقات (layers). كل طبقة يمكن أن تستخدم مخرجات الطبقة التي تسبقها لتتعلم تمثيل جديد للبيانات الموجودة لدينا، لتصل في النهاية إلى توقعات جيدة. نستطيع تدريب هذه الطبقات المختلفة باستخدام خوارزمية الانتشار العكسي (back-propagation). كل طبقة تحسب الخطأ لديها وتمرره إلى الخلف للطبقة التي تسبقها.

لنقوم بشيء مشابه ولكن بدون استخدام الشبكات العصبية لا نستطيع أن ندرب النموذج بنفس الطريقة، لأنه ليس لدينا دائماً طريقة سهلة لحساب الخطأ أو مشتقة الخطأ لتمريرها إلى الخلف مثل ما شرحنا قبل قليل. فمثلاً، قد نقوم بإنشاء نموذج لخوارزمية الغابة العشوائية (Random Forest) للتنبؤ بشيء معين، وبعدها نستخدم انحدار خطي (Linear Regression) يعتمد على قيم هذه التنبؤات لإخراج قيمة حقيقية (real number).

النقطة المهمة هي أن النموذج الثاني يجب أن يتعلم من تنبؤات (أو مخرجات) النموذج الأول. الأفضل هنا هو استخدام مجموعتي بيانات مختلفتين، واحدة لكل نموذج. بحيث ندرب خوارزمية الغابة العشوائية على المجموعة الأولى أ، ثم نستخدم المجموعة الثانية ب لاختبارها وإخراج النتائج (التنبؤات). بعد ذلك نستخدم هذه التنبؤات لتدريب النموذج الثاني (الانحدار الخطي)، ثم استخدام مجموعة بيانات اختبار جديدة ج لم يسبق رؤيتها لاختبار النموذج النهائي. في البداية نقوم بحساب التنبؤات باستخدام النموذج الأول، ثم استخدامها مدخلات للنموذج الثاني، ثم مقارنة النتيجة النهائية بالعلامة المرجعية (ground truth).

إذا كان لدينا بيانات محدودة (كمعظم الحالات)، فلا يمكننا فعل ما شرحناه سابقاً. وكذلك لا يمكننا تدريب واختبار النموذجين باستخدام نفس مجموعة البيانات، لأنه حينئذ سندرب النموذج الثاني على تنبؤات النموذج الأول باستخدام بيانات سبق رؤيتها. هذا قد يؤدي إلى فرط التخصيص (over-fitting)، أو على الأقل الحصول على نتائج أفضل مما لو استخدمنا مجموعة أخرى. هذا قد يقود إلى التأثير على التقويم النهائي للنتائج بشكل يصعب فهمه.

عن طريق استخدام التحقق المتقاطع نستطيع عمل تنبؤات باستخدام البيانات التي لدينا بنفس الطريقة التي تم شرحها سابقاً، بحيث تكون مدخلات النموذج الثاني تنبؤات حقيقية باستخدام بيانات لم يسبق للنموذج الأول رؤيتها.

4- العمل مع بيانات غير مستقلة (Dependent)/مجمعة (Grouped)

إذا قمنا بعمل تقسيم عشوائي لمجموعتي التدريب-الاختبار للبيانات التي لدينا، نفترض أن الأمثلة لدينا مستقلة (independent). هذا يعني أنه إذا عرفنا/رأينا بعض الأمثلة، فإن ذلك لا يساعدنا على فهم الأمثلة الأخرى. ولكن ليست الحالة دائماً هكذا.

لننظر في نظام للتعرف الآلي على الكلام. البيانات التي لدينا قد تحتوي على متحدثين مختلفين يقولون كلمات مختلفة. لننظر بشكل أخص في التعرف على الأرقام المنطوقة. في هذه البيانات على سبيل المثال، هناك ثلاث متحدثين و1500 تسجيل (500 لكل متحدث). إذا قسمناها بشكل عشوائي، قد تحتوي مجموعتي التدريب والاختبار على نفس المتحدث يقول نفس الكلمات! طبعاً سيزيد هذا من دقّة النتائج، ولكن إذا تم اختبار النموذج على متحدث جديد ستكون النتائج أسوأ بكثير.

الطريقة الأفضل لعمل التقسيم بجعل متحدثَين في مجموعة التدريب، والثالث في مجموعة الاختبار. ولكن سيكون اختبار الخوارزمية على متحدث واحد فقط، وهذا ليس كافياً. نريد أن نعرف أداء الخوارزمية على أكثر من متحدث.

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

5- ضبط المُدخلات (Parameters)

هذا أحد أكثر الأسباب شيوعاً ووضوحاً لاستخدام التحقق المتقاطع. أغلب خوارزميات التعلم تحتاج بعض الضبط للمُدخلات. قد تكون عدد الأشجار في خوارزمية التعزيز الاشتقاقي (gradient boosting) للتصنيف، عدد الطبقات المخفية أو دالة التنشيط (activation function) في الشبكات العصبية، نوع النواة (kernel) في خوارزمية SVM، وغيرها الكثير. نحتاج أن نجد أفضل المُدخلات المناسبة للمشكلة التي نريد حلّها. نفعل ذلك بتجربة قِيَم مختلفة ثم اختيار الأفضل منها. هناك العديد من الطرق لعمل ذلك، فقد تكون عن طريق البحث اليدوي، أو البحث الشبكي (grid search)، أو أحد عمليّات التحسين (optimization) المعقدة. ولكن في جميع هذه الأحوال لا يمكننا عمل ذلك باستخدام مجموعة البيانات ولا مجموعة الاختبار. نحتاج لمجموعة ثالثة يطلق عليها مجموعة التحقق (validation).

عن طريق تقسيم البيانات لدينا إلى ثلاثة مجموعات بدلاً من اثنتين، نستطيع أن نحل جميع المشاكل التي تكلمنا عنها سابقاً، خصوصاً إذا لم تكن لدينا بيانات كثيرة. باستخدام التحقق المتقاطع نستطيع أن نعمل كل هذه الخطوات باستخدام البيانات كاملة.

خاتمة

التحقق المتقاطع أداة قوية جداً. تساعدنا لاستخدام البيانات لدينا بشكل أفضل، وتعطينا المزيد من المعلومات عن أداة الخوارزميات التي نستخدمها. في نماذج تعلّم الآلة المعقدة قد نغفل أحياناً ونستخدم نفس البيانات في مراحل مختلفة من سير العمل (مثل التدريب والاختبار). قد يقود هذا إلى نتائج جيدة، ولكنها ليست حقيقية في غالب الحالات، أو تؤدي إلى نتائج جانبية غريبة. يجب أن ننتبه لمثل هذه الحالات حتى نكون واثقين من النموذج الناتج. التحقق المتقاطع يساعدنا عند التعامل مع التحديات غير السهلة في مشاريعنا الخاصة بعلم البيانات.

اظهر المزيد

فارس القنيعير

‏‏‏‏‏‏‏‏‏‏‏‏‏مختص بالذكاء الاصطناعي، تعلم الآلة ورؤية الحاسب. مهتم بتحليل ومعالجة البيانات بشكل عام. ضمن خبراء جووجل في تعلم الآلة (ML GDE).

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى