تعد أجهزة المتجهات الداعمة (SVMs) خوارزمية تعلم قوية خاضعة للإشراف تُستخدم لمهام التصنيف والانحدار. الهدف الأساسي لـ SVM هو العثور على المستوى الفائق الأمثل الذي يفصل بشكل أفضل بين نقاط البيانات من الفئات المختلفة في مساحة عالية الأبعاد. يرتبط تصنيف مجموعة الميزات في SVM ارتباطًا وثيقًا بوظيفة القرار، وخاصة علامتها، والتي تلعب دورًا مهمًا في تحديد أي جانب من المستوى الفائق تقع عليه نقطة بيانات معينة.
وظيفة القرار في SVM
يمكن التعبير عن وظيفة القرار لـ SVM على النحو التالي:
حيث:
- هو ناقل الوزن الذي يحدد اتجاه المستوى الزائد.
- هو ناقل الميزة لنقطة البيانات التي يتم تصنيفها.
- هو مصطلح التحيز الذي يغير المستوى الزائد.
لتصنيف نقطة البيانات ، يتم استخدام إشارة دالة القرار:
تحدد هذه العلامة جانب المستوى الفائق الذي تقع عليه نقطة البيانات.
دور تسجيل الدخول التصنيف
إشارة دالة القرار () يحدد مباشرة تسمية الفئة المخصصة لنقطة البيانات
. وإليك كيف يعمل:
1. علامة إيجابية: إذا ، إشارة دالة القرار إيجابية. وهذا يعني أن نقطة البيانات
يقع على جانب المستوى الزائد حيث توجد الطبقة الإيجابية. لذلك،
يتم تصنيفها على أنها تنتمي إلى الفئة الإيجابية (يُشار إليها عادةً بـ +1).
2. إشارة سلبية: إذا ، إشارة دالة القرار سالبة. وهذا يشير إلى أن نقطة البيانات
يقع على جانب المستوى الزائد حيث توجد الفئة السلبية. لذلك،
يتم تصنيفها على أنها تنتمي إلى الفئة السلبية (يُشار إليها عادةً بـ -1).
3. بدون الحاجة لأى معرفة بتصميم و برمجة المواقع الإلكترونية: في حالة نادرة حيث ، نقطة البيانات
تقع بالضبط على الطائرة الفائقة. هذا السيناريو ممكن من الناحية النظرية ولكنه نادر من الناحية العملية بسبب الطبيعة المستمرة للبيانات ذات القيمة الحقيقية.
تفسير هندسي
يعد التفسير الهندسي لوظيفة القرار ضروريًا لفهم كيفية تصنيف SVMs لنقاط البيانات. الطائرة الفائقة التي تم تعريفها بواسطة بمثابة حدود القرار بين الفئتين. يتم تحديد اتجاه وموضع هذا المستوى الزائد بواسطة ناقل الوزن
و مصطلح التحيز
.
1. هامش: الهامش هو المسافة بين المستوى الزائد وأقرب نقاط البيانات من كل فئة. تهدف SVM إلى تعظيم هذا الهامش لضمان أن الطائرة الفائقة لا تفصل الفئات فحسب، بل تفعل ذلك بأكبر مسافة ممكنة من أقرب نقاط البيانات. تُعرف نقاط البيانات الأقرب هذه باسم متجهات الدعم.
2. ناقلات الدعم: متجهات الدعم هي نقاط البيانات الأقرب إلى المستوى الزائد. إنها حاسمة في تحديد موضع واتجاه المستوى الزائد. أي تغيير في موضع ناقلات الدعم هذه من شأنه أن يغير المستوى الزائد.
مثال
فكر في مثال بسيط حيث لدينا مساحة ميزة ثنائية الأبعاد تحتوي على نقاط بيانات من فئتين. دعنا نشير إلى الفئة الإيجابية بـ +1 والفئة السالبة بـ -1. لنفترض أن ناقل الوزن و مصطلح التحيز
.
لنقطة البيانات يمكننا حساب دالة القرار على النحو التالي:
منذ ، إشارة دالة القرار موجبة، وبالتالي نقطة البيانات
يصنف على أنه ينتمي إلى الفئة الإيجابية (+1).
لنقطة بيانات أخرى ، نحسب وظيفة القرار على النحو التالي:
مرة أخرى، ، وبالتالي فإن الإشارة إيجابية، و
يصنف على أنه ينتمي إلى الفئة الإيجابية (+1).
الآن، فكر في نقطة البيانات :
في هذه الحالة، ، وبالتالي فإن الإشارة سلبية، و
يصنف على أنه ينتمي إلى الفئة السلبية (-1).
صياغة رياضية
تتضمن الصيغة الرياضية لـ SVM حل مشكلة التحسين للعثور على الحل الأمثل
التي تعمل على زيادة الهامش مع تصنيف بيانات التدريب بشكل صحيح. يمكن التعبير عن مشكلة التحسين على النحو التالي:
أين هي تسمية فئة نقطة البيانات
، ويضمن القيد تصنيف جميع نقاط البيانات بشكل صحيح بهامش لا يقل عن 1.
خدعة نواة
في العديد من التطبيقات العملية، قد لا تكون البيانات قابلة للفصل خطيًا في مساحة الميزة الأصلية. لمعالجة هذه المشكلة، يمكن توسيع SVMs إلى التصنيف غير الخطي باستخدام خدعة kernel. وظيفة النواة يقوم ضمنيًا بتعيين البيانات في مساحة ذات أبعاد أعلى حيث يكون الفصل الخطي ممكنًا. تتضمن وظائف النواة شائعة الاستخدام النواة متعددة الحدود، ونواة دالة الأساس الشعاعي (RBF)، والنواة السيني.
تصبح وظيفة القرار في SVM ذات النواة:
أين هي مضاعفات لاغرانج التي تم الحصول عليها من الشكل المزدوج لمشكلة التحسين.
تنفيذ بايثون
في Python، توفر مكتبة `scikit-learn` تنفيذًا مباشرًا لـ SVM من خلال فئة `SVC`. فيما يلي مثال لكيفية استخدام `SVC` لتصنيف مجموعة بيانات:
python from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import accuracy_score # Load the dataset iris = datasets.load_iris() X = iris.data y = iris.target # Select only two classes for binary classification X = X[y != 2] y = y[y != 2] # Split the dataset into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # Create an SVM classifier with a linear kernel clf = SVC(kernel='linear') # Train the classifier clf.fit(X_train, y_train) # Predict the class labels for the test set y_pred = clf.predict(X_test) # Calculate the accuracy of the classifier accuracy = accuracy_score(y_test, y_pred) print(f'Accuracy: {accuracy * 100:.2f}%')
في هذا المثال، يتم استخدام فئة `SVC` لإنشاء مصنف SVM بنواة خطية. يتم تدريب المصنف على مجموعة التدريب، ويتم تقييم الدقة على مجموعة الاختبار. يعتمد تصنيف مجموعة الميزات في SVM بشكل أساسي على إشارة وظيفة القرار . تحدد العلامة على أي جانب من المستوى الفائق تقع نقطة البيانات، وبالتالي تخصيصها للفئة المقابلة. تعتبر وظيفة القرار، وعملية التحسين للعثور على المستوى الفائق الأمثل، والاستخدام المحتمل لوظائف kernel للتعامل مع قابلية الفصل غير الخطية، كلها مكونات مهمة في SVMs. يوفر فهم هذه الجوانب نظرة شاملة لكيفية عمل SVMs وتطبيقها في مهام التعلم الآلي المختلفة.
أسئلة وأجوبة أخرى حديثة بخصوص التعلم الآلي EITC/AI/MLP باستخدام Python:
- كيف يتم حساب المعلمة b في الانحدار الخطي (التقاطع y للخط الأفضل ملاءمة)؟
- ما هو الدور الذي تلعبه ناقلات الدعم في تحديد حدود القرار لـ SVM، وكيف يتم تحديدها أثناء عملية التدريب؟
- في سياق تحسين SVM، ما هي أهمية ناقل الوزن `w` والتحيز `b` وكيف يتم تحديدهما؟
- ما هو الغرض من طريقة "التصور" في تنفيذ SVM، وكيف تساعد في فهم أداء النموذج؟
- كيف تحدد طريقة "التنبؤ" في تطبيق SVM تصنيف نقطة البيانات الجديدة؟
- ما هو الهدف الأساسي لجهاز ناقل الدعم (SVM) في سياق التعلم الآلي؟
- كيف يمكن استخدام مكتبات مثل scikit-learn لتنفيذ تصنيف SVM في Python، وما هي الوظائف الرئيسية المعنية؟
- اشرح أهمية القيد (y_i (mathbf{x}_i cdot mathbf{w} + b) geq 1) في تحسين SVM.
- ما هو الهدف من مشكلة تحسين SVM وكيف يتم صياغتها رياضيًا؟
- ما هو دور معادلة المستوى الزائد (mathbf{x} cdot mathbf{w} + b = 0) في سياق أجهزة المتجهات الداعمة (SVM)؟
عرض المزيد من الأسئلة والأجوبة في التعلم الآلي EITC/AI/MLP باستخدام Python