آموزش الگوریتم SVM (ماشین بردار پشتیبان) — همراه با مثال و پیاده سازی در پایتون

تصویر شاخص الگوریتم SVM

ماشین بردار پشتیبان Support Vector Machine (SVM) که به الگوریتم SVM معروف است یک الگوریتم قدرتمند یادگیری ماشین است. این الگوریتم به طور گسترده برای طبقه‌بندی‌های خطی و غیرخطی، همچنین برای رگرسیون و تشخیص نقاط پرت استفاده می‌شود. الگوریتم SVM بسیار انعطاف‌پذیر است و آن را برای کاربردهای متنوعی مانند طبقه‌بندی متن، طبقه‌بندی تصاویر، تشخیص اسپم، شناسایی دست‌خط، تحلیل بیان ژن‌ها، تشخیص چهره و شناسایی ناهنجاری‌ها مناسب می‌سازد. در این مقاله، ما الگوریتم ماشین بردار پشتیبان (SVM)، کاربردهای آن و نحوه‌ی عملکرد موثر آن در طبقه‌بندی‌های خطی و غیرخطی، رگرسیون و تشخیص نقاط پرت را بررسی خواهیم کرد.

الگوریتم SVM چیست؟

ماشین بردار پشتیبان (SVM) یک الگوریتم یادگیری ماشین نظارت‌شده «supervised machine learning» است که برای وظایف طبقه‌بندی و رگرسیون به کار می‌رود. اگرچه می‌توان از آن برای مسائل رگرسیون استفاده کرد، اما SVM بیشتر برای وظایف طبقه‌بندی مناسب است. هدف اصلی الگوریتم SVM این است که بهترین ابرصفحه را در فضای n-بعدی شناسایی کند که بتواند به طور مؤثر نقاط داده را در کلاس‌های مختلف فضای ویژگی‌ها جدا کند. این الگوریتم اطمینان می‌دهد که فاصله (حاشیه) بین نزدیک‌ترین نقاط از کلاس‌های مختلف که به عنوان بردارهای پشتیبان شناخته می‌شوند، به حداکثر می‌رسد.

بعد ابرصفحه به تعداد ویژگی‌ها بستگی دارد. به عنوان مثال، اگر دو ویژگی ورودی وجود داشته باشد، ابرصفحه یک خط ساده است و اگر سه ویژگی ورودی وجود داشته باشد، ابرصفحه به یک صفحه دو‌بعدی تبدیل می‌شود. با افزایش تعداد ویژگی‌ها به بیش از سه، پیچیدگی تجسم ابرصفحه نیز افزایش می‌یابد.

در نظر بگیرید دو متغیر مستقل x1 و x2 و یک متغیر وابسته که به صورت یک دایره آبی یا قرمز نشان داده شده است.

در این سناریو، ابرصفحه یک خط است زیرا ما با دو ویژگی (x1 و x2) کار می‌کنیم. خطوط (یا ابرصفحه‌های) متعددی وجود دارند که می‌توانند نقاط داده را جدا کنند. چالش این است که بهترین ابرصفحه را تعیین کنیم که حاشیه‌ی جداسازی بین دایره‌های قرمز و آبی را به حداکثر برساند.

تصویری از نمودار داده ها در الگوریتم SVM

از شکل بالا به‌وضوح مشخص است که خطوط متعددی وجود دارند (در اینجا ابرصفحه ما یک خط است چون تنها دو ویژگی ورودی x1 و x2 را در نظر گرفته‌ایم) که می‌توانند نقاط داده ما را جدا کرده یا طبقه‌بندی بین دایره‌های قرمز و آبی را انجام دهند. بنابراین، چگونه بهترین خط یا به طور کلی بهترین ابرصفحه‌ای را که نقاط داده ما را جدا می‌کند، انتخاب کنیم؟

الگوریتم SVM چگونه کار می‌کند؟

یک انتخاب منطقی برای بهترین ابرصفحه در ماشین بردار پشتیبان (SVM) ابرصفحه‌ای است که حاشیه جداسازی بین دو کلاس را به حداکثر برساند. ابرصفحه با حداکثر حاشیه که به آن «حاشیه سخت» نیز گفته می‌شود، بر اساس بیشینه‌سازی فاصله بین ابرصفحه و نزدیک‌ترین نقطه داده در هر طرف انتخاب می‌شود.

تصویر از انتخاب ابرصفحه در الگوریتم SVM

بنابراین، ابرصفحه‌ای را انتخاب می‌کنیم که فاصله آن تا نزدیک‌ترین نقطه داده در هر طرف به حداکثر برسد. اگر چنین ابرصفحه‌ای وجود داشته باشد، به آن «ابرصفحه با حداکثر حاشیه» یا «حاشیه سخت» گفته می‌شود. بنابراین، از شکل بالا، ابرصفحه L2 را انتخاب می‌کنیم. حال، یک سناریو مانند شکل زیر را در نظر بگیرید.

انتخاب هایپرپلان برای داده ها با پرت

در اینجا یک توپ آبی در مرز توپ‌های قرمز قرار دارد. پس الگوریتم SVM چگونه داده‌ها را طبقه‌بندی می‌کند؟ ساده است! توپ آبی در مرز توپ‌های قرمز یک نقطه پرت از دسته توپ‌های آبی است. الگوریتم SVM توانایی این را دارد که نقاط پرت را نادیده بگیرد و بهترین ابرصفحه‌ای را پیدا کند که حاشیه را به حداکثر برساند. SVM نسبت به نقاط پرت مقاوم است.

هایپرپلین که بهینه ترین آنهاست

در این نوع نقاط داده، کاری که SVM انجام می‌دهد این است که حداکثر حاشیه را همانند مجموعه داده‌های قبلی پیدا می‌کند و همراه با آن، هر بار که نقطه‌ای از حاشیه عبور کند، جریمه‌ای اضافه می‌کند. بنابراین، حاشیه‌ها در این موارد به عنوان حاشیه‌های نرم شناخته می‌شوند. هنگامی که یک حاشیه نرم برای مجموعه داده وجود دارد، SVM سعی می‌کند تابع هزینه (۱/حاشیه+λ∑جریمه) را به حداقل برساند. جریمه‌ی لبه (hinge loss) یک نوع جریمه‌ی معمولاً استفاده‌شده است. اگر هیچ نقضی وجود نداشته باشد، جریمه لبه صفر است. در صورت وجود نقض‌ها، جریمه لبه متناسب با فاصله نقض محاسبه می‌شود.

تا اینجا درباره داده‌های خطی که توسط یک خط مستقیم یا خطی جدا می‌شوند صحبت می‌کردیم (گروه توپ‌های آبی و قرمز با یک خط مستقیم قابل تفکیک بودند). اما اگر داده‌ها به‌صورت خطی قابل تفکیک نباشند، چه کاری باید انجام داد؟

مجموعه داده 1 بعدی اصلی برای طبقه بندی

فرض کنید داده‌های ما به شکلی که در تصویر بالا نشان داده شده است باشد. SVM این مشکل را با ایجاد یک متغیر جدید به کمک یک هسته (Kernel) حل می‌کند. نقطه‌ای مانند \({x_i}\) را روی خط در نظر می‌گیریم و متغیر جدید \({y_i}\) را به عنوان تابعی از فاصله از مبدا \(o\) ایجاد می‌کنیم. اگر این متغیر را ترسیم کنیم، نموداری مشابه شکل زیر به دست می‌آوریم.

نگاشت داده های 1 بعدی به 2 بعدی برای اینکه بتوانیم دو کلاس را از هم جدا کنیم

در این حالت، متغیر جدید \({y}\) به عنوان تابعی از فاصله از مبدا ایجاد می‌شود. تابع غیرخطی که یک متغیر جدید ایجاد می‌کند، به عنوان هسته (Kernel) شناخته می‌شود.

اصطلاحات الگوریتم SVM

  • ابرصفحه (Hyperplane): ابرصفحه مرز تصمیم‌گیری است که برای جدا کردن نقاط داده از کلاس‌های مختلف در فضای ویژگی‌ها استفاده می‌شود. برای طبقه‌بندی خطی، این معادله به صورت wx+b=0 نمایش داده می‌شود.
  • بردارهای پشتیبان (Support Vectors): بردارهای پشتیبان نزدیک‌ترین نقاط داده به ابرصفحه هستند. این نقاط در تعیین ابرصفحه و حاشیه در الگوریتم SVM نقش اساسی دارند.
  • حاشیه (Margin): حاشیه فاصله بین بردار پشتیبان و ابرصفحه را نشان می‌دهد. هدف اصلی الگوریتم SVM حداکثرسازی این حاشیه است، زیرا حاشیه وسیع‌تر معمولاً منجر به عملکرد بهتر در طبقه‌بندی می‌شود.
  • هسته (Kernel): هسته یک تابع ریاضی است که در SVM برای نگاشت داده‌های ورودی به فضای ویژگی با بعد بالاتر استفاده می‌شود. این کار به SVM اجازه می‌دهد تا در مواردی که داده‌ها در فضای اصلی به‌صورت خطی قابل تفکیک نیستند، ابرصفحه مناسب را پیدا کند. توابع هسته متداول شامل هسته خطی، چندجمله‌ای، تابع پایه شعاعی (RBF) و سیگموئید هستند.
  • حاشیه سخت (Hard Margin): حاشیه سخت به ابرصفحه با حداکثر حاشیه اشاره دارد که داده‌های کلاس‌های مختلف را به‌طور کامل و بدون خطا از هم جدا می‌کند.
  • حاشیه نرم (Soft Margin): زمانی که داده‌ها شامل نقاط پرت باشند یا به‌طور کامل قابل تفکیک نباشند، SVM از تکنیک حاشیه نرم استفاده می‌کند. این روش متغیرهای اضافی به نام متغیرهای لغزش را برای هر نقطه داده معرفی می‌کند تا اجازه برخی خطاها را بدهد و در عین حال بین حداکثرسازی حاشیه و حداقل‌سازی نقض‌ها تعادل برقرار کند.
  • C: پارامتر C در SVM یک ضریب تنظیم‌کننده است که بین حداکثرسازی حاشیه و جریمه برای خطاهای طبقه‌بندی تعادل برقرار می‌کند. مقدار بالای C جریمه بیشتری برای نقض حاشیه اعمال می‌کند و منجر به حاشیه کوچکتر اما خطاهای کمتر می‌شود.
  • جریمه لبه (Hinge Loss): جریمه لبه یک تابع هزینه متداول در SVM‌ها است. این جریمه برای نقاطی که به اشتباه طبقه‌بندی شده‌اند یا باعث نقض حاشیه می‌شوند اعمال می‌شود و معمولاً با یک ترم تنظیم‌کننده در تابع هدف ترکیب می‌شود.
  • مسئله دوگانه (Dual Problem): مسئله دوگانه در SVM شامل حل مقادیر لاگرانژ مرتبط با بردارهای پشتیبان است. این فرموله‌سازی امکان استفاده از ترفند هسته (kernel trick) و محاسبات کارآمدتر را فراهم می‌کند.

فرمول‌های ریاضی الگوریتم SVM

یک مسئله طبقه بندی باینری را با دو کلاس در نظر بگیرید که به صورت +۱ و -۱ برچسب گذاری شده اند. ما یک مجموعه داده آموزشی داریم که شامل بردارهای ویژگی ورودی X و برچسب‌های کلاس مربوطه آن‌ها Y است.

معادله ابر صفحه خطی را می توان به صورت زیر نوشت:

$${w^T}x + b = 0$$

بردار \(w\) نشان دهنده بردار نرمال به ابر صفحه است. یعنی جهت عمود بر ابر صفحه. پارامتر \(b\) در معادله نشان دهنده افست یا فاصله ابر صفحه از مبدا در امتداد بردار نرمال \(w\) است.

فاصله بین نقطه داده \({x_i}\) و مرز تصمیم را می توان به صورت زیر محاسبه کرد:

$${d_i} = {{{w^T}{x_i} + b} \over {||w||}}$$

که در آن \(||w||\) نرم اقلیدسی بردار وزن \(w\) را نشان می دهد. نرم اقلیدسی بردار نرمال \(w\) برای طبقه بندی کننده SVM خطیبه صورت زی محاسبه می‌شود:

$$\hat y = \{ _{0:{w^T}x + b < 0}^{1:{w^T}x + b \ge 0}$$

بهینه سازی:

  • برای طبقه بندی کننده SVM خطی حاشیه سخت:

$$minimize{1 \over 2}{w^T}w = minimize{1 \over 2}||w|{|^2}$$

$${y_i}({w^T}{x_i} + b) \ge 1$$

متغیر یا برچسب هدف برای نمونه آموزشی \(i\)ام با نماد \({t_i}\) در این عبارت نشان داده می شود. و \({t_i} = -1\) برای رخدادهای منفی (هنگامی که {y_i} = 0) و {t_i} = 1 نمونه های مثبت (وقتی {y_i} = 1) به ترتیب. زیرا ما به مرز تصمیمی نیاز داریم که محدودیت را برآورده کند: \({t_i}({w^T}{x_i} + b) \ge 1\)

  • برای طبقه بندی کننده SVM خطی حاشیه نرم:

$$\min imize{1 \over 2}{w^T}w + C\sum\limits_{i = 1}^m {{\partial _i}} $$

$${y_i}({w^T}{x_i} + b) \ge 1 – {\partial _i}and{\partial _i} \ge 0$$

انواع ماشین بردار پشتیبان

انواع ماشین بردار پشتیبان (SVM) بر اساس نوع مرز تصمیم‌گیری، ماشین‌های بردار پشتیبان (SVM) به دو بخش اصلی تقسیم می‌شوند:

  • SVM خطی: SVMهای خطی از یک مرز تصمیم‌گیری خطی برای جدا کردن نقاط داده از کلاس‌های مختلف استفاده می‌کنند. هنگامی که داده‌ها به‌طور دقیق با یک خط مستقیم (در فضای دو بعدی) یا یک ابرصفحه (در فضاهای با ابعاد بالاتر) قابل تفکیک باشند، SVMهای خطی بسیار مناسب هستند. این ابرصفحه به‌گونه‌ای انتخاب می‌شود که حداکثر فاصله یا حاشیه را بین کلاس‌ها ایجاد کند و مرز تصمیم‌گیری را تشکیل می‌دهد.
  • SVM غیرخطی: SVM غیرخطی زمانی استفاده می‌شود که داده‌ها با یک خط مستقیم (در فضای دو بعدی) قابل جدا شدن نباشند. با استفاده از توابع کرنل، SVMهای غیرخطی می‌توانند داده‌های غیرقابل تفکیک خطی را پردازش کنند. این توابع کرنل، داده‌های ورودی اولیه را به یک فضای ویژگی با ابعاد بالاتر تبدیل می‌کنند، جایی که نقاط داده به‌صورت خطی قابل تفکیک هستند. در این فضای تغییر یافته، یک SVM خطی برای پیدا کردن مرز تصمیم‌گیری غیرخطی به کار گرفته می‌شود.

توابع کرنل معروف در SVM

توابع کرنل معروف در SVM کرنل SVM یک تابع است که فضای ورودی با ابعاد پایین را به فضای با ابعاد بالاتر تبدیل می‌کند، یعنی مسائل غیرقابل تفکیک را به مسائل قابل تفکیک تبدیل می‌کند. این ویژگی بیشتر در مسائل تفکیک غیرخطی کاربرد دارد. به زبان ساده، کرنل تبدیل‌های پیچیده‌ای روی داده‌ها انجام می‌دهد و سپس فرایند جدا کردن داده‌ها بر اساس برچسب‌ها یا خروجی‌های تعریف‌شده را پیدا می‌کند.

$$Linear:K(w,b) = {w^T}x + b$$

$$Polynomial:K(w,b) = {(\Upsilon {w^T}x + b)^N}$$

$$GaussianRBF:K(w,b) = \exp ( – \Upsilon ||{x_i} – {x_j}|{|^n})$$

$$Sigmoid:K({x_i},{x_j}) = \tanh (\alpha x_i^T{x_j} + b)$$

فلوچارت الگوریتم SVM

فلوچارت الگوریتم SVM

پیاده سازی الگوریتم SVM در پایتون

در این بخش از آموزش الگوریتم SVM به پیاده سازی آن در پایتون می پردازیم. این پیاده سازی برای تشخیص سرطان سینه با استفاده از دیتاست است. پیش‌بینی خوش‌خیم یا بدخیم بودن سرطان،  به پزشکان کمک می‌کند تا موارد بدخیم و خوش‌خیم را بر اساس ویژگی‌های مستقل شناسایی کنند.

مراحل پیاده سازی الگوریتم SVM

  • بارگذاری مجموعه داده‌های سرطان سینه از sklearn.datasets
  • جدا کردن ویژگی‌های ورودی و متغیر هدف
  • ساخت و آموزش مدل‌های طبقه‌بند SVM با استفاده از کرنل RBF
  • رسم نمودار پراکندگی ویژگی‌های ورودی
  • رسم مرز تصمیم‌گیری
  • رسم مرز تصمیم‌گیری (تکرار برای تأکید بر اهمیت)
# Load the important packages
from sklearn.datasets import load_breast_cancer
import matplotlib.pyplot as plt
from sklearn.inspection import DecisionBoundaryDisplay
from sklearn.svm import SVC

# Load the datasets
cancer = load_breast_cancer()
X = cancer.data[:, :2]
y = cancer.target

#Build the model
svm = SVC(kernel="rbf", gamma=0.5, C=1.0)
# Trained the model
svm.fit(X, y)

# Plot Decision Boundary
DecisionBoundaryDisplay.from_estimator(
        svm,
        X,
        response_method="predict",
        cmap=plt.cm.Spectral,
        alpha=0.8,
        xlabel=cancer.feature_names[0],
        ylabel=cancer.feature_names[1],
    )

# Scatter plot
plt.scatter(X[:, 0], X[:, 1], 
            c=y, 
            s=20, edgecolors="k")
plt.show()

خروجی:

طبقه بندی سرطان سینه با هسته SVM RBF

مزایای الگوریتم SVM

  • عملکرد در ابعاد بالا: SVM در فضاهای با ابعاد بالا عالی عمل می‌کند و برای کاربردهایی مانند طبقه‌بندی تصاویر و تحلیل بیان ژن مناسب است.
  • قابلیت غیرخطی: با استفاده از توابع کرنل مانند RBF و چندجمله‌ای، SVM به‌خوبی با روابط غیرخطی سازگار می‌شود.
  • مقاومت در برابر داده‌های پرت: ویژگی حاشیه نرم به SVM این امکان را می‌دهد که داده‌های پرت را نادیده بگیرد و استحکام آن در تشخیص اسپم و تشخیص ناهنجاری را افزایش می‌دهد.
  • پشتیبانی از طبقه‌بندی باینری و چندکلاسه: SVM برای هر دو نوع طبقه‌بندی دوتایی و چندکلاسه مؤثر است و در کاربردهایی مانند طبقه‌بندی متون مناسب است.
  • کارایی حافظه: SVM با تمرکز بر روی بردارهای پشتیبان، نسبت به الگوریتم‌های دیگر کارایی بهتری در مصرف حافظه دارد.

معایب الگوریتم SVM

  • آموزش کند: SVM می‌تواند برای مجموعه داده‌های بزرگ کند باشد و این موضوع در وظایف داده‌کاوی تأثیرگذار است.
  • پیچیدگی تنظیم پارامترها: انتخاب کرنل مناسب و تنظیم پارامترهایی مانند C نیاز به دقت دارد و می‌تواند بر الگوریتم‌های SVM تأثیر بگذارد.
  • حساسیت به نویز: SVM در مواجهه با مجموعه داده‌های پر نویز و کلاس‌های هم‌پوشان مشکل دارد و این امر می‌تواند کارایی آن را در شرایط واقعی محدود کند.
  • محدودیت در تفسیر: پیچیدگی ابرصفحه در ابعاد بالاتر باعث می‌شود SVM نسبت به مدل‌های دیگر کمتر قابل تفسیر باشد.
  • حساسیت به مقیاس‌بندی ویژگی‌ها: مقیاس‌بندی صحیح ویژگی‌ها ضروری است؛ در غیر این صورت، مدل‌های SVM ممکن است عملکرد ضعیفی داشته باشند.

نتیجه‌گیری

به‌طور کلی، ماشین‌های بردار پشتیبان (SVM) الگوریتم‌های قدرتمندی در یادگیری ماشین هستند که برای وظایف طبقه‌بندی و رگرسیون ایده‌آل هستند. آن‌ها در یافتن ابرصفحه بهینه برای جداسازی داده‌ها عالی عمل می‌کنند و برای کاربردهایی مانند طبقه‌بندی تصاویر و تشخیص ناهنجاری مناسب هستند.

قابلیت تطبیق SVM با استفاده از توابع کرنل، این الگوریتم را برای پردازش داده‌های خطی و غیرخطی مؤثر می‌سازد. با این حال، چالش‌هایی مانند تنظیم پارامترها و زمان آموزش کند در مجموعه داده‌های بزرگ باید در نظر گرفته شوند.

آشنایی با SVM برای دانشمندان داده بسیار مهم است، زیرا دقت پیش‌بینی و تصمیم‌گیری را در حوزه‌های مختلف، از جمله داده‌کاوی و هوش مصنوعی، بهبود می‌بخشد.


سوالات متداول


SVM چگونه در یادگیری ماشین کار می‌کند؟

SVM با پیدا کردن ابرصفحه‌ای که حداکثر حاشیه را برای جداسازی بهینه نقاط داده بین کلاس‌های مختلف دارد، کار می‌کند. این الگوریتم از بردارهای پشتیبان که نزدیک‌ترین نقاط داده به ابرصفحه هستند برای تعریف این مرز استفاده می‌کند.

مزایای کلیدی استفاده از SVM در یادگیری ماشین چیست؟

 SVMها برای داده‌های با ابعاد بالا مؤثر هستند، نسبت به داده‌های پرت مقاوم‌اند و به دلیل استفاده از توابع کرنل، توانایی پردازش روابط خطی و غیرخطی را دارند.

تفاوت بین SVM با حاشیه سخت و SVM با حاشیه نرم چیست؟

 SVM با حاشیه سخت کلاس‌ها را بدون خطای طبقه‌بندی به‌طور کامل جدا می‌کند، در حالی که یک SVM با حاشیه نرم اجازه می‌دهد برخی خطاهای طبقه‌بندی رخ دهد تا داده‌های پرت بهتر مدیریت شوند و توازنی بین حاشیه و جریمه‌ها ایجاد شود.

چه نوع توابع کرنلی در SVM استفاده می‌شوند؟

 توابع کرنل رایج در SVM شامل کرنل خطی، چندجمله‌ای، تابع پایه شعاعی (RBF)، و سیگموئید هستند که هر کدام داده‌های ورودی را برای جداسازی بهتر به فضاهای با ابعاد بالاتر نگاشت می‌کنند.

چه زمانی باید از SVM در داده‌کاوی استفاده کنم؟

از SVM در داده‌کاوی زمانی استفاده کنید که با مجموعه داده‌های پیچیده سر و کار دارید، به‌ویژه زمانی که نیاز به طبقه‌بندی داده‌های با ابعاد بالا، مرزهای غیرخطی یا مقاومت در برابر داده‌های پرت دارید.

میزان رضایتمندی
لطفاً میزان رضایت خودتان را از این مطلب با دادن امتیاز اعلام کنید.
[ امتیاز میانگین 3.7 از 3 نفر ]
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع و مراجع:
geeksforgeeks medium مجله پی استور

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

1 دیدگاه دربارهٔ «آموزش الگوریتم SVM (ماشین بردار پشتیبان) — همراه با مثال و پیاده سازی در پایتون»



برچسب‌ها:
یادگیری ماشین


پیمایش به بالا