Posts

Showing posts from December, 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) الت