تحسين أداء خوارزميات تعلم الألة

تحسين أداء خوارزميات تعلم الألة.
Testing and Validation 

أثناء تدريب نمودج (model) لخوازمية من خوارزميات تعلم الألة قد نجد نسبة الخطأ مرتفعة جدا فنحاول البحث عن أحسن القيم للمعاملات الداخلية للخوارزمية (Hyper-parameters ) من أجل تحسين الأداء و تقليل نسبة الخطأ. أبسط طريقة هي تدريب عدة نماذج و لتكن 100 نموذج  مثلا من هذه الخوارزمية و بمعاملا داخلية مختلفة و بعدها نختار أحسن نموذج لهذه الخوارزمية و نعتمده هو في عملنا، هناك طرق أخرى للقيام بذلك مثل (Gradient descent) بمكن القول أنه إستعمال لطرق (Optimization ) من أجل إيجاد أحسن القيم ل (Hyper-parameters ). لكن لسوء الحظ قد تجد أن نسبة الأداء مرتفعة و نسبة الخطأ صغيرة أثناء عملية التدريب أما في مرحلة الإختبار تجد أن نسبة الخطأ مرتفعة جدا! و هذا يعني أننا وقعنا في مشكل (Overfitting) و لتجنب ذلك سنشرح في هذه المقالة إحدى الطرق للقيام بذلك و هي ال (Validation ).

في عملية تدريب نمودج لخوازمية في الطريقة العادية فإننا نقسم (dataset) إلى قسمين، قسم للتدريب و قسم للإختبار بنسبتي 80٪ و 20٪ على الترتيب في الحالة العامة. و من أجل اكثر توضيح لما سنشرحه في هذه المقالة، قمت ببرمجة خوارزمية (svm) مع قاعدة بيانات لمريضات مصابات بسرطان الثدي و أخريات بصحة جيدة. الهدف هو جعل خوارزمية (svm) قادرة على معرفة ما إذا كانت إمرأة مصابة بهذا المرض أم لا، و هذا بناء على عدة خصائص يتم إستخراجها من المرأة. قاعدة البيانات إسمها (breast_cancer) و هي موجودة على مكتبة (Scikit-Learn ) لمن يريد تفاصل أكثر عنها. 

في الصورة 1 قمنا بتحميل قاعدة البيانات هاته مباشرة من مكتبة (Scikit-Learn ) في السطر 11 من الكود. و بعدها قمنا بإستعراض البيانات و (labels) و في الصورة 3 على اليسار إظهار لعملية التنفيذ لهذا الجزء من الكود حيث الداتا تتكون من 569 مثال (Example ) و كل مثال يحتوي على العديد من (features) عددها 30 خاصية لكل مثال. أما (labels) فهي عبارة عن رقمي 0 و 1 (مصابة، سليمة). في السطر 19 قمنا بتقسم الداتا و (labels ) إلى مجموعتين بنسبة 80٪ للتدريب و 20٪ للإختبار و بشكل عشوائي. 

الصورة 1

بإستعمال الطريقة العادية (without validation ) و بعد عملية التدريب في السطر 32 تأتي بعدها عملية الإختبار حيث حصلنا على (accuracy 1 : 0.9473)  في الصورة 3 على اليمين. 

الصورة 2

الصورة 3

من أجل تحسين أداء الخوارزمية سنستعمل (validation )  و هي طريقة تعتمد على تقسيم الداتا الخاصة بعملية التدريب إلى عدة مجموعات أصغر عددها (K) و نقوم بعملية تدريب النموذج على (K-1) من هذه الأقسام و القسم  المتبقي نستعمله في عملبة الإختبار ، و هناك عدة طرق:

الطريقة 1 : (K-fold Cross-Validation ) و هي تقسيم الداتا إلى (K) قسم عادة 5 أو 10. عملية التدريب تتم على (K-1) من هذه الأقسام و الإختبار على القسم المتبقي. الكود من السطر 37 إلى 42 في الصورة 2 و قد إستعملنا (K = 10) و قد حصلنا على (accuracy 2 : 0.9525) في الصورة 3 على اليمين و نلاحظ أن الأداء قد تحسن قليلا. 

الطريقة 2 : (Strafified) و هي تشبه الطريقة 1 فقط الأقسام التي نحصل عليها من داتا التدريب تحتوي على (labels )  بشكل متوازن يعني كل قسم يحتوي بالتقريب على أمثلة لهم (labels ) متنوعة بالتقريب قدر تنوع كل (labels )  الموجودة. الكود يبدأ من السطر 45 حتى 50 في الصورة 2، و قد حصلنا على (accuracy 3 : 0.9543)  في الصورة 3 على اليمين، أيضا تحسن الأداء قليلا.

الطريقة 3 : (Leave One Out) في هذا الطريقة و بعد تقسيم الداتا إلى (K) قسم فإن كل قسم يحتوي على عنصر واحد فقط و بالتالي (K) يكون بعدد الأمثلة الموجودة في الداتا. كل مرة تتغير مجموعة الإختبار حتى تشارك جميع أمثلة الداتا في الإختبار و هي مكلفة للغاية و تستغرق وقتا طويلا أثناء التنفيذ و لكنها فعالة لما تكون الداتا صغيرة. الكود موجود في الصورة 4 من السطر 52 إلى 58 و قد حصلنا على (accuracy 4 : 0.954305) في الصورة 5 بإستعمال (google colab ) و النتيجة تحسنت بشكل طفيف. 

الصورة 4


الطريقة 4 : (Repeated Random Test-Train Splits ) و هي مزيج بين الطريقة العادية و الطريقة 1 (K-fold ) و تعتمد على تقسيم الداتا إلى قسم للتدريب و قسم للإختبار و تستمر في تقسيم الداتا بشكل عشوائي و إجراء التدريب و الإختبار في كل مرة بعدد محدد. الكود في الصورة 4 من السطر 60 إلى 67 و قد حصلنا على (accuracy 5 : 0.9578) في الصورة 5 و كانت أفضل نتيجة حصلنا عليها. 

الصورة 5


هذا المثال كان من أجل عملية الشرح فقط و لهذا لم نلاحظ التحسن في أداء الخوارزمية بشكل كبير لأنها في الأصل لم تكن تعاني من مشكل (Overfitting ). 

رابط الكود كاملا على حسابي في (github) هنا


#artificial_intelligence #machine_learning #deep_learning
#الذكاء_الإصطناعي #تعلم_الألة #التعلم_العميق
الكاتب : هشام فلواط - hichem felouat
تابعوا مقالاتي على الهاشتاج : #هشام_فلواط


Comments

Post a Comment

Popular posts from this blog

مقدمة

أنواع الطرق المستخدمة في مجال تعلم الألة The type of machine learning