تعد أجهزة المتجهات الداعمة (SVM) فئة قوية ومتعددة الاستخدامات من خوارزميات التعلم الآلي الخاضعة للإشراف وفعالة بشكل خاص في مهام التصنيف. توفر المكتبات مثل scikit-learn in Python تطبيقات قوية لـ SVM، مما يجعلها في متناول الممارسين والباحثين على حدٍ سواء. ستوضح هذه الاستجابة كيف يمكن استخدام scikit-learn لتنفيذ تصنيف SVM، مع تفصيل الوظائف الرئيسية المعنية وتقديم أمثلة توضيحية.
مقدمة إلى SVM
تعمل أجهزة المتجهات الداعمة من خلال العثور على المستوى الفائق الذي يفصل البيانات بشكل أفضل إلى فئات مختلفة. في الفضاء ثنائي الأبعاد، يكون هذا المستوى الزائد مجرد خط، ولكن في الأبعاد الأعلى، يصبح مستوى أو مستوى فائقًا. المستوى الفائق الأمثل هو الذي يعمل على تعظيم الهامش بين الفئتين، حيث يتم تعريف الهامش على أنه المسافة بين المستوى الفائق وأقرب نقاط البيانات من أي من الفئتين، والمعروفة باسم متجهات الدعم.
Scikit-Learn وSVM
Scikit-learn هي مكتبة Python قوية للتعلم الآلي توفر أدوات بسيطة وفعالة لاستخراج البيانات وتحليلها. إنه مبني على NumPy وSciPy وmatplotlib. توفر الوحدة `svm` الموجودة في scikit-learn إمكانية تنفيذ خوارزميات SVM.
وظائف رئيسية
1. `svm.SVC`: هذه هي الفئة الرئيسية لتنفيذ التصنيف باستخدام SVM. SVC لتقف على تصنيف ناقلات الدعم.
2. `ملائم`: تستخدم هذه الطريقة لتدريب النموذج على البيانات المعطاة.
3. `توقع`: بمجرد تدريب النموذج، يتم استخدام هذه الطريقة للتنبؤ بتسميات الفئة لبيانات الاختبار المحددة.
4. `النتيجة`: تستخدم هذه الطريقة لتقييم دقة النموذج على بيانات الاختبار.
5. `شبكة البحث CV`: يُستخدم هذا لضبط المعلمات الفائقة للعثور على أفضل المعلمات لنموذج SVM.
تنفيذ تصنيف SVM باستخدام scikit-Learn
دعونا نفكر في الخطوات المتبعة في تنفيذ تصنيف SVM باستخدام scikit-learn.
الخطوة 1: استيراد المكتبات
أولاً، قم باستيراد المكتبات اللازمة:
python import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from sklearn.metrics import classification_report, confusion_matrix
الخطوة 2: تحميل مجموعة البيانات
لأغراض العرض التوضيحي، سنستخدم مجموعة بيانات Iris، وهي مجموعة بيانات معروفة في مجتمع التعلم الآلي:
python # Load the Iris dataset iris = datasets.load_iris() X = iris.data y = iris.target
الخطوة 3: تقسيم مجموعة البيانات
قم بتقسيم مجموعة البيانات إلى مجموعات تدريب واختبار:
python # Split the data into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
الخطوة 4: تحجيم الميزة
يعد تحجيم الميزات مهمًا لـ SVM لأنه حساس لمقياس ميزات الإدخال:
python # Standardize features by removing the mean and scaling to unit variance scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test)
الخطوة 5: تدريب نموذج SVM
قم بإنشاء مثيل لمصنف SVM وقم بتدريبه على بيانات التدريب:
python # Create an instance of SVC and fit the data svc = SVC(kernel='linear', C=1.0) svc.fit(X_train, y_train)
هنا، استخدمنا نواة خطية وقمنا بتعيين معلمة التنظيم `C` على 1.0. تحدد معلمة kernel نوع المستوى الفائق المستخدم لفصل البيانات. تشمل الحبات الشائعة "الخطي" و"متعدد الحدود" و"rbf" (وظيفة الأساس الشعاعي) و"السيني".
الخطوة الخامسة: عمل التوقعات
استخدم النموذج المدرب لإجراء تنبؤات على بيانات الاختبار:
python # Predict the class labels for the test set y_pred = svc.predict(X_test)
الخطوة 7: تقييم النموذج
قم بتقييم أداء النموذج باستخدام مقاييس مثل مصفوفة الارتباك وتقرير التصنيف:
python # Evaluate the model print(confusion_matrix(y_test, y_pred)) print(classification_report(y_test, y_pred))
توفر مصفوفة الارتباك ملخصًا لنتائج التنبؤ، بينما يتضمن تقرير التصنيف الدقة والاستدعاء ودرجة F1 والدعم لكل فئة.
ضبط المعلمة الفائقة باستخدام GridSearchCV
يعد ضبط المعلمة الفائقة أمرًا ضروريًا لتحسين أداء نموذج SVM. يمكن استخدام GridSearchCV الخاص بـ Scikit-learn لإجراء بحث شامل عبر شبكة معلمات محددة:
python from sklearn.model_selection import GridSearchCV # Define the parameter grid param_grid = { 'C': [0.1, 1, 10, 100], 'gamma': [1, 0.1, 0.01, 0.001], 'kernel': ['rbf'] } # Create a GridSearchCV instance grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=2) grid.fit(X_train, y_train) # Print the best parameters and the corresponding score print("Best parameters found: ", grid.best_params_) print("Best score: ", grid.best_score_) # Use the best estimator to make predictions grid_predictions = grid.predict(X_test) # Evaluate the model with the best parameters print(confusion_matrix(y_test, grid_predictions)) print(classification_report(y_test, grid_predictions))
في هذا المثال، بحثنا في شبكة من القيم لـ "C" و"gamma" باستخدام نواة RBF. يقوم مثيل `GridSearchCV` بإعادة ملاءمة النموذج بأفضل المعلمات التي تم العثور عليها أثناء البحث.
تصور حدود القرار
للحصول على فهم أفضل لكيفية عمل مصنف SVM، غالبًا ما يكون من المفيد تصور حدود القرار. يكون هذا أكثر وضوحًا في مساحة الميزة ثنائية الأبعاد. فيما يلي مثال باستخدام مجموعة البيانات الاصطناعية:
python from sklearn.datasets import make_blobs # Generate a synthetic dataset X, y = make_blobs(n_samples=100, centers=2, random_state=6) # Fit the SVM model svc = SVC(kernel='linear', C=1.0) svc.fit(X, y) # Create a mesh to plot the decision boundary h = .02 x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) # Predict the class for each point in the mesh Z = svc.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) # Plot the decision boundary plt.contourf(xx, yy, Z, alpha=0.8) plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o') plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.title('SVM Decision Boundary') plt.show()
ينشئ الكود أعلاه مجموعة بيانات اصطناعية من فئتين، ويناسب نموذج SVM مع نواة خطية، ويصور حدود القرار. يتم استخدام وظيفة "contourf" لرسم حدود القرار، ويوضح المخطط المبعثر نقاط البيانات. يوفر Scikit-learn واجهة شاملة وسهلة الاستخدام لتنفيذ تصنيف SVM في Python. تعد الوظائف الرئيسية مثل `svm.SVC` و`fit` و`predict` و`score` ضرورية لبناء نماذج SVM وتقييمها. يؤدي ضبط المعلمات الفائقة باستخدام "GridSearchCV" إلى تحسين أداء النموذج من خلال العثور على المعلمات المثالية. يمكن أن يوفر تصور حدود القرار رؤى قيمة حول سلوك المصنف. باتباع هذه الخطوات، يمكن تنفيذ تصنيف SVM وتحسينه بشكل فعال باستخدام scikit-learn.
أسئلة وأجوبة أخرى حديثة بخصوص التعلم الآلي EITC/AI/MLP باستخدام Python:
- كيف يتم حساب المعلمة b في الانحدار الخطي (التقاطع y للخط الأفضل ملاءمة)؟
- ما هو الدور الذي تلعبه ناقلات الدعم في تحديد حدود القرار لـ SVM، وكيف يتم تحديدها أثناء عملية التدريب؟
- في سياق تحسين SVM، ما هي أهمية ناقل الوزن `w` والتحيز `b` وكيف يتم تحديدهما؟
- ما هو الغرض من طريقة "التصور" في تنفيذ SVM، وكيف تساعد في فهم أداء النموذج؟
- كيف تحدد طريقة "التنبؤ" في تطبيق SVM تصنيف نقطة البيانات الجديدة؟
- ما هو الهدف الأساسي لجهاز ناقل الدعم (SVM) في سياق التعلم الآلي؟
- اشرح أهمية القيد (y_i (mathbf{x}_i cdot mathbf{w} + b) geq 1) في تحسين SVM.
- ما هو الهدف من مشكلة تحسين SVM وكيف يتم صياغتها رياضيًا؟
- كيف يعتمد تصنيف مجموعة الميزات في SVM على علامة دالة القرار (text{sign}(mathbf{x}_i cdot mathbf{w} + b))؟
- ما هو دور معادلة المستوى الزائد (mathbf{x} cdot mathbf{w} + b = 0) في سياق أجهزة المتجهات الداعمة (SVM)؟
عرض المزيد من الأسئلة والأجوبة في التعلم الآلي EITC/AI/MLP باستخدام Python