معرفی روش های کاهش ابعاد در تحلیل داده و یادگیری ماشین

اگر مطلب «داده کاوی چیست؟» رو خونده باشید؛ بعد از پاکسازی داده ها یا همون Data Cleaning یه مرحله‌ای وجود داره به اسم کاهش ابعاد. اول از همه بگم توی همه‌ی مراحل داده کاوی لزومی نداره که به فکر کاهش ابعاد باشیم. این که «کاهش ابعاد چیه؟» و «کاربردش کجاست؟» موضوع این مطلب از انتشارات علم داده ارزیاب هست. بعد از پرداختن به این سوالات هم قراره به انواع مختلف روش های کاهش ابعاد یه نگاه کلی کنیم.کاهش ابعاد یکی از مراحل مهم در تحلیل داده و پیاده سازی مدل های آماری و ماشین لرنینگی هست.? این مطلب به درد کیا می‌خوره؟قبل ازین که وارد مطلب بشم باید این نکته رو بگم که این مطلب کمی تخصصی هست و پیش زمینش اینه که برخی از اصطلاحات تخصصی مدل سازی رو بدونید و یا مراحل کلی یادگیری نظارتی رو بلد باشید. اگه حتی مقداری ازین مطالب رو می‌دونید این مطلب براتون کاربردی خواهد بود. وقتی داشتم این مطلب رو می‌نوشتم هدفم بچه های آمار، ریاضی، علوم کامپیوتر و کسایی که با یادگیری ماشین آشنایی دارن، بودن. اما در برنامم هست که حتما اصطلاحات پایه‌ای تر رو توضیح بدم و در ادیشن های بعدی این مطلب لینکش رو قرار بدم.بهرحال سعی کردم خیلی ساده بنویسم و هرکی آشنایی کلی با مدل سازی داره احتمالا بتونه استفاده کنه از مطلب.کاهش ابعاد یا Dimensionality Reduction چیه و کجا کاربرد داره؟فرض کنید با یه پروژه تحلیل داده سر و کار دارید که تعداد متغیراش زیاده. مثلا یکی از مجموعه داده هاش حدود 100 تا متغیر داره و شما باید روی این مجموعه داده و مجموعه داده های مرتبط با این(که شاید تعداد متغیر هاش همین قدر زیاد باشه) کار کنید و مراحل هرم دانش رو پیاده سازی کنید. قطعا یکی از چالش هایی که وجود داره توی تحلیل این نوع مجموعه های داده؛ اینه که مدل هایی که قراره روش پیاده سازی بشه شاید بهینه نباشه. هم از نظر ریسورس و منابع با یه سری چالش مواجه می‌شید هم از نظر پیاده سازی مدل ها(چه آماری باشه چه ماشین لرنینگی). درواقع با افزایش تعداد متغیر ها، مدل پیچیده‌تر می‌شه. هرچی تعداد متغیر ها بیشتر باشه، احتمال بیش برازش یا Overfitting هم بالا می‌ره و این در مدل سازی چیز خوبی نیست. مخصوصا اگه مدلتون ماشین لرنینگی باشه؛ چون یه مدل ماشین لرنینگی که با تعداد زیادی متغیر آموزش دیده، به طور چشمگیری به همون داده‌ هایی که روی اون آموزش داده شده، وابسته می‌شه و به نوبه خود دچار بیش برازش می‌شه. در نتیجه‌ی این بیش برازش، مدل عملکرد ضعیفی روی داده‌های واقعی داره و نمی‌تونه به هدف اصلیش که شامل تحلیل و پیش‌بینی داده های واقعی هست؛ برسه.انگیزه اصلی برای انجام کاهش ابعاد، اجتناب از بیش برازش یا Overfitting هست. هرچی داده‌های آموزشی ما متغیر های کمتری داشته باشه، مفروضات مدل ما کمتر و ساده‌تر خواهد بود. اما این همه چیز نیست و کاهش ابعاد مزایای بسیار بیشتری برای ارائه داره، مثلا:1. داده های گمراه کننده کمتر می‌شه به این معنی که دقت مدل بهبود پیدا می‌کنه.2. ابعاد کمتر به معنای محاسبات کمتره. داده‌ های کمتر به این معنیه که الگوریتم‌ها سریع‌تر اجرا می‌شن یا یاد می‌گیرند.3. داده کمتر به معنای فضای ذخیره سازی کمتر هست.خب حالا که یکم با دردسرای مدل زدن روی دیتاست ها با متغیر های زیاد آشنا شدید و درک کردید که چرا مدل با تعداد متغیر بالا دچار بیش برازش می‌شه؛ باید بگم خبر خوب اینه که شما مجبور نیستید که مدل ها رو روی همه‌ی متغیر های مجموعه داده یا دیتاست‌تون پیاده سازی کنید.درواقع کار کاهش ابعاد اینه که تعداد متغیر های دیتاست رو کم کنه؛ به طوری که کمترین اطلاعات رو از اون دیتاست از دست بدیم.چطوری؟ خب راه های مختلفی وجود داره برای این کار. بیشتر به این سوال بستگی داره که «نوع دیتاست شما چیه؟» در ادامه مطلب قراره به این سوال بپردازیم: «چطوری متغیر ها رو برای کاهش بعد انتخاب کنیم؟»و همینطور چندین روش کاهش بعد رو معرفی می‌کنیم.روش انتخاب متغیر برای کاهش ابعادانتخاب متغیر یک فرایند شناسایی هست که به انتخاب "متغیر های مرتبط" برای نمونه شما کمک می‌کنه. توی این فرایند به صورت دستی متغیر های جدید از متغیر های موجود ساخته میشه؛ به بیانی دیگه با اعمال تغییر یا انجام برخی عملیات روی متغیر های موجود، این متغیر های جدید ایجاد می‌شه.انتخاب متغیر می‌تونه به صورت دستی یا برنامه‌ای انجام بشه. مثلا در نظر بگیرید که در حال تلاش برای ساخت مدلی هستید که وزن افراد رو پیش‌بینی می‌کنه و مجموعه بزرگی از داده‌ها جمع‌آوری شده که هر فرد رو کاملاً توصیف می‌کنه. اگه متغیری داشتید که رنگ مورد علاقه هر فرد رو توصیف می‌کرد، آیا برای پیش بینی وزن اون ها کمک زیادی می‌کرد؟ فکر می‌کنم با خیال راحت می‌تونیم توافق کنیم که این طور نخواهد بود؛ درواقع متغیر رنگ مورد علاقه افراد متغیریه که ما می‌تونیم بدون هیچ مشکلی کنار بذاریم. اما در مورد متغیری که طول قد افراد رو توصیف می‌کرد چطور؟ قطعا همه ما می‌دونیم یک رابطه واضحی بین قد و وزن افراد وجود داره و متغیر طول قد یک متغیر اساسی در مدل ما خواهد بود. زمانی که مرتبط یا نامرتبط بودن متغیر های خاص آشکار باشه، می‌تونیم این متغیر های ساده و واضح رو به صورت دستی انتخاب کنیم و ابعاد مجموعه داده رو کاهش بدیم. اما اگه مرتبط بودن یا نبودن اون متغیر به سادگی واضح و قابل درک نباشه چی؟ در این مواقع ابزار های زیادی وجود داره که می‌تونیم برای کمک به انتخاب متغیر هامون استفاده کنیم. ابزاری مثل نقشه حرارتی یا heatmap یا نمودار هایی که همبستگی بین متغیر ها رو نشون میده. البته این نکته رو باید اضافه کنم که ممکنه این همبستگی ها غیر خطی باشه و با نمودار زیاد نشه ارتباطشون رو درک کرد.برای این که زیاد از بحث اصلی دور نشیم این مبحث که «چطور از راه برنامه نویسی رابطه‌ی بین متغیر ها رو درک کنیم و متوجه بشیم؟» رو باز نمی‌کنم. ولی اگه با پایتون کار می‌کنید گوشه ذهنتون باشه می‌تونید این متد کاهش بعد رو با استفاده از کتابخونه scikit-learn به کار ببرید. اگه فرصتی بشه حتما یه مطلب دربارش می‌نویسم.روش های کاهش بعد خطیرایج ترین و شناخته شده ترین روش های کاهش بعد؛ متد هایی هستند که تبدیل های خطی رو اعمال می‌کنن. خیلی خلاصه و مختصر و مفید بخوام معرفی کنم این سه تا متد جزء روش های کاهش بعد خطی هستند:روش تجزیه مولفه های اصلی یا PCA که مخفف Principal Component Analysis هست.تحلیل عاملی یا Factor Analysisتحلیل تشخیصی خطی یا LDA که مخفف Linear Discriminant Analysis هست.اما هر کدوم ازین سه متد کجا کاربرد دارند؟ 1) روش تجزیه مولفه های اصلی یا PCA کجا کاربرد داره؟تجزیه مولفه های اصلی معمولاً برای کاهش ابعاد در داده های پیوسته استفاده می‌شه؛ PCA به این صورت عمل می‌کنه که داده ها رو در جهتی که واریانس‌شون افزایش پیدا کنه می‌چرخونه و متغیر های جدیدی که با حداکثر واریانس متغیر ها یا اجزای اصلی هستند رو برآورد می‌کنه. 2) کاربرد روش تحلیل عاملی یا Factor Analysis کجاست؟روش تحلیل عاملی یه تکنیکیه که برای کاهش تعداد زیادی از متغیر ها به تعداد متغیر کمتر استفاده می‌شه و متغیر جدیدی لزوما اضافه نمی‌شه. توی این روش اول یک یا چند متغیر که می‌خوایم تحلیلش کنیم یا پایه مدل‌مون قرار بدیم انتخاب می‌شه که به این متغیر ها، متغیر مستقل می‌گن. در ادامه متغیر های دیگه به‌ عنوان متغیر های وابسته انتخاب می‌شن و ما رابطه بین متغیر های مستقل و متغیر های وابسته رو مطالعه می‌کنیم تا مهم‌ترین و مرتبط ترین متغیر های وابسته رو پیدا کنیم. توی این روش مهمه که بدونین فرض بر اینه که داده ها تصادفی باشن و از توزیع نرمال پیروی کنن. 3) روش تحلیل تشخیصی خطی یا LDA رو کجا باید به کار ببریم؟در روش LDA داده ها به گونه ای براورد می‌شن که تفکیک پذیری هر طبقه به حداکثر برسه. در این متد مشاهده ها از یک طبقه با استفاده از براورد، نزدیک به هم و مشاهده ها از طبقه های مختلف دور از هم قرار می‌گیرن.روش‌های کاهش بعد غیر خطیروش‌های تبدیل غیرخطی یا روش‌های یادگیری چندگانه در کاهش بعد، وقتی استفاده می‌شن که داده‌ها در یک زیرفضای خطی قرار نگیرن. این روش ها بر پایه فرضیه منیفولد(manifold hypothesis) هستند که می‌گه در یک ساختار با ابعاد بالا، بیشتر اطلاعات مرتبط در تعداد کمی از منیفولد ها با ابعاد پایین متمرکز می‌شه. یک مثال ساده از منیفولد غیرخطی این می‌تونه باشه که اگر یک ورق کاغذ رول شده رو در نظر بگیرید، یک صفحه کاغذ مسطح می‌تونه یک زیرفضای خطی ازون باشه.مثال معروف کاغذ رول شدهخب برای این که از بحث زیاد دور نشیم من فقط چندین روش کاهش بعد غیرخطی رو نام می‌برم تا اگه علاقه‌مند هستید که بیشتر دربارش بدونین راجع بهش سرچ کنید. چون خودم "فعلا" تسلط کافی ندارم و فکر نکنم به خوبی بتونم ارائه بدم و حق مطلب رو ادا کنم. البته اگه منبع خوبی برای شرح هر کدوم از این متد ها پیدا کردم حتما به اشتراکش می‌گذارم. اگه شما هم منبع خوبی می‌شناسین یا مطلبی که به خوبی پرداخته به این مباحث زیر همین پست کامنت کنید. امیدوارم فرصت شه و بیشتر دربارش بخونم و ریسرچ کنم. برخی از روش های محبوب کاهش بعد غیر خطی عبارتند از:Multi-dimensional scaling (MDS)Isometric Feature Mapping (Isomap)Locally Linear Embedding (LLE)Hessian Eigenmapping (HLLE)t-distributed Stochastic Neighbor Embedding (t-SNE)خب به عنوان بخش پایانی باید بگم این مطلب خیلی جامع نوشته شده و قصدم از نوشتن این مطلب این بود که بتونم به شما روش کاهش بعد PCA رو در مطالب بعدی معرفی کنم. درواقع این مطلب مقدمه و پیش زمینه‌ای برای معرفی روش تجزیه مولفه های اصلی هست.امیدوارم عمری بمونه و بتونم به صورت کامل درباره PCA بنویسم و در انتشارات شرکت علم داده ارزیاب به اشتراک بگذارم :)