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

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

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

شرح خوارزمية SVM: المستوى الفائق
شرح خوارزمية SVM: المستوى الفائق

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

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

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

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

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

شرح خوارزمية SVM: سيناريو 1
شرح خوارزمية SVM: سيناريو 1

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

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

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

شرح خوارزمية SVM: سيناريو 2
شرح خوارزمية SVM: سيناريو 2

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

شرح خوارزمية SVM: سيناريو 2
شرح خوارزمية SVM: سيناريو 2

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

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

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

شرح خوارزمية SVM: سيناريو 3
شرح خوارزمية SVM: سيناريو 3

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

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

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

شرح خوارزمية SVM: سيناريو 4
شرح خوارزمية SVM: سيناريو 4

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

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

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

شرح خوارزمية SVM: سيناريو 5
شرح خوارزمية SVM: سيناريو 5

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

شرح خوارزمية SVM: سيناريو 5-a
شرح خوارزمية SVM: سيناريو 5-a

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

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

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

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

شرح خوارزمية SVM: سيناريو 5-b
شرح خوارزمية SVM: سيناريو 5-b

طريقة النواة Kernel method

في الممارسة العملية ، يمكن لـخوارزمية آلة المتجه الداعم SVM معالجة البيانات غير القابلة للفصل خطيًا عن طريق تعيين بيانات الإدخال إلى مساحة ذات أبعاد أعلى باستخدام طريقة النواة Kernel method. يسمح هذا لـخوارزمية آلة المتجه الداعم SVM بالعثور على المستوى الفائق الذي يمكنه فصل الفئات في مساحة الميزة الجديدة. طريقة النواة Kernal method هي عبارة عن اداة تعمل على تحويل المساحات ذي الأبعاد القليلة وتحوليها إلى مساحات ذي أبعاد متعددة (مثلا تحويل المستويات ذي البعدين الى مستويات ذي ثلاثة او اربعة أبعاد)، أي أنها تحول المسألة التي لا يمكن فصلها إلى مسألة قابلة للفصل. تفيد هذه الطريقة في الغالب في مسائل التصنيف غير الخطية. تتضمن بعض دوال النواة الشائعة دالة الأساس الخطية linear و متعددة الحدود polynomial و الشعاعية (RBF) والنواة السينية Sigmoid kernels.

مثال عملي لخوارزمية SVM في بايثون

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

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets

# Load the iris dataset
iris = datasets.load_iris()

# Use only the first two features for visualization
X = iris.data[:, :2]
y = iris.target

# Create a mesh grid to plot the decision boundary
h = 0.02  # step size in the mesh
x_min, x_max = X[:, 0].min() - 0.5, X[:, 0].max() + 0.5
y_min, y_max = X[:, 1].min() - 0.5, X[:, 1].max() + 0.5
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))

# Define the SVM models with different kernels
models = (svm.SVC(kernel='linear', C=1.0),
          svm.SVC(kernel='rbf', gamma=0.7, C=1.0),
          svm.SVC(kernel='poly', degree=3, C=1.0),
          svm.SVC(kernel='sigmoid', C=1.0))

# Create a new figure with a larger size
fig = plt.figure(figsize=(12, 8))

# Train each model and plot the decision boundary
for i, model in enumerate(models):
    model.fit(X, y)
    # Create a subplot for the current model
    ax = fig.add_subplot(2, 2, i + 1)
    # Plot the decision boundary
    Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)
    ax.contourf(xx, yy, Z, cmap=plt.cm.Paired, alpha=0.8)
    ax.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)
    ax.set_title('Kernel: {}'.format(model.kernel))

# Display the plot
plt.show()

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

يؤدي ضبط قيم المعلمات لخوارزميات التعلم الآلي إلى تحسين أداء النموذج بشكل فعال. دعونا نلقي نظرة على قائمة المعلمات المتاحة مع SVM. بعض المعلمات المهمة التي لها تأثير أكبر على أداء النموذج ، “kernel” ، “gamma” و “C”:

النتائج مع kernels مختلفة

نتائج شرح خوارزمية SVM مع kernal مختلفة
نتائج شرح خوارزمية SVM مع kernals مختلفة

النتائج مع قيم جاما مختلفة 

جاما تعرف بانها معامل النواة kernal لـ “rbf” و “poly” و “sigmoid”. كلما زادت قيمة جاما ، كلما زادت قيمة الخطأ و حدوث مشكلة الإفراط في التخصيص Overfitting. مثال: دعنا نرى تأثير قيم جاما المختلفة  0 – 10 – 100 على النتائج.

svc = svm.SVC(kernel='rbf', C=1,gamma=0).fit(X, y)
نتائج شرح خوارزمية SVM مع قيم جاما مختلفة
نتائج شرح خوارزمية SVM مع قيم جاما مختلفة

النتائج مع قيم مختلفة ل C

نتائج شرح خوارزمية SVM مع قيم C مختلفة
نتائج شرح خوارزمية SVM مع قيم C مختلفة

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

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

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

الإيجابيات:

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

السلبيات:

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

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

 

 

 

 

 

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

اترك تعليقاً

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

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

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

رفع الملف