Posts

Showing posts from 2019

إستخراج الميزات من النص. الجزء 1

Image
Text feature extraction في مجال تعلم الألة لايمكن إستعمال نص بشكله الخام كما هو! بل نحتاج إلى التعامل مع أرقام و لهذا نحن بحاجة إلى طريقة لتحويل النصوص إلى أرقام. هناك ثلاث عمليات أساسية و هي : (Tokenizing) تقطيع النص إلى مقاطع أساسية على حسب الفواصل التي نحددها مثل الفراغات التي بين الكلمات. (Counting ) حساب عدد مرات تكرار المقاطع الأساسية في النص. (normalizing) منح أوزان أو قيم للمقاطع الأساسية أو (Tokens). مكتبة (Scikit-Learn ) وفرت بعض الخوارزميات الجاهزة للتعامل مع النصوص و إستخراج الميزات منها. سوف نشرح جزءا منها في الجزء 1 و الباقي لاحقا إن شاء الله. 1- Binary Encoding : لنفرض أننا إختارنا (Tokens) عبارة عن كلمات. في هذه الطريقة نقوم بتحديد جميع الكلمات التى ظهرت في الداتا على شكل قائمة للمفردات. إذا كان عدد الكلمات (vocabulary list) هو 100 ألف فإن كل نص ينتمى إلى الداتا يتم تمثيله بجدول طوله 100 ألف و كل خانة تقابل كلمة من قائمة المفردات إذا ظهرت هذه الكلمة في النص فإن خانتها تحمل الرقم 1 و إلا 0. الصورة 1 مثال عن هذه الطريقة بإستخدام (CountVectorizer). لدينا ثلاث

كيفية إنشاء ميزات جديدة لمجموعة التدريب

Image
أحيانا قد نصادف أن الميزات (Features) التي تحصلنا عليها غير كافية لتميز مختلف عناصر الداتا التي معنا و أن العناصر متداخلة فيما بينها. مثلا لدينا ميزتان (x, y) لفئتين (C1, C2) لما نظهرهما على المستوى نجد تداخل فيما بينهما. نظريا في مجال تعلم الألة يمكن دمج الميزات لإنشاء ميزات أخرى إضافية مساعدة على التميز بين مختلف الفئات. مثلا في هذا المثال نعتبر (x+y) ميزة ثالثة و نتحول من المستوى إلى 3D و هذا يمنح نا زاوية أخرى لرؤية الداتا. في مكتبة (Scikit-Learn ) توفر لنا إمكانية إنشاء ميزات جديدة بواسطة الكلاس (PolynomialFeatures) حيث نحدد نحن درجة كثير الحدود و هو يقوم بدمج الميزات بالشكل التالي مثلا من أجل ميزتين و الدرجة 2 : (x, y) = 1 + x + y + pow(x, 2) + xy + pow(y, 2) في الصورة مثال عن ذلك. حيث في السطر 5 شكلنا داتا عشوائية من 4 مجموعة من أجل (clustering) ب 50000 مثال و 3 ميزات بواسطة الكلاس (make_blobs). ثم نظهرها بواسطة (mirapy) ب 3D في السطر 9، حيث نشاهد التداخل واضح على الصورة. في السطر 11 نستدعي الكلاس (PolynomialFeatures) و نحدد الدرجة التي نريد و كانت في هذا الم

How to build a machine learning pipeline

Image
How to build a machine learning pipeline ما هو (Pipeline ) ؟ هو طريقة تمكننا من جمع أجزاء الكود البرمجي من البداية حتى النهاية في شكل نمودج واحد يتم التعامل معه مباشرة. و هذه الطريقة تجعل الكود أبسط و أسهل للفهم و تصحيح الأخطاء. في الصورة مثال بإستعمال مكتبة (Scikit-Learn ) ، حيث و بعد تحميل الداتا من أجل عملية التصنيف (مصابة بسرطان الثدي، سليمة) و تقسيمها إلى مجموعتين : مجموعة التدريب و مجموعة الإختبار، نقوم في السطر 17 ببناء نمودج ال (Pipeline ). في عملية البناء يمكننا تحديد العمليات المتعلقة بالخصائص (features ) مثل طريقة تعويض الميزات (features ) المفقودة في بعض الأمثلة من الداتا (missing values ) ، توحيد الميزات (StandardScaler) و تصغير عدد (Features ) مثلا بإستعمال طريقة (PCA). في هذا المثال قمت بتجميع كل العمليات المتعلقة ب (Features ) بالإستفادة من طريقة (FeatureUnion) و هي طريقة تبسط الكود أكثر. تحديد الخوارزمية المستعملة أو طريقة البحث أو التعديل على (Hyper-parameters )، في هذا المثال إستعملت خوارزمية التصنيف (SVC). في النهاية تنفيذ هذا النمودج عن طريق الدالة (fit) الت

تصغير حجم الخصائص المستخرجة من البيانات

Image
Dimensionality Reduction : Principal Component Analysis PCA في بعض المجالات تكون البيانات ضخمة جدا و عدد (Features ) كبيرا جدا يعني أبعادا كثيرة و هذا قد يصعب علينا العمل في مجال تعلم الألة أو حتى يستحيل ذلك في بعض المجالات الأخرى نظرا لقدرات الحواسب المحدودة. ال (Features ) في حد ذاتها قد تسبب تداخلا بين بياناتنا إذا لم نحسن إختيارها، مثلا لتنصيف البرتقال و التفاح و الليمون قد تكون خاصية الشكل غير مفيدة بل تخلق تداخلا و تعقد عملية التصنيف كون الأشكال بينها متشابهة عكس خاصة اللون التي تفصل بينهم بشكل واضح. في هذا المقال نشير إلى طريقة فعالة جدا لتصغير حجم (Features) و هي طريقة رياضية إحصائية إسمها (PCA) و تعتمد على حساب (Covariance matrix ) و (Eigen vectors and values)  ثم تعيد ترتيب البيانات وفق هذه الحسابات أو الأبعاد و بعدها تختار (K Eigen vectors ) و الذي يمثل عدد الأبعاد التي نرغب في تحويل (تصغير ) الخصائص (Features ) إليها. الصورة 1 هذه الطريقة (PCA) جاهزة على مكتبة (Scikit-Learn ). و كمثال تطبيقي حولها إخترنا قاعدة بيانات تحتوي على (Examples = 569  features = 30)

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

Image
Hyper-parameter Optimization المعاملات الداخلية (hyper-parameter )  هي المعاملات التى يحددها المطور و لا يمكن تغيرها أثناء عملية التدريب و لا تتأثر بنوع و لا شكل الداتا. مثل عدد (layers) في الشبكة العصبية أو المعاملات (C, gamma, kernel ) في خوارزمية (SVM). هذه المعاملات تؤثر على النتائج طبعا لأنها تؤثر على شكل و مبدأ عمل الخوارزمية و للبحث عن أحسن القيم الخاصة بها التي تناسب نوع الداتا التي نعمل عليها فأبسط فكرة تبادر لأذهاننا هي أننا في كل مرة نعيد تدريب الخوارزمية بمعاملات جديدة ثم نحتفظ بأحسن شكل ممكن لهذه المعاملات. لكن في مكتبة (Scikit-Learn ) تم تسهيل الأمر كثيرا بتوفير أدوات جاهزة للعمل في هذه النقطة بالتحديد.  أولا: (GridSearchCV)، و هو أداة جاهزة للبحث عن أحسن المعاملات لخوازمية محددة بتجريب جميع التركبيات الممكنة لهذه المعاملات. في السطر 19 من الصورة 1، حددنا مجموعة من قيم المعاملات الخاصة بخوارزمية (SVM ) في شكلين مختلفين، كل شكل موجود بين حاضنتين. في الشكل 1 حددنا قيم المتغير (C) التي تأخد القيم 1 أو 10 أو 100 أو 1000 و (kernel = linear) أثناء عملية التدريب سي

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

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) على شك

نصائح إلى الطلبة الذين سيدرسون تخصص الإعلام الألي

Image
نصائح إلى الطلبة الذين سيدرسون تخصص الإعلام الألي (علوم الحاسوب ) informatique : في هذا المقال مجموعة من النصائح و التوجيهات موجهة إلى الطلبة الجدد الذين إختاروا تخصص الإعلام الألي (أو رياضيات و إعلام ألي و يعتزمون إكمال الدراسة في تخصص الإعلام الألي بعد إعادة التوجيه في السنة الثانية). 1- نتمنى أن تكونوا قد إخترتم هذا التخصص عن قناعة و دراية و حب و إلا فليراجع الطالب نفسه قبل بداية الموسم الدرا سي و يتخد قرارا نهائيا حول مستقبله الدراسي، لأن الأشياء التي تفعل إرغاما أو إكراها و دون حب لن يكون فيها النجاح و إن كان فلن يكون هناك إبداع و تفوق. 2- كل الشائعات عن هذا التخصص خاطئة سواء بالقول: أنه تخصص صعب أو سهل. فمن يعمل و يجتهد ينجح و العكس صحيح، و هذا ينطبق على جميع التخصصات الأخرى. 3- ما يميز الإعلام الألي أنه يعتبر من العلوم الجديدة مقارنة بالرياضيات و الفيزياء و الكيمياء و العلوم الطبيعية و لهذا جزء كبير من مفاهيمه متجدد بإستمرار و يحتاج شخصا يظل متابعا لكل المستجدات في هذا المجال و مواظبا على ذلك. شهادتك بعد التخرج أو مهارتك قد تصبح بلا قيمة إذا لم تجد