کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

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

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



مقدمه ای بر SVM :


ماشین های بردار پشتیبانی (SVM) الگوریتم های قدرتمند و منعطف یادگیری ماشین تحت نظارت هستند که هم برای طبقه بندی و هم رگرسیون مورد استفاده قرار می گیرند. اما عموما از آنها در مسائل طبقه بندی استفاده می شود. SVM ها ابتدا در دهه 1960 معرفی شدند اما پس از آن در سال 1990 بهبود یافتن / تصفیه شدند (refined). در مقایسه با سایر الگوریتم های یادگیری ماشین، SVM ها روش منحصر به فرد خود را برای پیاده سازی دارند. اخیرا ،این الگوریتم ها به دلیل قابلیت آنها در اداره کردن چندین متغیر پیوسته(continuous) و قطعی (categorical) بسیار محبوب شده اند.



عملکرد SVM :


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


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

موارد زیر از مفاهیم مهم در SVM است:


بردارهای پشتیبانی (Support Vectors) :


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


ابر صفحه (Hyperplane):


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


حاشیه/ مرز (Margin) :


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


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



پیاده سازی SVM در پایتون:



برای شروع، کتابخانه های استاندارد را به صورت زیر وارد می کنیم.



هسته های SVM (SVM kernels):


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



هسته خطی (linear kernel) :


می توان از آن به عنوان ضرب نقطه ای (داخلی / اسکالر) بین هر دو مشاهده استفاده کرد. رابطه هسته خطی به صورت زیر است.



هسته خطی (linear kernel)

با توجه به رابطه بالا، می بینیم که ضرب بین دو بردار x و xi برابر است با مجموع حاصلضرب هر جفت از مقادیر ورودی. هسته چند جمله ای (polynomial kernel) : این شکل عمومی تر از هسته خطی است و فضای ورودی غیر خطی یا منحنی را متمایز می کند. رابطه هسته چند جمله ای در ادامه قرار دارد.


هسته چند جمله ای (polynomial kernel)

در این جا d درجه چند جمله ای است، که در الگوریتم یادگیری باید به صورت دستی آن را تعیین کنیم.



هسته Radial Basis Function -RBF :


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


هسته Radial Basis Function -RBF

در اینجا بازه gamma بین 0 و 1 است که باید آن را به صورت دستی در الگوریتم یادگیری تعیین کرد. مقدار مناسب برای پیشفرض آن 0.1 است.


از آنجایی که SVM را برای داده های تفکیک پذیر خطی پیاده سازی کرده ایم، می توانیم آن را برای داده هایی که به صورت خطی تفکیک پذیر نیستند در پایتون پیاده سازی کنیم. این کار با استفاده از هسته ها امکان پذیر است.


مثال : ‌


مثالی برای ایجاد یک طبقه بندی کننده SVM (SVM classifier) با استفاده از هسته ها، در ادامه قرار دارد. ما از مجموعه داده iris از scikit-learn استفاده خواهیم کرد.


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



                        import pandas as pd
                        import numpy as np
                        from sklearn import svm, datasets
                        import matplotlib.pyplot as plt

                       
                                   
                    

حال، باید داده ورودی را بارگیری کنیم.


                        iris = datasets.load_iris()

                       
                                   
                    

دو ویژگی اول را به صورت زیر از این مجموعه داده میگیریم.


                        X = iris.data[:, :2]
                        y = iris.target


                       
                                   
                    

سپس، حاشیه های SVM را به همراه داده اصلی، به صورت زیر رسم می کنیم.


                        x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
                        y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
                        h = (x_max / x_min)/100
                        xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
                        X_plot = np.c_[xx.ravel(), yy.ravel()]
                                
                    

حال، باید مقدار پارامتر تنظیم را به صورت زیر ارائه کنیم.


                        C = 1.0
                                
                    

سپس، شی طبقه بندی کننده(classifier) SVM به صورت زیر ساخته می شود.


                        Svc_classifier = svm.SVC(kernel='linear', C=C).fit(X, y)
                        Z = svc_classifier.predict(X_plot)
                        Z = Z.reshape(xx.shape)
                        plt.figure(figsize=(15, 5))
                        plt.subplot(121)
                        plt.contourf(xx, yy, Z, cmap=plt.cm.tab10, alpha=0.3)
                        plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Set1)
                        plt.xlabel('Sepal length')
                        plt.ylabel('Sepal width')
                        plt.xlim(xx.min(), xx.max())
                        plt.title('Support Vector Classifier with linear kernel')

                                
                    

خروجی: ‌


                        Text(0.5, 1.0, 'Support Vector Classifier with linear kernel')
                                
                    

Support Vector Classifier with linear

برای ساخت طبقه بندی کننده SVM با هسته rbf ، می توان به صورت زیر هسته را به rbf تغییر داد.


                        Svc_classifier = svm.SVC(kernel = 'rbf', gamma =‘auto’,C = C).fit(X, y)
                        Z = svc_classifier.predict(X_plot)
                        Z = Z.reshape(xx.shape)
                        plt.figure(figsize=(15, 5))
                        plt.subplot(121)
                        plt.contourf(xx, yy, Z, cmap = plt.cm.tab10, alpha = 0.3)
                        plt.scatter(X[:, 0], X[:, 1], c = y, cmap = plt.cm.Set1)
                        plt.xlabel('Sepal length')
                        plt.ylabel('Sepal width')
                        plt.xlim(xx.min(), xx.max())
                        plt.title('Support Vector Classifier with rbf kernel')

                                
                    

خروجی: ‌


                        Text(0.5, 1.0, 'Support Vector Classifier with rbf kernel')                                
                    

Support Vector Classifier with rbf kernel

ما مقدار gamma را ‘auto’ قرار دادیم اما شما می توانید بین 0 و 1 مقدار آن را تعیین کنید.




مزایا و معایب طبقه بندی کننده SVM :



نقاط مثبت طبقه بندی کننده SVM :


طبقه بندی کننده SVM دقت بالایی دارد و به خوبی در فضای با ابعاد بالا کار می کند. اساسا طبقه بندی کننده SVM از زیر مجموعه ای از نقاط یادگیری استفاده می کند، در نتیجه حافظه بسیار کمتری استفاده میکند.


نقاط منفی طبقه بندی کننده SVM :


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


1399/07/09 5013 667
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...