Posts

Showing posts from September, 2019

خوارزميات التصنيف التي تعتمد على الإنتخاب

Image
Voting Classifiers فرضا أنه لدينا مشكلة صعبة و أردنا إستشارة الأخرين فأكيد كلما إستشرنا أكثر كلما حصلنا على قرار أفضل لأننا ببساطة نعلم أن رأي الجماعة أكثر حكمة من رأي الفرد و هذا ما يسمى ب "The wisdom of the crowd".  في مجال تعلم الألة نطبق هذا المبدأ بجعل مجموعة من الخوارزميات تشارك في عملية إتخاد القرار و الرأي الذي يحظى بالأغلبية يختار و يطلق على هذه العملية (Hard voting classifier). الصورة 1 مكتبة (Scikit-Learn ) توفر لنا إطار عمل يسهل علينا برمجة طريقة الإنتخاب بين مجموعة من المصنفات و هو (VotingClassifier). كمثال تطبيقي نستعمل قاعدة البيانات الجاهزة (breast_cancer) و التي تحتوي علي (Examples = 569, Features = 30)، في هذا المثال إستعملنا ثلاث خوارزميات و هم LogisticRegression RandomForestClassifier و SVM. بعد ذلك نعرف المصنف الذي يعتمد مبدأ الإنتخاب في السطر 22 - الصورة 1، و نقدم له هذه الخوارزميات كمدخلات ليعمل عليها مع المدخل (voting = hard)  لأنه توجد أنواع أخرى من طرق الإنتخاب. هو سيقوم بتدريب هذه الخوارزميات الثلاث و بعدها يعيد تطبيقها على الداتا

التعاون بين الخوارزميات من أجل إتخاد قرار

Image
AdaBoost: AdaBoostClassifier, GradientBoostingClassifier عندما نصادف مشكلا معقدا في مجال تعلم الألة و نجرب عدة خوارزميات و لا نجد واحدة تقدم لنا نتائجا مقبولة لهذا المشكل فإنه من بين الحلول الممكنة هو أن تتعاون هذه الخوارزميات بمختلف طرق عملها من أجل إيجاد حل مناسب لهذا المشكل. من بين خوارزميات التعاون التي إقترحت هي خوارزمية ( AdaBoost ) في سنة 1996 و هدفها تحويل مجموعة من المصنفات الضعيفة (يعني التي لا تقدم نتائجا جيدة في عملية التصنيف) إلى مصنف قوي. مبدأ عملها هو الإنتخاب، في البداية تكون جميع المصنفات بنفس الوزن و خلال عملية التدريب تتفاضل هذه المصنفات أو الخوارزميات بحسب أداءها و بعدها  أثناء عملية التصنيف فإن القرار النهائي يتخد بتصويت كل الخوارزميات المشاركة في العملية مع أخد بعين الإعتبار وزن كل خوارزمية و قيمتها بعد عملية التدريب و نحسب لصالح أي فئة يتم تصنيف العنصر الجديد بالأغلبية. خوارزمية (AdaBoost)  موجودة في الصورة 1. الصورة 1 في مكتبة (Scikit-Learn ) وفرت لنا (AdaBoostClassifier) و هو مصنف يطبق مبادئ (AdaBoost) في التعاون بين الخوارزميات. من أجل مثال ت

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

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

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

Image
Common Classification / Regression Model Evaluation Metrics في مجال تعلم الألة و بعد الإنتهاء من عملية تدريب النموذج الخاص بنا فإنه يتوجب علينا حينها الإنتقال إلى الخطوة التالية و هي تقيم أداءه من أجل معرفة مقدار دقته أو مقارنته مع نموذج أخر من أجل إختيار الأفضل. سنتطرق في هذه المقالة لبعض أشهر طرق تقيم نماذج خوارزميات التعلم. 1- في حالة (Classification ) فإننا نعتمد على حساب (Confusion Matrix) كما في الصورة 1. (TP) يعني أن الصنف الذي نعرفه و الذي إستنتجته خوارزمية التعلم أثناء الإختبار متطابقان في الحالة الموجبة. مثلا نريد تصنيف مجموعة من الأشخاص ما إذا كانوا مصابين بمرض محدد (-) أم لا (+)، في هذه الحالة الشخص سليم و الخوارزمية إستنتجت أنه سليم. (FN) الشخص سليم و الخوارزمية إستنتجت أنه مريض. (FP) الشخص مريض و الخوارزمية إستنتجت أنه سليم. (TN) الشخص مريض و الخوارزمية إستنتجت أنه مريض. من أجل كل (Examples) التي لدينا في مجموعة الإختبار نقوم بحساب هؤولاء المعاملات الأربعة لنستعملهم في حساب مختلف أدوات القياس الموضحة في الصورة 2، ك (Accuracy) و غيرها. في الصورة 3، مثال بإستعمال (Scikit-

Instance-based learning VS Model-based learning

Image
أغلب أعمال مجال تعلم الألة تتمحور حول عملية التنبؤ و هو يعني أنه من البيانات التي لدينا و من التي خصصت لعملية التدريب فإن النظام أو البرنامج الذي نرغب في إنشائه يجب أن يكون قادرا على تعميم النتائج التي تحصل عليها علي بيانات جديدة من نفس النوع لم تشارك في عملية التدريب. و حتى و إن حصلنا على (accuracy ) جيدة أثناء عملية التدريب فهذا لا يعني أن برنامجنا جيدا! بل الأهم من ذلك هو تحقيق نتائج مرغوبة مع بيانات جديدة. و هناك نوعان من الطرق أو إستراتيجيتان نعتمد عليهما من أجل إنشاء أنظمة برمجية في مجال تعلم الألة. النوع 1: (Instance-based learning)  في هذا النوع النظام البرمجي يقوم بدراسة البيانات و إستخراج العلاقات التي تميزها بشكل عام، ثم بالإعتماد على ألية لقياس التشابه بين مختلف الأصناف يتم تحديد صنف البيانات الجديدة الواردة إلى النظام بناء على أقرب مسافة بينها و بين مختلف الأصناف الموجودة. رغم أن مفهوم هذا النوع يبدو بسيطا إلا أننا لا يمكننا قول ذلك فما زالت الكثير من المشاكل يتناسب معها هذا النوع. و كمثال صادفني سابقا و عملت عليه، كان لدي قاعدة بيانات و كل (Example) على شك