فهم خوارزمية آلة المتجهات الداعمة (SVM) من خلال مثال في Python

المقدمة

إتقان خوارزميات التعلم الآلي (Machine Learning Algorithms) ليست خرافة على الإطلاق. يبدأ معظم المبتدئين بتعلم تحليل الانحدار (Regression analysis). الذي من السهل تعلمه و استخدامه ، ولكن هل يكفي ذلك؟ بالطبع لا! لأنه يمكنك القيام  بالكثير من الاشياء بجانب مسائل الانحدار!

فكر في خوارزميات التعلم الآلي على أنها مستودع معبأ بالفؤوس والسيوف والشفرات والاقوس والخناجر وما إلى ذلك. لديك أدوات مختلفة ، ولكن يجب أن تتعلم كيفية استخدامها في الوقت المناسب. مثلا ، “الانحدار” يشبه السيف قادر على تشريح البيانات وتقسيمها بكفاءة ، ولكنه غير قادر على التعامل مع البيانات المعقدة للغاية. على العكس من ذلك ، SVM يشبه السكين الحاد – فهو يعمل على مجموعات بيانات أصغر ، ولكن المعقداه منها ايضا ، يمكن أن يكون أقوى وأقوى في بناء نماذج التعلم الآلي.

ما هي خوارزمية آلة المتجهات الداعمة (Support (Vector Machine؟

خوارزمية آلة المتجهات الداعمة (SVM) هي خوارزمية تعلم آلي خاضع للإشراف يمكن استخدامها  في مسائل التصنيف (Classification) أو الانحدار (Regression). ومع ذلك ، فإنها تستخدم في الغالب في مسائل التصنيف. في خوارزمية SVM، نرسم كل عنصر من عناصر البيانات كنقطة في الفضاء ذو بعد n (حيث n هو عدد السمات Features) مع قيمة كل سمة هي قيمة إحداثيات معينة. ثم ، نقوم بإجراء التصنيف من خلال إيجاد المستو فائق (Hyper-plane) الذي يميز الفئتين جيدًا. انظر إلى الشكل أدناه لفهم ما تم الاشارة اليه.

SVM_1

المتجهات الداعمة (Support Vectors) هي ببساطة إحداثيات المراقبة الفردية. مصنف اله المتجهات الداعمة (SVM Classifier) هو الحد الفاصل بين الفئتين (hyper-line / line).

كيف تعمل خوارزمية آلة المتجهات الداعمة (SVM)؟

أعلاه ، لاحظنا عملية الفصل بين الفئتين بمستوى فائق (Hyper-plane). الآن السؤال المهم هنا هو كيف يمكننا تحديد المستوى الفائق الصحيح؟ ليس الأمر صعبًا كما تظن! يمكن شرحها ببساطة في الخطوات التالية:

 

في السيناريو 1 أدناه حدد المستوى الفائق  الصحيح:

هنا ، لدينا ثلاثة مستويات فائقة (أ ، ب ، ج). الآن ، حدد المستوى الفائق الصحيح لتصنيف النجوم والداوئر.

SVM_2

تحتاج إلى تذكر قاعدة الإبهام لتحديد المستوى الفائق الصحيح: “حدد المستوى الفائق الذي يفصل بين الفئتين بشكل أفضل”. في هذا السيناريو ،يقوم المستوى الفائق “B” بتنفيذ هذه المهمة بشكل ممتاز.

 

في السيناريو 2 حدد المستوى الفائق الصحيح:

هنا ، لدينا ثلاثة مستويات فائقة (A و B و C) وجميعها تفصل الطبقات جيدًا. الآن ، كيف يمكننا تحديد المستوى الفائق الصحيح؟

SVM_3

هنا ، سيساعدنا زيادة المسافات بين أقرب نقطة بيانات (أي فئة) والمستوى الفائق على تحديد المستوى الفائق الصحيح. تسمى هذه المسافة بالهامش (Margin). دعنا نلقي نظرة على الصورة التالية:

SVM_4

أعلاه ، يمكنك أن ترى أن هامش المستوى الفائق C مرتفع مقارنة بكل من هوامش المستويين A و B. وبالتالي ، فإننا نختار المستوى الفائق الأيمن C كـافضل مستوى. سبب اخر لاختيار المستوى الفائق ذوالهامش الأعلى هو المتانة . إذا حددنا مستوى ذو هامش منخفض ، فهناك احتمالية لحدوث اخطاء اثناء عملية التصنيف.

 

في السيناريو 3 حدد المستوى الفائق الصحيح:

يتم إستخدم الخطوات التي تم مناقشتها في السيناريوهات السابقة لتحديد المستوى الفائق الصحيح.

SVM_5

قد يكون البعض منكم قد حدد المستوى الفائق B  كافضل مستوى لأنه بهامش أعلى مقارنة بـالمستوى A .  ولكن ، SVM هنا يختار المستوى الفائق الذي يصنف الفئات بدقة عالية بغض النظر عن زيادة الهامش. هنا ، يحتوي المستوى الفائق B على نسبة خطأ في التصنيف وقد تم تصنيف A بشكل صحيح. لذلك ، فإن المستوى الفائق A هو الافضل.

 

في السيناريو 4 هل يمكننا تصنيف الفئتين؟:

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

SVM_6

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

SVM_7

 

في السيناريو 5 ابحث عن المستوى الفائق للفصل بين الفئات:

في السيناريو أدناه ، لا يمكن أن يكون لدينا مستوى فائق خطي بين الفئتين ، فكيف يصنف SVM هاتين الفئتين؟ حتى الآن ، نظرنا فقط إلى المستوى الخطي الفائق.

SVM_8

يمكن لـ SVM حل هذه المشكلة بسهولة عن طريق إدخال ميزة إضافية. هنا ، سنضيف ميزة جديدة مستوى ثلاثي الابعاد z=x^2+y^2 . الآن ، دعنا نرسم نقاط البيانات على المحور x و z:

SVM_9

في المخطط أعلاه ، الاشياء التي يجب مراعاتها هي:

  • ستكون جميع قيم z موجبة دائمًا لأن z هي مجموع مربع x و y.
  • في المخطط الأصلي ، تظهر الدوائر الحمراء قريبة من أصل محوري x و y ، مما يؤدي إلى انخفاض قيمة z والنجم بعيدًا نسبيًا عن نتيجة الأصل إلى قيمة z أعلى.

في مصنف SVM ، من السهل أن يكون لديك مستوى فائق خطي بين هاتين الفئتين. ولكن ، هناك سؤال ملح آخر يطرح نفسه ، هل يجب أن نضيف هذه الميزة يدويًا للحصول على مستوى فائق? لا ، خوارزمية SVM لديها تقنية تسمى  Kernel method

ال Kernal method هي عبارة عن اداة تعمل على تحويل المساحات ذو الأبعاد القليلة وتحوليها إلى مساحات ذو أبعاد أكثر – تحويل المستويات ذو البعدين الى مستويات ذو ثلاثة او اربعة أبعاد -، أي أنها تحول المسئلة التي لا يمكن فصلها إلى مسئلة قابلة للفصل. تفيد هذه الطريقة في الغالب في مسائل التصنيف غير الخطية. ببساطة ، يقوم ببعض تحويلات البيانات المعقدة للغاية ، ثم يكتشف عملية تصنيف البيانات بناءً على التسميات أو المخرجات التي حددتها.

عندما ننظر إلى المستوى الفائق في مساحة الإدخال الأصلية ، تبدو كدائرة:

SVM_10

 

كيف يتم حل مسائل SVM في Python و R؟

في Python ، يتم إستخدام مكتبة scikit-learn على نطاق واسع لتنفيذ خوارزميات التعلم الآلي. حيث يتم إستيراد خوارزمية SVM المتوفرة في المكتبة. من أجل فهم أعمق دعنا نلقي نظرة على مشكلة واقعية ومجموعة بيانات حقيقية لفهم كيفية تطبيق عملية التصنيف باستخدام SVM.

عرض المشكلة

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

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

سنقوم في هذا المثال بإستخدام خوارزمية SVM لتحديد العملاء المؤهلين للحصول على مبلغ القرض بناءا على المعلومات السابقة التي أدخلها العميل.

متجهات آلات الدعم SVM في لغة البرمجة R

يتم استخدام حزمة e1071 في لغة البرمجة R لإنشاء متجهات آلات الدعم بسهولة. طريقة إنشاء نموذج متجهات آلات الدعم SVM في R و Python متشابهة، دعنا نلقي نظرة الآن على الكود التالي:

 

#استيراد المكتبة
#SVM هذه المكتبة تتضمن خوارزمية متجهات آلات الدعم

require(e1071)
Train <- read.csv(file.choose())
Test <- read.csv(file.choose())
# هناك العديد من الخيارات المرتبطة بتدريب نموذج متجهات آلات الدعم؛ مثل تغيير قيمة 
kernel و gamma و C.
# إنشاء النموذج
model <- svm(Target~Predictor1+Predictor2+Predictor3,data=Train,kernel='linear',gamma=0.2,cost=100)

#تخمين النتائج
preds <- predict(model,Test)
table(preds)

متجهات آلات الدعم SVM في لغة البرمجة Python

ضبط معلمات SVM الضرورية في Python

يؤدي ضبط قيم المعلمات لخوارزميات التعلم الآلي إلى تحسين أداء النموذج بشكل فعال. دعونا نلقي نظرة على قائمة المعلمات المتاحة مع SVM.

sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma=0.0, coef0=0.0, shrinking=True, probability=False,tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, random_state=None)

بعض المعلمات المهمة التي لها تأثير أكبر على أداء النموذج ، “kernel” ، “gamma” و “C”:

  • النواة kernel

لدينا العديد من الخيارات المتاحة للنواة مثل “linear” و “rbf” و “poly” وغيرها (القيمة الافتراضية هي “rbf”). الخياران “rbf” و “poly” مفيدان للمستويات الفائقة غير الخطية.

دعونا نلقي نظرة على المثال التالي لتوضح الفكرة ، حيث أننا استخدمنا في هذا المثال نواة خطية linear kernal على ميزتين من مجموعة بيانات زهرة Iris لتصنيفها. الكود بلغة Python

مثال1 : SVM مع  Linear Kernal

 

استيرادالمكتبات الضرورية
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets

استيراد البيانات
iris = datasets.load_iris()
X = iris.data[:, :2] 
y = iris.target

في هذا المثال لم نقم بمعالجة البانات لان بيانات هذا المثال جاهزة
C = 1.0 #SVM معامل تنظيم
svc = svm.SVC(kernel='linear', C=1,gamma=0).fit(X, y)  #نقوم بملائمة النموذج على البيانات

#انشاء شكل لرسم النتائج
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
h = (x_max / x_min)/100
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
 np.arange(y_min, y_max, h))

plt.subplot(1, 1, 1)

#نقوم بتخمين النتائج

Z = svc.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.Paired, alpha=0.8)

#نقوم برسم النتائج
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.xlim(xx.min(), xx.max())
plt.title('SVC with linear kernel')
plt.show()SVM_11


مثال 2: استخدم SVM  مع Kernal rbf

قم بتغيير نوع النواة Kernal إلى rbf في السطر أدناه وانظر إلى التأثير.

svc = svm.SVC(kernel='rbf', C=1,gamma=0).fit(X, y)

SVM_12

يقترح عليك استخدام نواة SVM الخطية Linear Kernal إذا كان لديك عدد كبير من الميزات (> 1000) لأنه من المرجح أن تكون البيانات قابلة للفصل خطيًا في مساحة عالية الأبعاد. أيضًا ، يمكنك استخدام rbf ولكن لا تنسَ التحقق من صحة معلماته لتجنب الإفراط في الملاءمة.

  • جاما Gama

تعرف بانها معامل ال Kernel لـ “rbf” و “poly” و “sigmoid”. كلما زادت قيمة جاما ، كلما زادت قيمة الخطأ و حدوث مشكلة الإفراط في الملاءمة Overfitting.

مثال: دعنا نرى تأثير قيم جاما المختلفة  0 – 10 – 100 على النتائج.

 

svc = svm.SVC(kernel='rbf', C=1,gamma=0).fit(X, y)

SVM_15

  • معامل الجزاء C

معامل الجزاء C لنسبة الخطأ. هذا المعامل يتحكم في المفاضلة بين حدود التصنيف الناعمة السلسة وتصنيف نقاط التدريب بشكل صحيح.
SVM_18

يجب أن ننظر دائمًا إلى النتائج للحصول على القيم المثالية للعوامل وتجنب الإفراط في الملاءمة.

الإيجابيات والسلبيات المرتبطة بـ SVM

الإيجابيات:

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

السلبيات:

  • لا تعمل بشكل جيد عندما يكون لدينا مجموعة بيانات كبيرة لأنها تتطلب وقت كثير للتدريب
  • لا تعمل بشكل جيد للغاية ، عندما تكون مجموعة البيانات بها اخطاء و شوائب كثيرة ، أي أن الفئات المستهدفة متداخلة
  • لا تقدم SVM تقديرات الاحتمالات بشكل مباشر ، بل يتم حسابها باستخدام التحقق المتقاطع cross-validation باهظ التكلفة. حيث يتم تضمينه في طريقة SVC ذات الصلة في مكتبة Python Scikit-Learn.

مترجم من

https://www.analyticsvidhya.com/

Share on facebook
فاسبوك
Share on twitter
تويتر
Share on linkedin
لينكد إن
Share on whatsapp
واتساب

اترك تعليقاً

المشاركات الاخيرة

أحدث التعليقات

أفحص بحثك بالمجان

رفع الملف