آلة المتجهات الداعمة أو SVM

آلة المتجهات الداعمة أو SVM

مقدمة إلى SVM

آلة المتجهات الداعمة أو Support Vector Machine هي خوارزميات تعلم آلي خاضعة بلإشراف قوية ومرنة تُستخدم في التصنيف والانحدار. لكن بشكل عام، يتم استخدامها في مسائل التصنيف. في الستينيات، تم تقديم أجهزة SVM لأول مرة ولكن تم تنقيحها لاحقًا في عام 1990. تمتلك SVM طريقتها الفريدة في التنفيذ مقارنة بخوارزميات التعلم الآلي الأخرى. في الآونة الأخيرة، أصبحت شائعة للغاية بسبب قدرتها على التعامل مع العديد من المتغيرات المستمرة والفئویه.

عمل SVM

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

آلة المتجهات الداعمة أو SVM

فيما يلي مفاهيم الرئیسیه في SVM:

  • متجهات الدعم (Support Vectors) – تسمى نقاط البيانات الأقرب للمستوى الفائق متجهات الدعم. سيتم تحديد الخط الفاصل بمساعدة نقاط البيانات هذه.
  • المستوی الفائق (Hyperplane) – كما نرى في الرسم البياني أعلاه، فهو عبارة عن مستوى قرار أو مساحة مقسمة بين مجموعة من الشیاء لها فئات مختلفة.
  • الهامش (Margin) – يمكن تعريفه على أنه الفجوة بين سطرين على نقاط بيانات الخزانة من الفئات المختلفة. يمكن حسابها على أنها المسافة العمودية من الخط إلى متجهات الدعم. يعتبر الهامش الكبير هامشًا جيدًا ويعتبر الهامش الصغير هامشًا سيئًا.

الهدف الرئيسي من SVM هو تقسيم مجموعات البيانات إلى فئات للعثور على الحد الأقصى للمستوى الفائق الهامشي (MMH) ويمكن القيام بذلك في الخطوتين التاليتين:

  1. أولاً، سينشئ SVM المستوی الفائق بشكل متكرر تفصل بين الفئات بأفضل طريقة.
  2. بعد ذلك، سيختار المستوى الفائق الذي يفصل بين الفئات بشكل صحيح.

تنفيذ SVM في بايثون

نواة SVM

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

النواة الخطيه (Linear Kernel)

يمكن استخدامه كمنتج نقطي بين أي ملاحظتين. صيغة النواة الخطية على النحو التالي:

من الصيغة أعلاه، يمكننا أن نرى أن المنتج بين متجهين يقولان 𝑥  و  𝑥𝑖 هو مجموع مضاعفة كل زوج من مقادیر الإدخال.

نواة متعدد الحدود (Polynomial Kernel)

إنه شكل أكثر عمومية من النواة الخطية ويميز فضاء الإدخال المنحني أو غير الخطي. فيما يلي صيغة نواة متعدد الحدود:

هنا d هي درجة متعدد الحدود، والتي نحتاج إلى تحديدها يدويًا في خوارزمية التعلم.

نواة دالة الأساس الشعاعي (RBF)

نواة RBF، المستخدمة في الغالب في تصنيف الآلات المتجهات الداعمة، تعين فضاء الإدخال في فضاء أبعاد غير محددة. الصيغة التالية تشرحها رياضيا:

آلة المتجهات الداعمة أو SVM

هنا، تتراوح جاما (gamma) من 0 إلى 1. نحتاج إلى تحديدها يدويًا في خوارزمية التعلم. المقدار الافتراضي الجيدة لجاما هو 0.1.

نظرًا لأننا طبقنا SVM للبيانات القابلة للفصل خطيًا، يمكننا تنفيذه في بایثون للبيانات غير القابلة للفصل خطيًا. يمكن أن يتم ذلك باستخدام النواة.

مثال

فيما يلي مثال على إنشاء مصنف SVM باستخدام النواة. سنستخدم مجموعة بيانات iris من scikit-Learn.

سنبدأ باستيراد الاحزام التالية:

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

الآن، نحن بحاجة إلى تحميل بيانات الإدخال:

iris = datasets.load_iris()

من مجموعة البيانات هذه، نأخذ أول خصیصتین على النحو التالي:

X = iris.data[:, :2]
y = iris.target

بعد ذلك، سنرسم حدود SVM بالبيانات الأصلية على النحو التالي:

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))
X_plot = np.c_[xx.ravel(), yy.ravel()]

الآن، نحتاج إلى تقديم مقدار بارامتر التنظيم على النحو التالي:

C = 1.0

بعد ذلك، يمكن إنشاء شیء مصنف SVM على النحو التالي:

Svc_classifier = svm.SVC(kernel='linear', C=C).fit(X, y)
Z = svc_classifier.predict(X_plot)
Z = Z.reshape(xx.shape)
plt.figure(figsize=(15, 5))
plt.subplot(121)
plt.contourf(xx, yy, Z, cmap=plt.cm.tab10, alpha=0.3)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Set1)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.xlim(xx.min(), xx.max())
plt.title('Support Vector Classifier with linear kernel')

الاخراج:

Text(0.5, 1.0, 'Support Vector Classifier with linear kernel')
آلة المتجهات الداعمة أو SVM

لإنشاء مصنف SVM باستخدام نواة rbf، يمكننا تغيير النواة إلى rbf على النحو التالي:

Svc_classifier = svm.SVC(kernel = 'rbf', gamma =‘auto’,C = C).fit(X, y)
Z = svc_classifier.predict(X_plot)
Z = Z.reshape(xx.shape)
plt.figure(figsize=(15, 5))
plt.subplot(121)
plt.contourf(xx, yy, Z, cmap = plt.cm.tab10, alpha = 0.3)
plt.scatter(X[:, 0], X[:, 1], c = y, cmap = plt.cm.Set1)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.xlim(xx.min(), xx.max())
plt.title('Support Vector Classifier with rbf kernel')

الاخراج:

Text(0.5, 1.0, 'Support Vector Classifier with rbf kernel')
آلة المتجهات الداعمة أو SVM

نضع مقدار جاما على “auto” ولكن يمكنك أيضًا تقديم مقدارها بين 0 إلى 1.

إيجابيات وسلبيات المصنفات SVM

إيجابيات المصنفات SVM

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

سلبيات المصنفات SVM

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

المصادر:

المصدر الاول

منشور ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

السلة