کاهش فضای ویژگی
هدف در این نوشتار آموزش روش هایی است که به کمک آنها مولفه یا ویژگی های اصلی را در موضوع مورد نظر کشف کنیم و به جای اینکه تمام ویژگی ها یا مولفه های آن را مورد بررسی قرار بدهیم ، تنها ویژگی یا مولفه هایی را مورد بررسی قرار بدهیم که ارزش بیشتری نسبت به بقیه دارند. به طور مثال وقتی برای خرید خانه به یک آژانس املاک مراجعه می کنید ویژگی هایی مانند متراژ ، تعداد اتاق ، پارکینگ و ... ارزش بالایی دارند و در تعیین قیمت نهایی بسیار موثر هستند! اما مثلا اینکه آیا فروشنده برای شما در اتاق هایتان قبل از تحویل چراغ نصب می کند یا خیر ، موضوع اثرگذاری بر روی قیمت نهایی نیست یا حداقل تاثیر خیلی کمتری نسبت به موارد دیگر دارد.
هدف در این بخش نیز کاهش ویژگی هاس به نحوی که ویژگی های بی ارزش حذف بشوند یا ویژگی هایی که از ویژگی های دیگر نیز می توانیم بدست بیاوریم نیز حذف بشود.
در این راستا روش های مختلفی تاکنون ارائه شده است که در اینجا 3 روش را بررسی می کنیم.
1 - Auto-Encoder :
این روش که مبتنی بر شبکه عصبی کار می کند ، به این شکل عمل می کند که ابتدا یک شبکه Auto-Encoder را با استفاده از مجموعه داده ای که می خواهیم روی آن کاهش دهیم آموزش می دهیم و سپس قسمت Encoder آن را جدا می کنیم و به عنوان یک شبکه کاهش دهنده ابعاد قبل از مدل اصلی استفاده می کنیم.
معماری Auto-Encoder به این صورت است که تعداد نورون ورودی و خروجی آن برابر با تعداد ویژگی های تصویر یا داده ورودی است ، در لایه میانی Auto-Encoder لایه ای وجود دارد که قسمت Encoder و Decoder را متمایز می کند ، اگر تعداد ویژگی داده های ورودی را برابر با N در نظر بگیریم ، تعداد ویژگی داده های خروجی نیز برابر N می شود و اگر R تا از این ویژگی ها کاهش یابند ، تعداد نورون لایه میانی برابر با N - R خواهد بود!
به طور کلی در بخش Encoder ابعاد کاهش و در بخش Decoder ابعاد افزایش پیدا می کند. برای آموزش شبکه به این صورت عمل می شود که داده ها به ورودی Auto-Encoder داده می شوند و انتظار می رود در خروجی Auto-Encoder همان داده ها دیده شود ، چندین Epoch این کار برای همه داده ها تکرار می شود تا زمانی که تا حد ممکن نتایج خروجی برابر با ورودی ها شود!
در نهایت پس از پایان آموزش Auto-Encoder ، قسمت Encoder جدا می شود و قبل از شبکه اصلی برای کاهش بعد داده های ورودی استفاده می شود!
همانطور که توضیح داده شد Auto-Encoder از دو بخش تشکیل شده است در قطعه کد زیر نیز به همین شکل طراحی را انجام دادیم ، نکته قابل ذکر این است که در اینجا از هیچ لایه ای بین داده های ورودی و لایه با کوچکترین ابعاد استفاده نشده است که این مسئله دقت شبکه را ممکن است کاهش بدهد ، شما می توانید تعداد لایه های بیشتری به Auto-Encoder اضافه کنید و همچنین تعداد Epoch ها را افزایش دهید تا شبکه بهتر اموزش ببیند.
در نهایت قسمت Encoder را جدا کنید و قبل از مدل اصلی اجرا کنید(نمونه کد مدل اصلی در انتهای این نوشتار آمده است)
2 - PCA
آنالیز مولفه اصلی (Principal Component Analysis) یا به اختصار PCA بر خلاف مدل Auto-Encoder پیاده سازی شده مبتنی بر شبکه عصبی نیست و از مفاهیم ریاضی استفاده می کند.
تحلیل مؤلفههای اصلی در تعریف ریاضی یک تبدیل خطی متعامد است که داده را به دستگاه مختصات جدید میبرد بهطوریکه بزرگترین واریانس داده بر روی اولین محور مختصات، دومین بزرگترین واریانس بر روی دومین محور مختصات قرار میگیرد و همینطور برای بقیه. تحلیل مؤلفههای اصلی میتواند برای کاهش ابعاد داده مورد استفاده قرار بگیرد، به این ترتیب مؤلفههایی از مجموعه داده را که بیشترین تأثیر در واریانس را دارند حفظ میکند.
برای استفاده از PCA می توانید به راحتی از کتابخانه Scikit-learn مطابق کد زیر استفاده کنید و فقط کافی است تعداد ابعادی که می خواهید توسط این ماژول کاهش یابد را مشخص کنید ، دقت کنید بعد از کاهش ابعاد داده های آموزشی حتما داده های تست را نیز کاهش دهید!
3 - Cascaded RBMs :
مانند Auto-Encoder ، در این روش نیز از شبکه عصبی برای کاهش بعد استفاده می شود ، RBM از دو لایه قابل مشاهده (Visible) و مخفی (hidden) تشکیل شده است.
این شبکه تنها از یک لایه نورونی برای کاهش بعد استفاده می کند (مانند شکل بالا ) ، همانطور که می بینید در این شبکه تعداد نورون از x به a کاهش پیدا کرده است که به این معنی است که تعداد ابعاد ورودی از x به a کاهش پیدا می کندو شاهد x - a کاهش بعد هستیم ، در شکل بالا شبکه در حال انجام Encoding است ، اگر همین را برعکس طی کنیم دقیقا Decoding انجام می شود!
حالا اگر تعدادی RBM را پشت سر هم قرار دهیم تا از تعداد زیادی از آنها برای کاهش بعد استفاده کنیم Cascaded RBMs ایجاد کردیم. و در نهایت خروجی نهایی این Cascaded RBMs مقادیر ابعاد جدید ما پس از کاهش ابعاد است.
حال برای پیاده سازی RBM می توانیم از ماژول BernoulliRBM از کتابخانه sklearn استفاده کنیم ، دقت کنید با توجه به اینکه می خواهیم Cascaded باشد باید از تعدادی RBM پشت سر هم استفاده کنیم!
پس چند مرتبه باید کاهش ابعاد را در کد اعمال کنیم ، به طور مثال اگر از تصاویر MNIST استفاده می کنیم و ابعاد ما 784 هستند ، ابتدا آن را به 600 سپس 400 و سپس 200 و ....کاهش دهیم.
در کد زیر نیز همین روش برای دو لایه پیش گرفته شده است.
تغییرات در مدل اصلی :
تمام روش هایی که گفته شد به این صورت استفاده می شوند که داده های ورودی توسط آنها از M به N بعد ، کاهش بعد داده می شوند و سپس به شبکه ای با ورودی N بعدی داده می شود!
دقت کنید به طور مثال اگر توسط یکی از روش های بالا داده های MNIST را از 784 بعد به 200 بعد کاهش بدهیم ، سایز ورودی شبکه عصبی (طبقه بند ما ) به 200 بعد کاهش پیدا می کند. و همچنین کد پیاده سازی قسمت های مربوط به شبکه عصبی نیازی به تغییر ندارند
? اهمیت دادههای اینترنت اشیا
رسم نمودار الگوریتم درخت تصمیم در پایتون
خلاقیت پلی به سوی نوآوری و اختراع