کاهش زمان اجرا در رگرسیون بردار پشتیبان – پادکست پرسش و پاسخ


«ماشین بردار پشتیبان» (Support Vector Machine)، یکی از الگوریتمهای «یادگیری ماشین» (Machine Learning) «نظارت شده» (Supervised Learning) است که میتوان از آن برای حل مسائل «دستهبندی» (Classification) استفاده کرد. گونهای از این الگوریتم که برای مسائل «رگرسیون» (Regression) قابل استفاده است و تفاوتهای جزئی با الگوریتم SVM دارد، «رگرسیون بردار پشتیبان» (Support Vector Regression) نامیده میشود و برای دادههای پیوسته مورد استفاده قرار میگیرد. پرسشی که برای برخی افراد مطرح میشود، سرعت اجرای این الگوریتم و چگونگی افزایش آن است. دکتر «سید مصطفی کلامی هریس»، در پادکستی که در ادامه آمده، به این پرسش به طور مشروح پاسخ داده و به موضوع نحوه کاهش زمان اجرای الگوریتم SVR پرداخته است. نسخه متنی این پادکست نیز در همین مطلب قرار دارد. البته، منبع اصلی همچنان فایل صوتی محسوب میشود.
پادکست پیرامون روشهای کاهش زمان اجرا در رگرسیون بردار پشتیبان
ذخیره کردن این فایل صوتی: لینک دانلود
نسخه نوشتاری
یکی از دوستان در مورد «رگرسیون بردار پشتیبان» سوال پرسیدند. این الگوریتم، یکی از انواع الگوریتمهای ماشینهای بردار پشتیبان است که برای حل مسائل رگرسیون و مدلسازی میتواند مورد استفاده قرار بگیرد. ایشان بررسی کردهاند و متوجه شدهاند که در حین اجرای برنامه، بیشترین زمانی که صرف میشود در بخش «Quadratic Programming» است و این بخش در کل بسیار زمانبر محسوب میشود. اکنون، این پرسش را مطرح کردهاند که «چطور میتوانند این مساله را حل کنند؟».
برای این مساله نمیتوان راه حل کلی ارائه کرد، اما چند راهکار برای آن وجود دارد که در ادامه شرح داده میشوند. راه اول این است که به همین شکل با موضوع کنار بیاییم و بپذیریم این مساله وجود دارد و بنابراین شکل مساله اصلی را تغییر ندهیم و خب از ابزار دیگری برای حال مساله استفاده کنیم. مثلا در حال حاضر پیکجهای مختلفی وجود دارند که از این جمله میتوان به پکیجهای موجود برای SVM در «متلب» (Matlab) اشاره کرد. LibSVM یکی از پکیجهای بیان شده است که در زبانهای برنامهنویسی C و ++C نوشته شده و نسبت به کد پیاده شده توسط کاربر در متلب، سرعت خیلی بیشتری دارد. این روش، یعنی استفاده از یک ابزار، یکی از راهکارهای موجود برای افزایش سرعت است.
اما راهکار دیگر این است که ما در مساله دست ببریم. کاربر اگر با مساله «پرسپترون چند لایه» (MLP | Multilayer perceptron) یا «Radial basis function» مواجه است، باید توجه داشته باشد که یک بخش از پیچیدگی این نوع از «شبکههای عصبی» (Neural Networks) مربوط به متغیرهای موجود در مساله و تعداد «ویژگیها» (Features) است. یعنی کاربر هر چقدر متغیرهای مستقل بیشتری داشته باشد مساله را پیچیدهتر میکند و بنابراین حل مساله نیز پیچیدهتر میشود.
عکس این موضوع و در واقع در نقطه مقابل آن، الگوریتمهای SVM و SVR قرار دارند. در این الگوریتمها اتفاقا تعداد دادهها است که اثر میگذارد. در واقع تعداد دادهها در MLP هر چقدر هم کم و زیاد بشود آنچه که هست به صورت خطی زیاد میشود، اما اینجا نه؛ چون کاربر در بین دادهها یک تعدادی را به عنوان بردارهای پشتیبان انتخاب میکند و این انتخاب منوط به حل یک مساله Quadratic Programming است؛ به همین دلیل، هرقدر «پایگاه داده» (Data Base) کاربر غنیتر بشود، حل مساله با SVR و با SVM هم سختتر میشود. پس یک راه این است که تعداد دادهها را کاهش داد.
دوگان مساله «انتخاب ویژگی» (Feature Selection) آن بود که طی آن ویژگیهای مهم را انتخاب میکردیم. دوگان این میتواند انتخاب دادههای مهم و یا حذف دادههایی باشد که خیلی شبیه هم هستند و یا در واقع تنوع (Diversity) بالایی به مساله اضافه نمیکنند. دادهای که چند بار تکرار شده باشد در یک محدوده خیلی کم، همه اینها یک داده هستند و لازم نیست که ما به جای یک داده ده تا در نظر بگیریم. نه؛ میتوانید چند تا از این موارد را حذف کنید و در واقع اگر اشکالی به روند کلی حل مسئله وارد نمیشود آنها را به کنار بگذارید. در واقع، دادهها در گروههای مشابه قرار میگیرند و از بین اینها، مثلا از بین هر ده مورد، یکی انتخاب میشود.
البته باید به این نکته توجه داشت که دادههایی که در افزایش تنوع دادهای موثرتر هستند، اهمیت بیشتری دارند و معمولا دادههایی که در محلهای دورتر و در واقع خلوتتر قرار میگیرند مهمتر محسوب میشوند. مفهوم مشابهی نیز در بحث «خوشهبندی» (Clustering) وجود دارد. در واقع، در مساله خوشهبندی میتوان با تعداد خوشه بیشتر کار خوشهبندی را انجام داد. مثلا فرض کنید که حجم زیادی داده و برای مثال ده هزار داده دارید. این دادهها را میتوان به صد خوشه تبدیل کرد و صد مرکز خوشه به دست آورد. البته مثلا باید از روش «K-Medoids» استفاده کرد. از سوی دیگر، میتوان از صد خوشه به دست آمده، یکی از اعضای خوشه را انتخاب کرد و یا در صورتی که از الگوریتم K-Medoids استفاده شده، مرکز خوشهای را معرفی کرد که بهترین نمونه هم باشد.
به هر حال با این روش میتوان اندازه پایگاه داده را کاهش داد و در واقع این کاهش اندازه در تعداد دادهها است نه در تعداد ویژگیها. در MLP و RBF و روشهای دیگری که ویژگیها برای آنها حائز اهمیت محسوب میشوند، دادهها از ابعاد دیگری کاهش داده میشوند. در آنجا ویژگیها کاهش داده میشوند. آن کار نیز نوعی کاهش اندازه پایگاه داده است، ولی به شکل دیگری انجام میشود. به این ترتیب، شما میتوانید سایز پایگاه داده را کم کنید و احتمالا به این شکل سرعت اجرای برنامه افزایش پیدا میکند. این هم یکی از راهکارها است. شاید حتی مجبور باشید از ترکیب دو راهکار استفاده کنید؛ یعنی هم از LibSVM استفاده کنید که یک ابزار قوی و سریع محسوب میشود و هم سایز پایگاهداده را کاهش دهید.
برای دانلود و شنیدن دیگر پادکستهای دکتر سید مصطفی کلامی هریس در مجله فرادرس، روی این لینک [+] کلیک کنید.
اگر نوشته بالا برای شما مفید بوده است، مطالب زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای دادهکاوی و یادگیری ماشین
- آموزش دادهکاوی یا Data Mining در متلب
- آموزش خوشهبندی با استفاده از الگوریتمهای تکاملی و فراابتکاری
- آموزش شبکههای عصبی مصنوعی در متلب
- انواع شبکههای عصبی و کاربردهای آنها — پادکست پرسش و پاسخ
^^
سلام با توجه به اینکه svr نسبت به داده های پرت خیلی حساس است چگونه در متلب یا اپلیکیشن regression متلب می توان داده های پرت را محدود یا حذف یا حساسیت آن را تنظیم کرد ؟