data science, python, پایتون

ماشین بردار پشتیبان در پایتون (SVM in python)

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

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

الگوریتم ماشین بردار پشتیبان

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

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

برای پیاده سازی SVM در پایتون ما از کتابخانه sklearn استفاده خواهیم کرد. دیتایی که الگوریتم SVM را بر روی آن پیاده سازی خواهیم کرد، طبقه بندی قیمت موبایل (دانلود دیتاست) می‌باشد. دیتاست ما شامل دو هزار (2000) سطر و بیست (20) ستون می‌باشد. ستون‌های دیتاست ما به صورت زیر می‌باشد:

  • battery_power: کل انرژی باتری به mAh
  • blue: دارای بلوتوث می‌باشد یا خیر.
  • clock_speed: سرعتی که ریزپردازنده دستورالعمل ها را اجرا می کند.
  • dual_sim: تک سیم کارت و دو سیم کارت بودن موبایل
  • FC: مخفف Front Camera یا دوربین جلو بوده و مقدار این ستون به مگاپیکسل می‌باشد.
  • four_g: قابلیت g4 را دارد یا خیر.
  • int_memory: مخفف internal memory بوده و مقدار آن به گیگابایت می‌باشد.
  • m_dep: عرض تلفن همراه به سانتی متر (Mobile depth)
  • mobile_wt: وزن موبایل.
  • n_cores: تعداد هسته‌های پردازنده
  • Pc: مخفف Primary camera یا دوربین اصلی بوده و مقدار آن به مگاپیکسل است.
  • px_height: وضوح تصویر (ارتفاع)
  • px_width: وضوح تصویر (عرض)
  • ram: این ستون برای همه ما شفاف هستJ
  • sc_h: ارتفاع صفحه نمایش تلفن همراه در سانتی متر
  • sc_w: عرض صفحه تلفن همراه در سانتی متر
  • talk_time: طولانی ترین زمانی که یک بار شارژ باتری دوام می‌آورد (هنگام استفاده).
  • three_g: پشتیبانی از 3g
  • touch_screen: صفحه لمسی دارد یا خیر
  • wifi: پشتیبانی از wifi
  • price_range: رنج قیمت تلفن همراه. در این دیتاست تلفن‌های همراه در چهار (4) رنج قیمت  با توجه به قابلیت‌های موبایل قرار می‌گیرند.
    • رنج قیمت صفر به معنی قیمت پایین است.
    • رنج قیمت 1 به معنی قیمت متوسط است.
    • رنج قیمت 2 به معنی قیمت بالا است.
    • o        رنج قیمت 3 به معنی خیلی بالا می‌باشد.

 ابتدا دیتاست خود را وارد کد کرده و بر روی پیش پردازش می‌کنیم:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme()
mobile = pd.read_csv('MobilePrice.csv')

بخشی از دیتا به صورت زیر می‌باشد:

توابع describe و info را برای بدست آوردن اطلاعات کلی از دیتا صدا می‌زنیم:

mobile.info()
mobile.describe()

خروجی توابع بالا به صورت زیر است:

class 'pandas.core.frame.DataFrame'>
RangeIndex: 2000 entries, 0 to 1999
Data columns (total 21 columns):
 #   Column         Non-Null Count  Dtype  
---  ------         --------------  -----  
 0   battery_power  2000 non-null   int64  
 1   blue           2000 non-null   int64  
 2   clock_speed    2000 non-null   float64
 3   dual_sim       2000 non-null   int64  
 4   fc             2000 non-null   int64  
 5   four_g         2000 non-null   int64  
 6   int_memory     2000 non-null   int64  
 7   m_dep          2000 non-null   float64
 8   mobile_wt      2000 non-null   int64  
 9   n_cores        2000 non-null   int64  
 10  pc             2000 non-null   int64  
 11  px_height      2000 non-null   int64  
 12  px_width       2000 non-null   int64  
 13  ram            2000 non-null   int64  
 14  sc_h           2000 non-null   int64  
 15  sc_w           2000 non-null   int64  
 16  talk_time      2000 non-null   int64  
 17  three_g        2000 non-null   int64  
 18  touch_screen   2000 non-null   int64  
 19  wifi           2000 non-null   int64  
 20  price_range    2000 non-null   int64  
dtypes: float64(2), int64(19)

از روی میانگین بدست امده از ستون‌ها در تصویر بالا، می‌توان به این نتیجه رسید دیتا نیازمند نرمال سازی است. دیتا خود را با کد زیر نرمال می‌کنیم:

y = mobile["price_range"].values
temp=mobile.drop(["price_range"],axis=1)
x = (temp-np.min(temp))/(np.max(temp)-np.min(temp))

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

در قسمت قبل دیتا را وارد برنامه و آن را نرمال کردیم. حال نیاز داریم دیتا را به دو قسمت test و train تقسیم کرده و سپس الگوریتم SVM را روی آن پیاده سازی کنیم.

ابتدا دیتا را به دو قسمت Test و Train تقسیم می‌کنیم:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(x,y,test_size=0.20,random_state=1)

حال نوبت به پیاده سازی الگوریتم SVM رسیده است. به کمک کتابخانه sklearn این الگوریتم را پیاده سازی می‌کنیم:

from sklearn.svm import SVC
svm=SVC(random_state=1)
svm.fit(X_train,y_train)

حال برای ارزیابی الگوریتم SVM کد زیر را می‌زنیم:

print("test accuracy:",svm.score(X_test,y_test))

خروجی کد بالا برابر است با:

test accuracy: 0.8375

خروجی ما خوب نیست. با چند روش می‌توانیم نتیجه الگوریتم را بهتر کنیم:

  1. کاهش ابعاد دیتا
  2. نرمال سازی
  3. پیدا کردن بهترین پارامترها برای الگوریتم SVM (پارامترهایی مانند گاما و …)

بهتر کردن نتیجه این دیتاست رو به شما می‌سپاریم.

اگر سوالی در خصوص ماشین بردار پشتیبان در پایتون دارید در قسمت کامنت سوال خود را مطرح کنید تا پاسخگوی شما باشیم.

نوشته های مشابه

9 دیدگاه در “ماشین بردار پشتیبان در پایتون (SVM in python)

  1. حسین گفت:

    سلام تشکر
    خیلی خوب بود
    فقط یه سوال اینکه این عدد نهایی چی هست دقیقا
    یعنی چیو داره تووی بردار پشتیبان نشون میده؟

    1. سعید غریبی گفت:

      سلام. در این مثال ما می خواهیم رنج قیمت یک تلفن همراه را بر اساس ویژگی های گفته شده پیش بینی کنیم. برای این کار ما رنج قیمت موبایل (تلفن همراه) را به 4 دسته صفر(قیمت پایین)، یک (قیمت متوسط)، دو (قیمت بالا و سه (قیمت خیلی بالا) تقسیم کردیم و سپس پیش بینی می کنیم یک موبایل چه قیمتی دارد. در خروجی دسته قیمت یک موبایل (در این مثال اعداد 0 یا 1 یا دو یا سه به ما می دهد.)

      1. حسین گفت:

        ممنون بله
        متوجهم
        ولی سوالم اینه که خروجی مفهومش چیه؟
        test accuracy: 0.8375
        این عدد یعنی چی>

        1. سعید غریبی گفت:

          وقتی بر روی دیتاها فرآیند train را انجام دادیم. به مرحله تست خواهیم رسید. عدد 0.8375 نتیجه تست ما بر روی دیتا تست است. این بدین معنی است که الگوریتم SVM با روش ما حدود 83% درست جواب می دهد.

  2. mona گفت:

    from sklearn.svm import SVC
    svm=SVC(random_state=1)
    svm.fit(X_train,y_train)

    بعد از run کد بالا یه ستاره می مونه تو نوت بوک و هیچی اجرا نمیشه
    در کل خروجی نمی بینم. ممنون میشم راهنمایی کنید

    1. سعید غریبی گفت:

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

  3. mona گفت:

    سلام مجدد امکانش هست کد محاسبه FPR و AUC رو هم بگذارید
    با تشکر

  4. soolmaz گفت:

    سلام روزتون بخیر من میخوام از الگوریتم svm برای فارنزیک موبایل استفاده کنم ولی نمیدونم چجور دیتاستش رو پیدا کنم یا تهیه کنم و کارم واقعا لنگ این موضوع میشه راهنمایی کنین؟

    1. سلام وقت بخیر. سایت های معتبر زیادی در خصوص انتشار دیتا فعالیت دارند. از جمله این وب سایت ها می توان به Kaggle یا google data search یا UCI یا … اشاره کرد. البته github نیز برخی دیتاست ها را در خود جای داده که می توان از آن استفاده کرد.

دیدگاهتان را بنویسید

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