ماشینهای بردار پشتیبانی (SVM) مجموعه ای از روشهای یادگیری تحت نظارت است که برای طبقه بندی ، رگرسیون و تشخیص دور استفاده می شود.
مزایای دستگاه های بردار پشتیبانی عبارتند از:
- در فضاهای ابعادی بالا موثر است.
- هنوز هم در مواردی که تعداد ابعاد بیشتر از تعداد نمونه ها باشد ، مؤثر است.
- از زیر مجموعه ای از نقاط آموزشی در عملکرد تصمیم گیری (به نام بردارهای پشتیبانی) استفاده می کند ، بنابراین همچنین حافظه کارآمد است.
- همه کاره: توابع مختلف هسته را می توان برای عملکرد تصمیم گیری مشخص کرد. هسته های متداول ارائه شده است ، اما مشخص کردن هسته های سفارشی نیز امکان پذیر است.
مضرات دستگاه های بردار پشتیبانی شامل موارد زیر است:
- اگر تعداد ویژگی ها بسیار بیشتر از تعداد نمونه ها باشد ، از انتخاب بیش از حد در انتخاب توابع هسته و اصطلاح تنظیم مجدد جلوگیری کنید.
- SVM ها به طور مستقیم برآوردهای احتمالی را ارائه نمی دهند ، اینها با استفاده از یک اعتبار سنجی متقاطع پنج برابر گران قیمت محاسبه می شوند (در زیر نمرات و احتمالات را ببینید).
دستگاه های بردار پشتیبانی در Scikit-Lea از هر دو بردار متراکم (numpy. ndarray و قابل تبدیل به آن توسط numpy. asarray) و پراکنده (هر scipy. sparse) به عنوان ورودی پشتیبانی می کنند. با این حال ، برای استفاده از SVM برای پیش بینی داده های پراکنده ، باید در چنین داده هایی مناسب باشد. برای عملکرد بهینه ، از n numpy. ndarray (متراکم) یا scipy. sparse. csr_matrix (پراکنده) با dtype = float64 استفاده کنید.
1. 4. 1. طبقه بندی¶
SVC ، NUSVC و LinearSVC کلاس هایی هستند که قادر به انجام طبقه بندی باینری و چند طبقه در یک مجموعه داده هستند.

SVC و NUSVC روشهای مشابهی هستند ، اما مجموعه های کمی متفاوت از پارامترها را می پذیرند و فرمولاسیون ریاضی متفاوتی دارند (به بخش فرمولاسیون ریاضی مراجعه کنید). از طرف دیگر ، Linearsvc یکی دیگر از اجرای (سریعتر) طبقه بندی بردار پشتیبانی برای مورد هسته خطی است. توجه داشته باشید که LinearSVC هسته پارامتر را قبول نمی کند ، زیرا این فرض می شود خطی است. همچنین فاقد برخی از ویژگی های SVC و NUSVC مانند Support_ است.
به عنوان سایر طبقه بندی کننده ها ، SVC ، NUSVC و LineArsvc به عنوان ورودی دو آرایه می گیرند: یک آرایه x شکل (n_samples ، n_features) که نمونه های آموزش را نگه می دارند ، و آرایه ای از برچسب های کلاس (رشته یا عدد صحیح) ، از شکل (n_samples):
>>> از جانب چلیکون وارد كردن SVM >>> X = [[0, 0], [1, 1]] >>> y = [0, 1] >>> CLF = SVM.SVC() >>> CLF.مناسب(X, y) SVC ()
پس از تعبیه شدن ، از مدل می توان برای پیش بینی مقادیر جدید استفاده کرد:
>>> CLF.پیش بینی([[2., 2.]]) آرایه ([1])
عملکرد تصمیم گیری SVMS (به تفصیل در فرمول ریاضی) به برخی از زیر مجموعه های داده های آموزشی ، به نام بردارهای پشتیبانی بستگی دارد. برخی از خصوصیات این بردارهای پشتیبانی را می توان در ویژگی های Support_Vectors_ ، Support_ و N_Support_ یافت:
>>> # بردارهای پشتیبانی را دریافت کنید >>> CLF.پشتیبانی_اکتور_ آرایه ([[0. ، 0.] ، [1. ، 1.]]) >>> # شاخص های بردارهای پشتیبانی را دریافت کنید >>> CLF.حمایت کردن_ آرایه ([0 ، 1].) >>> # تعداد بردارهای پشتیبانی را برای هر کلاس بدست آورید >>> CLF.n_support_ آرایه ([1 ، 1].)
- SVM: حداکثر حاشیه جداکننده هایپلن ،
- SVM غیرخطی
- SVM-ANOVA: SVM با انتخاب ویژگی های یک متغیره ،
1. 4. 1. 1. طبقه بندی چند طبقه ¶
SVC و NUSVC رویکرد "یک در مقابل-یک" را برای طبقه بندی چند طبقه پیاده سازی می کنند. در کل ، n_classes * (n_classes - 1) / 2 طبقه بندی کننده ساخته می شوند و هر یک از دو کلاس داده را آموزش می دهند. برای ارائه یک رابط سازگار با سایر طبقه بندی کننده ها ، گزینه DETICK_FUNCTION_SHAPE اجازه می دهد تا به صورت یکنواخت نتایج طبقه بندی کننده های "یک در مقابل-یک" را به یک عملکرد تصمیم "یک VS-REST" تبدیل کنید (N_Samples ، N_Classes).
>>> X = [[0], [1], [2], [3]] >>> Y = [0, 1, 2, 3] >>> CLF = SVM.SVC(DECTION_Function_Shape='ovo') >>> CLF.مناسب(X, Y) SVC (DECTION_Function_Shape = 'ovo') >>> دسامبر = CLF.عملکرد_ تصمیم گیری([[1]]) >>> دسامبر.شکل[1] # 4 کلاس: 4*3/2 = 6 6 >>> CLF.DECTION_Function_Shape = "ovr" >>> دسامبر = CLF.عملکرد_ تصمیم گیری([[1]]) >>> دسامبر.شکل[1] شماره 4 کلاس 4
از طرف دیگر ، LineArsvc استراتژی چند کلاس "One-VS-the-Rest" را پیاده سازی می کند ، بنابراین مدلهای N_Classes را آموزش می دهد.
>>> lin_clf = SVM.خطی() >>> lin_clf.مناسب(X, Y) linearsvc () >>> دسامبر = lin_clf.عملکرد_ تصمیم گیری([[1]]) >>> دسامبر.شکل[1] 4
برای توصیف کامل عملکرد تصمیم ، به فرمول ریاضی مراجعه کنید.
توجه داشته باشید که LinearSVC همچنین با استفاده از گزینه multi_class = 'crammer_singer' ، یک استراتژی چند طبقه جایگزین ، به اصطلاح SVM چند طبقه که توسط Crammer and Singer [16] تهیه شده است ، پیاده سازی می کند. در عمل ، طبقه بندی یک VS-REST معمولاً ترجیح داده می شود ، زیرا نتایج بیشتر مشابه هستند ، اما زمان اجرا به طور قابل توجهی کمتر است.
برای خط "One-VS-REST" Linearsvc ویژگی های Coef_ و Countercept_ به ترتیب شکل (n_classes ، n_features) و (n_classes) را دارند. هر سطر از ضرایب با یکی از طبقه بندی کننده های N_Classes "یک VS-REST" و مشابه برای رهگیری ها ، به ترتیب کلاس "یک" مطابقت دارد.
در مورد SVC "One-VS-One" و NUSVC ، طرح این ویژگی ها کمی بیشتر درگیر است. در مورد هسته خطی ، ویژگی های Coef_ و رهگیری_ شکل (n_classes * (n_classes - 1) / 2 ، n_features) و (n_classes * (n_classes - 1) / 2) را دارند. این شبیه به طرح LineArsvc است که در بالا توضیح داده شد ، با هر سطر اکنون مربوط به یک طبقه بندی باینری است. سفارش برای کلاس های 0 تا n "0 در مقابل 1" ، "0 در مقابل 2" ، "0 در مقابل N" ، "1 در مقابل 2" ، "1 در مقابل 3" ، "1 در مقابل n" ،. بشربشر"N-1 در مقابل N".
شکل Dual_Coef_ (n_classes-1 ، n_sv) با یک طرح تا حدودی دشوار است. ستون ها با بردارهای پشتیبانی درگیر در هر یک از طبقه بندی های N_Classes * (N_Classes-1) / 2 "One-VS-One" مطابقت دارند. هر بردار پشتیبانی V در هر یک از N_Classes ضریب دوگانه دارد - 1 طبقه بندی کننده کلاس V را در برابر کلاس دیگر مقایسه می کند. توجه داشته باشید که برخی ، اما نه همه ، این ضرایب دوگانه ، ممکن است صفر باشد. N_Classes - 1 ورودی در هر ستون این ضرایب دوگانه است که توسط کلاس مخالف سفارش داده می شود.
این ممکن است با یک مثال واضح تر باشد: یک مشکل سه کلاس را با کلاس 0 در نظر بگیرید که دارای سه بردار پشتیبانی (V^_0 ، V^_0 ، V^_0 ) و کلاس 1 و 2 دارای دو بردار پشتیبانی (V^_1 ،v^_1 ) و (v^_2 ، v^_2 ). برای هر بردار پشتیبانی (v^_i ) ، دو ضرایب دوگانه وجود دارد. بیایید ضریب بردار پشتیبانی (V^_i ) را در طبقه بندی بین کلاس ها (i ) و (k ) ( alpha^_ ) بنامیم. سپس dual_coef_ به نظر می رسد:
اخبار رمز ارزها...
ما را در سایت اخبار رمز ارزها دنبال می کنید
برچسب :
نویسنده : منیژه سلیمی
بازدید : <-PostHit->
تاريخ : شنبه
10 تير
1402 ساعت: 12:41