آنالیز مولفه اصلی (Principal Component Analysis) یا همان PCA چیست؟

مدرس: مسعود کاویانی

در دوره‌ی جبرخطی (Linear Algebra) بعد از مباحثِ پایه‌ی ماتریسی، بحث‌های کاربردی‌تری مانند SVD و ماتریس همبستگی را مطرح کردیم که به طورِ مستقیم در بسیاری از مسائل واقعی دنیای صنعت و تحقیقات علمی کاربرد دارند. در این درس می‌خواهیم به یکی از مباحثِ اصلی و پیشرفته‌تر در جبر خطی بپردازیم که به آن آنالیز مولفه اصلی (Principal Component Analysis) یا به اختصار PCA می‌گویند. همچنین کاربرد آن را در مسائلِ حوزه‌ی علوم‌داده (Data Science) مشاهده کنیم.

یکی از کاربردهای اصلیِ 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 انجام دهند که هم از سرعتِ معقولی برخوردار است و هم کیفیت قابل قبولی دارد.

منابع این بحث و اطلاعات بیشتر

» فصل دوم کتاب Deep Learning

» این پاسخ از وب‌سایت StackExchange

در صورت تمایل به یادگیری بیشتر، منابع بالا در نظر گرفته شده است. می توانید با خواندن این منابع، به یادگیری خود در این زمینه عمق ببخشید

51 دیدگاه دربارهٔ «آنالیز مولفه اصلی (Principal Component Analysis) یا همان PCA چیست؟»

  1. Notice: تابع register_meta به طورنادرست فراخوانی شد. هنگام ثبت یک نوع متای “آرایه” برای نمایش در REST API، شما باید الگو (schema) را برای هر مورد آرایه در “show_in_rest.schema.items” تعیین نمایید. لطفاً برای اطلاعات بیشتر، اشکال زدایی در وردپرس را مشاهده کنید. (این پیام در نگارش ۵.۳.۰ افزوده شده است.) in /home2/chistio/domains/chistio.ir/public_html/wp-includes/functions.php on line 4903 Notice: تابع register_meta به طورنادرست فراخوانی شد. هنگام ثبت یک نوع متای “آرایه” برای نمایش در REST API، شما باید الگو (schema) را برای هر مورد آرایه در “show_in_rest.schema.items” تعیین نمایید. لطفاً برای اطلاعات بیشتر، اشکال زدایی در وردپرس را مشاهده کنید. (این پیام در نگارش ۵.۳.۰ افزوده شده است.) in /home2/chistio/domains/chistio.ir/public_html/wp-includes/functions.php on line 4903

  2. سلام…ممنون از اطلاعات خوبتون
    میخاستم بدونم روش PLSDA چطوری عمل میکنه و چه تفاوت ها و شباهت هایی با PCA دارد؟
    ممنون میشم اگه راهنمایی کنید

  3. بسیار عالی و شایسته
    من پیشنهاد میکنم که برای توضیح بهتر PCA اول تبدیل wittening بعد corrolation و Normalization سپس LDA آموزش بدهید.
    PCA چیزی به غیرتبدیل Wittening نیست فقط egeinvetor و egeinvalue رو به جای استخراج از کواریانس ماتریس از حاصل ماتریس Sw-1*Sb=Sb/Sw استخراج میکنند.

  4. با تشکر خیلی خوب بود روش محاسبه این روش رو هم اگه با این زبان ساده توضیح بدین خیلی ممنون میشم

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

  6. این مبحث در حوزه ی یادگیری ماشین هست ؟ ببخشید میپرسم چون دارم در تحقیقم استفاده میکنم پرسیدم

  7. خواهشمندم سوالمو سریع جواب بدید چون مبهم هست . آیا از روش pca برای مسئله ای که ۲ ویژگی اصلی داره هم میشه استفاده کرد؟ مثلا برای تشخیص بدافزار اندروید که حیاتی ترین ویژگی مجوز ها و api هاست و این دو بعد حرف شدنی نیستن میتونیم از pca استفاده کنیم ؟؟؟؟

  8. سلام
    ممنون از دوره خوبتون
    ایا دوره جبر خطی ادامه پیدا میکنه؟ چه زمانی به روز میشه در این صورت؟
    باسپاس

  9. استاد شما بی نظیرید ازتون خیلی چیزا یاد گرفتم تدریستون دانشتون عالیه…دوره داده کاوی از سون لرن رو دارم باهاتون می گذرونم فوق العادس ممنونم ازتون.

  10. شاید من به اندازه کافی به ریاضی مسلط نیستم. شایدم چون برنامه نویسم و سعی میکردم نکات رو با مسائل واقعی منطبق کنم چیزی نفهمیدم ولی حس کردم توصیحتون افتضاح بود.
    .
    بیاین فرض کنیم میخوام از روی درامد n ماه گذشته، درامد ماه بعدی یک کسب و کار رو حدس بزنیم.
    چند تا مولفه داره.
    مثلا فروردین هر سال درامد بالا میره و اردیبهشت هر سال درامد افت میکنه.
    سال به سال هم متفاوته. مثلا امسال که تحریم ها شدید تر هست احتمالا افت درامد داریم.
    حالا میخوایم ببینیم تاثیر ماه چند درصده؟
    تاثیر سال چند درصده؟
    حالا اولا که اون ماتریس n*n چی میشه؟ (نمیدونم)
    فرض کنیم ما اطلاعات دوماه گذشته رو داریم. ماتریسمون میشه ۲*۲
    ولی اون خط الف و ب و ج رو نمیدونم چطوری محاسبه کردین؟
    بنظر من خیلی گنگ بود توضیحاتتون

  11. با عرض سلام و خسته نباشید بابت آموزش های عالیتون
    فقط یک نکته هست که من فکر میکنم به اشتباه بیان شده
    میزان خطا عمود بر خط رگرشن نیست؛ بلکه فاصله عمودی هر نقطه تا خط رگرشن است.
    با تشکر از مطالب مفیدتون

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *