عنوان نوشته:

کاهش ابعاد به روش PCA

در این درس می‌خواهیم به یکی از مباحثِ اصلی و پیشرفته‌تر در جبر خطی بپردازیم که به آن آنالیز مولفه اصلی (Principal Component Analysis) یا به اختصار PCA می‌گویند. 

یکی از کاربردهای اصلیِ PCA در عملیاتِ کاهشِ ویژگی (Dimensionality Reduction) است. PCA همان‌طور که از نامش پیداست می‌تواند مولفه‌های اصلی را شناسایی کند و به ما کمک می‌کند تا به جای اینکه تمامیِ ویژگی‌ها را مورد بررسی قرار دهیم، یک سری ویژگی‌هایی را ارزشِ بیشتری دارند، تحلیل کنیم. در واقع PCA آن ویژگی‌هایی را که ارزش بیشتری فراهم می‌کنند برای ما استخراج می‌کند (اگر نمی‌دانید ویژگی یا بُعد چیست، حتما درس ویژگی چیست را خوانده باشید).

اجازه بدهید با یک مثال شروع کنیم. فرض کنید یک فروشگاه می‌خواهد ببیند که رفتار مشتریانش در خریدِ یک محصول خاص (مثلا یک کفش خاص) چطور بوده است. این فروشگاه، اطلاعات زیادی از هر فرد دارد (همان ویژگی‌های آن فرد). برای مثال این فروشگاه، از هر مشتری ویژگی‌های زیر را جمع‌آوری کرده است:

سن، قد، جنسیت، محل تولد شخص (غرب ایران، شمال ایران، شرق ایران یا جنوب ایران)، میانگین تعداد افراد خانواده، میانگین درآمد، اتومبیل شخصی دارد یا خیر و در نهایت اینکه این شخص بعد از بازدید کفش خریده است یا خیر. ۷ویژگیِ اول ابعاد مسئله ما را می‌ساختند و ویژگیِ آخر هدف (Target) می‌باشد.

اگر درس ویژگی چیست را خوانده باشید می‌دانید که ویژگی‌های بالا را می‌توان برای مجموعه‌ی داده (در این‌جا مجموعه مشتریان فروشگاه) در ۷بُعد رسم کرد. حال به PCA بازمی‌گردیم. PCA می‌تواند آن مولفه‌هایی را انتخاب کند که نقش مهمتری در خرید دارند. برای مثال، مدیرِ فروش به ما گفته است که به جای اینکه هر ۷بُعد را در تصمیم‌گیری دخالت دهیم، نیاز به ۳بُعد (۳ویژگی) داریم تا بتوانیم آن‌ها را بر روی یک رابطِ گرافیکی ۳بُعدی به نمایش دربیاوریم. پس در واقع نیاز داریم ۷بُعد را به ۳بُعد کاهش دهیم. به این کار در اصطلاح کاهش ابعاد یا Dimensionality Reduction می‌گویند. PCA می‌تواند این کار را برای ما انجام دهد. PCA با توجه داده‌ها و دامنه‌ی تغییراتِ هر کدام از آن‌ها، می‌تواند ویژگی‌هایی را انتخاب کند که تاثیر حداکثری در نتیجه نهایی داشته‌ باشند. در مثال بالا (فروشگاه)، فرض کنید ویژگی قد، تاثیر زیادی در اینکه یک فرد از فروشگاه خرید کند نداشته باشد. PCA این قضیه را متوجه می‌شود و در الگوریتمِ خود ویژگیِ قد را تا جای ممکن حذف می‌کند. در واقع در فرآیند تبدیلِ ۷ویژگی به ۳ویژگیِ نهایی (که با توجه به درخواست مدیرِ فروش به دنبال آن هستیم) PCA ویژگیِ قد را کمتر دخالت می‌دهد. این‌گونه است که ویژگی‌های مهمتر از نظر PCA وزن بیشتری در تولیدِ ویژگی‌های کاهش یافته پیدا می‌کنند.

البته این بدان معنا نیست که در فرآیند کاهش ابعاد، PCA دقیقا همان ویژگی‌ را حذف می‌کند. بلکه PCA توان این را دارد که به یک سری ویژگی جدید برسد. مثلا این الگوریتم ممکن است به این نتیجه برسد که افرادی که در شمال و غرب ایران زندگی می‌کنند و سنِ آن‌ها بالای ۴۰سال است، احتمال خرید بالایی دارند در حالی که برعکس این قضیه احتمال خرید را بسیار کمتر می‌کند. در واقع این‌جا PCA به یک ویژگی ترکیبی از محل تولد شخص و سن رسیده است. این دقیقا یکی از قدرت‌های الگوریتم PCA در کار بر روی داده‌ها است.

حال بگذارید کمی ریاضی‌تر به قضیه نگاه کنیم. برای سادگی فرض کنید داده‌های مشتریان ما کلا ۲بُعد دارند. سن و قد. حال (همان‌طور که در درس ویژگی چیست خواندید) آن‌ها را بر روی محور مختصات نمایش می‌دهیم. فرض کنید شکلی مانند شکل زیر تشکیل می‌شود:

هر کدام از نقاط آبی رنگ، در مثال ما یک مشتری است که با توجه به ویژگی سن (محور افقی) و ویژگی قد (محور عمودی) در صفحه مختصات رسم شده است. همان‌طور که از درس بردار ویژه (Eigen Vector) به یاد دارید، بردار ویژه می‌تواند کمک کند تا در میان داده‌های ما خطی کشیده شود که بیشترین دامنه تغییرات در امتداد آن خط رخ داده باشد. حال به تصویر زیر نگاه کنید:

هما‌ن‌طور که گفتیم هر کدام از نقاط آبی رنگ، در مثالِ ما یک مشتری است که با توجه به ویژگی سن (محور افقی) و ویژگی قد (محور عمودی) در صفحه مختصات رسم شده است. فاصله هر نقطه آبی تا خط قرمز را می‌توان به عنوان یک خطا (Error) در نظر گرفت و به تبعِ آن مجموعِ خطا برابر است با جمع فاصله تک تکِ نقاط آبی تا خط قرمز. به شکل زیر نگاه کنید، کدام تصویر (الف، ب یا ج) مجموع خطاهای کمتری دارند؟

کمی دقت کنید. فاصله نقاط نسبت به خط قرمز با خط با رنگ سبز مشخص شده‌اند. اگر جمع این فاصله (خطا – Error) را برای هر نمودار برابر خطای کلی داده‌ها نسبت به خط قرمز در نظر بگیریم، تصویرِ الف بیشترین میزان خطا را دارد و بعد از آن تصویر ب و در نهایت تصویر ج کمترین خطا را دارد. PCA به دنبال ساختنِ خطی مانند خط ج است (که در واقع همان بردار ویژه ماست) که کمترین خطا (Least Error) را داشته باشد. با این‌کار هر کدام از نقاط بر روی خط قرمز نگاشت می‌شوند و در تصویرِ بالا که ۲بُعدی است می‌توان این ۲بُعد را به ۱بُعد (که همان خط قرمز رنگ است) نگاشت کرد. در نهایت می‌تواند چیزی مانند شکل زیر رخ دهد:

در این مثال آخر ما ۲بُعد را به ۱بُعد کاهش دادیم. البته در مثال‌های واقعی ممکن است ۱۰۰۰بُعد را به ۲بُعد کاهش دهند تا بتوان آن را بر روی یک نمودار به نمایش درآورد و این کار با با PCA انجام دهند که هم از سرعتِ معقولی برخوردار است و هم کیفیت قابل قبولی دارد.