خانه » اموزش عملی ماشین بردار پشتیبان(SVM) با پایتون

اموزش عملی ماشین بردار پشتیبان(SVM) با پایتون

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

  • SVM چیست؟
  • SVM ها چگونه کار می کنند؟
  • نحوه اجرای SVM در پایتون.
ماشین بردار پشتیبان

الگوریتم طبقه بندی SVM داده ها را به فضای n بعدی می برد. بدین صورت که اگر داده ها ۱۰ بعد یا ستون داشته باشد آن ها را در فضای ۱۰ بعدی ترسیم می کند. از آن جایی که ما نمی توانیم درکی از از آن فضا داشته باشیم داده ها را در یک فضای ۲ بعدی نمایش می دهیم. سپس الگوریتم با یک ابرصفحه(hyperplan) داده ها از یک دیگر جدا می کند.(در مثال ۲ بعدی یک خط این کار را انجام می دهد.)  سوالی که ایجاد می شود این آن است که بیشتر خط یا صفحه می توان در فضا ایجاد کرد. چه خطی باید توسط الگوریتم رسم شود؟ این ابر صفحه باید بتواند بیشتر فاصله با نمونه ها را داشته باشد به طوری که آن ها را به دسته های مجزا تقسیم کند. مانند شکل بالا.

بردارهای پشتیبانی

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

ابرصفحه(hyperplan)

ابر صفحه یک بردار پشتبان است که فاصله اش از هر طرف بیشنیه است.

حاشیه(Margin)

فاصله بین دورترین بردار های پشتیبان است

نحوه کارکرد SVM

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

  • چندین خط رسم می کند تا بتواند داده ها را به بهرین روش تقسیم کند.

اکنون چندین خط برای انتخاب وجود دارد. کدام یک را باید انتخاب کرد. طبیعتا خطی که بتواند بیشترین فاصله را با نمونه ها ایجاد کند. در اینجا خط B این ویژگی را دارد پس به عنوان خط مورد نظر انتخاب می شود.

  • در مرحله بعدی چندین خط در راستای خط انتخاب شده کشیده می شود تا بتوانیم بیشرین فاصله از نمونه ها را پیدا کنیم و آن خط به عنوان جدا کنند یا ابرصفحه مورد نظر انتخاب شود.

هسته SVM

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

پیاده سازی SVM با استفاده از پایتون

حال که با مفاهیم الگوریتم ماشین بردار پشتیبان آشنا شدیم با یک مثال عملی با زبان پایتون آن را پیاده ساری می کنیم.

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn.metrics import accuracy_score

اضافه کردن مجموعه داده

cancer = datasets.load_breast_cancer()
print("Features: ", cancer.feature_names)
print("\nLabels: ", cancer.target_names)

خروجی به صورت زیر خواهد بود

Features:  ['mean radius' 'mean texture' 'mean perimeter' 'mean area'
'mean smoothness' 'mean compactness' 'mean concavity'
'mean concave points' 'mean symmetry' 'mean fractal dimension'
'radius error' 'texture error' 'perimeter error' 'area error'
'smoothness error' 'compactness error' 'concavity error'
'concave points error' 'symmetry error' 'fractal dimension error'
'worst radius' 'worst texture' 'worst perimeter' 'worst area'
'worst smoothness' 'worst compactness' 'worst concavity'
'worst concave points' 'worst symmetry' 'worst fractal dimension']
Labels: ['malignant' 'benign']

این جمموعه داده یک طبقه بندی باینری است. در واقه هر نمونه اگر بیماری داشته باشد ۱ و اگر نداشته باشد ۰ خواهد بود.

print(cancer.target[:50]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 1]}]}]

حال داده ها را به دو قسمت تقسیم می کنیم تا عمل مدل سازی انجام شود.

X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, test_size=0.25)
ساخت مدل

برای ساخت مدل با SVM از کتابخانه sklearn استفاده می کنیم. روند ساخت مدل به صورت زیر است.

clf = svm.SVC(kernel='linear') # Linear Kernel
clf.fit(X_train, y_train)

برای پیش بینی داده ها هم به صورت زیر عمل می کنیم.

y_pred = clf.predict(X_test)
ارزیابی

برای ارزیابی مدل از داده های test که قبلا از داده ها جدا شده اند استفاده می کنیم به صورت که ابتدا پیش بینی می کنیم با مدل ساخته شده چه خروجی بدست می اید. سپس آن را مقدار test مقایسه می کنیم.

print("Accuracy:", round(accuracy_score(y_test, y_pred)*100),'%')
Accuracy: 94.0 %

نتیجه خروجی ۹۴٪ است.

نتیجه


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

به همین ترتیب شما هم می توانید از مجموعه داده های دیگر برای طبقه بندی داده ها استفاده کنید.

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

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

به بالای صفحه بردن