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

بفرست برای دوستت
Telegram
WhatsApp
دسته‌بندی داده‌ها با استفاده از SVMها در پایتون

فهرست مطالب

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

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

 

ماشین بردار پشتیبان (SVM) چیست؟

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

 

  مقابله با داده‌ های نامتوازن با روش‌های SMOTE و Near Miss در پایتون

SVM چه کاری انجام می‌دهد؟

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

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

پیش‌نیازها:

Numpy، Pandas، matplot-lib، scikit-learn.

حالا بیایید نگاهی به یک مثال از دسته‌ بندی داده‌ ها با SVM ها در پایتون بیندازیم. اول باید یک مجموعه داده ایجاد کنیم. 

# importing scikit learn with make_blobs
from sklearn.datasets import make_blobs

# creating datasets X containing n_samples
# Y containing two classes
X, Y = make_blobs(n_samples=500, centers=2,
				random_state=0, cluster_std=0.40)
import matplotlib.pyplot as plt
# plotting scatters 
plt.scatter(X[:, 0], X[:, 1], c=Y, s=50, cmap='spring');
plt.show() 

دسته‌ بندی داده‌ ها با SVM ها در پایتون

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

# creating linspace between -1 to 3.5 
xfit = np.linspace(-1, 3.5)

# plotting scatter
plt.scatter(X[:, 0], X[:, 1], c=Y, s=50, cmap='spring')

# plot a line between the different sets of data
for m, b, d in [(1, 0.65, 0.33), (0.5, 1.6, 0.55), (-0.2, 2.9, 0.2)]:
	yfit = m * xfit + b
	plt.plot(xfit, yfit, '-k')
	plt.fill_between(xfit, yfit - d, yfit + d, edgecolor='none', 
	color='#AAAAAA', alpha=0.4)

plt.xlim(-1, 3.5);
plt.show()

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

# importing required libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# reading csv file and extracting class column to y.
x = pd.read_csv("C:\...\cancer.csv")
a = np.array(x)
y = a[:,30] # classes having 0 and 1

# extracting two features
x = np.column_stack((x.malignant,x.benign))

# 569 samples and 2 features
x.shape 

print (x),(y)

 خروجی:

  رگرسیون خطی چندگانه در پایتون

# importing required libraries

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

 

# reading csv file and extracting class column to y.

x = pd.read_csv(“C:\…\cancer.csv”)

a = np.array(x)

y = a[:,30] # classes having 0 and 1

 

# extracting two features

x = np.column_stack((x.malignant,x.benign))

 

# 569 samples and 2 features

x.shape 

 

print (x),(y)

 

 

استفاده از ماشین بردار پشتیبان

حالا ما یک دسته‌بند ماشین بردار پشتیبانی را بر روی این نقاط تنظیم خواهیم کرد. در حالی که جزئیات ریاضی مدل احتمالاتی جالب هستند، ما آن‌ها را برای خواندن در جای دیگری قرار می‌دهیم. در عوض، فقط الگوریتم scikit-learn را به عنوان یک جعبه سیاه در نظر می‌گیریم که کار فوق را انجام می‌دهد. 

# import support vector classifier 
# "Support Vector Classifier"
from sklearn.svm import SVC 
clf = SVC(kernel='linear') 

# fitting x samples and y classes 
clf.fit(x, y) 

 

پس از تنظیم، این مدل می‌تواند برای پیش‌بینی مقادیر جدید استفاده شود: 

clf.predict([[120, 990]])

clf.predict([[85, 550]])

 خروجی:

array([ 0.])
array([ 1.])

بیایید نگاهی به نمودار بیندازیم تا ببینیم چگونه نمایش داده می‌شود.

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

Rating 5.00 from 1 votes

لیست دروس دوره

آموزش پیشنهادی و مکمل

اگر سوالی در مورد این درس دارید، در کادر زیر بنویسید.

guest
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
سبد خرید

جشنواره دوره جامع متخصص علم داده شروع شد

برای دیدن نوشته هایی که دنبال آن هستید تایپ کنید.
×