این الگوریتم یکی از الگوریتمهای پرکاربرد و قدرتمند در یادگیری ماشین است که برای مسائل دستهبندی و رگرسیون استفاده میشود.
ماشین بردار پشتیبان (SVM)
1. تعریف SVM
- هدف اصلی ماشین بردار پشتیبان پیدا کردن یک فوقصفحه (Hyperplane) است که دادهها را به بهترین شکل ممکن به دو دسته مختلف تقسیم کند. این فوقصفحه در واقع یک خط یا صفحهای در فضای چندبعدی است که بیشترین فاصله (حاشیه) را از نزدیکترین نقاط هر دسته دارد. نقاطی که روی مرز حاشیه قرار میگیرند به عنوان بردارهای پشتیبان (Support Vectors) شناخته میشوند.
- در SVM، فوقصفحهای انتخاب میشود که حاشیه یا فاصله بین دستهها را بیشینه کند، تا دستهبندی با دقت بیشتری انجام شود.
2. ویژگیهای اصلی SVM
- فوقصفحه بهینه: فوقصفحهای که بیشترین فاصله را از نقاط نزدیک به مرز دستهبندی دارد به عنوان مرز تصمیمگیری انتخاب میشود.
- بردارهای پشتیبان: نقاطی که نزدیکترین فاصله را به فوقصفحه دارند، نقش کلیدی در ساخت این مرز تصمیمگیری ایفا میکنند و الگوریتم SVM تنها این نقاط را برای تعیین فوقصفحه بهینه استفاده میکند.
3. SVM غیرخطی و هستهها (Kernels)
- در برخی موارد، دادهها به صورت خطی قابل جداسازی نیستند. برای مثال، اگر دادهها در یک شکل دایرهای باشند، فوقصفحه خطی قادر به جداسازی آنها نیست. در چنین شرایطی از روشهای غیرخطی مانند هستهها (Kernels) استفاده میشود.
- هستهها به SVM کمک میکنند تا دادهها را به یک فضای با ابعاد بالاتر ببرد و در آنجا دادهها به شکل خطی جداسازی شوند. برخی از هستههای رایج عبارتند از:
- هسته خطی (Linear Kernel): برای دادههای خطی مناسب است.
- هسته چندجملهای (Polynomial Kernel): برای جداسازی غیرخطی پیچیدهتر استفاده میشود.
- هسته گاوسی یا RBF (Radial Basis Function): برای دادههای پیچیده و غیرخطی کاربرد زیادی دارد.
4. مزایا و معایب SVM
- مزایا:
- دقت بالا: به دلیل تمرکز بر بردارهای پشتیبان، الگوریتم SVM دقت بالایی در دستهبندی ارائه میدهد.
- قابلیت کار با دادههای پیچیده: با استفاده از هستهها، SVM میتواند دادههای غیرخطی را به خوبی دستهبندی کند.
- معایب:
- پیچیدگی محاسباتی بالا: SVM برای دادههای بزرگ و تعداد زیادی از ویژگیها زمانبر و نیازمند حافظه بالاست.
- حساسیت به تنظیم پارامترها: پارامترهای SVM (مثل نوع هسته و پارامترهای آن) به دقت بالایی نیاز دارند و تنظیم اشتباه آنها میتواند دقت مدل را کاهش دهد.
5. پیادهسازی SVM در پایتون
برای پیادهسازی SVM میتوانیم از کلاس SVC
در Scikit-Learn استفاده کنیم. در این مثال، یک مدل SVM برای دستهبندی دادهها پیادهسازی شده است:
pythonCopy codefrom sklearn.datasets import load_iris
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# بارگذاری دادهها
data = load_iris()
X, y = data.data, data.target
# تقسیم دادهها به آموزش و تست
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# تعریف و آموزش مدل SVM با هسته RBF
model = SVC(kernel='rbf', gamma='scale', C=1.0) # پارامترهای gamma و C قابل تنظیم هستند
model.fit(X_train, y_train)
# پیشبینی و ارزیابی مدل
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
- در این مثال از هسته RBF استفاده کردهایم، که برای دادههای غیرخطی مناسب است.
- پارامتر
C
یک پارامتر مهم در SVM است که بر میزان انعطافپذیری فوقصفحه تأثیر میگذارد؛ هرچه مقدار آن بزرگتر باشد، مدل تمایل به بیشبرازش دارد. - پارامتر
gamma
نیز مشخص میکند که تا چه حد دادههای نزدیک به بردارهای پشتیبان روی تصمیمگیری مدل تأثیر بگذارند.
6. تنظیم پارامترهای SVM
- C (پنالتی خطا): پارامتر C نشاندهنده میزان خطایی است که مدل اجازه میدهد؛ مقدار بزرگتر برای C به مدل اجازه نمیدهد خطاهای زیادی داشته باشد و میتواند منجر به بیشبرازش شود.
- gamma: این پارامتر در هستههای غیرخطی مانند RBF و پلینومیا مورد استفاده قرار میگیرد و مشخص میکند که تا چه حد نمونههای نزدیک به بردارهای پشتیبان بر روی مرز تصمیمگیری تأثیر بگذارند.
فعالیت پیشنهادی:
- از دادههایی با توزیع غیرخطی استفاده کنید و الگوریتم SVM را با هستههای مختلف آزمایش کنید. پارامترهای
C
وgamma
را تغییر دهید و ببینید چگونه دقت مدل تغییر میکند.
الگوریتمهای پیشرفتهتر
اکنون که با چند الگوریتم کلیدی آشنا شدید، در صورت تمایل میتوانیم به سراغ الگوریتمهای پیشرفتهتری مثل شبکههای عصبی مصنوعی (Artificial Neural Networks) برویم که در یادگیری عمیق (Deep Learning) کاربرد دارند.
آخرین دیدگاهها