کاهش بعد سیگنال و تصویر (استخراج ویژگی) با تجزیه مولفه های اصلی (PCA) در متلب (قسمت اول)

کاهش بعد سیگنال و تصویر (استخراج ویژگی) با تجزیه مولفه های اصلی (PCA) در متلب (قسمت اول)

تجزیه به مولفه های اصلی (PCA) یک روش برای استخراج ویژگی از داده (سیگنال یا تصویر) می باشد. به تعبیر دیگر می توان با PCA کاهش بعد انجام داد. در ادامه منظور بعد تصویر یا سیگنال را توضیح خواهم داد، و سپس توضیحی اجمالی در رابطه با تجزیه به مولفه های اصلی و نحوه پیاده سازی آن در متلب خواهم داد.

بعد در سیگنال یا تصویر چیست ؟

بعد در واقع ویژگی ها یا برچسب هایی است که به یک شی ای نسبت می دهیم. برای نمونه کتاب های خود را در نظر بگیرید، همه آن ها کتاب هستند اما هرکدام ویژگی های خاص خود را دارند، مثلا در ابعاد، تعداد صفحات، عنوان کتاب و … متفاوت هستند، به هرکدام از این ویژگی های بعد گفت می شود. تعبیر ریاضی بعد به این صورت است که فرض کنید مکان رستوران های شهر در نقشه را دارید، برای تفکیک هر مکان نیاز به دو بعد دارید، x و y. با داشتن این دو پارامتر برای هر مکان قادر خواهید بود مکان هر رستوران را در نقشه پیدا کنید.

بنابراین برای یک سیگنال یا تصویر اینکه بعد را چه چیزی در نظر بگیریم اختیاری است. مثلا فرض کنید در مثال بالا برای هر مکان به جای دو بعد ، ویژگی های دیگری هم اضافه شود، مثلا زمان باز و بسته شدن رستوران، تعداد غذاهای موجود و غیره. با کنار هم قرار دادن این ویژگی ها پشت سر هم یک سیگنال تولید می شود، در واقع برای هر رستوران یک سیگنال خواهیم داشت که طول این سگینال ها با هم برابر است. برای دیگر سیگنال ها هم وضع به همین صورت است، مثلا یک سیگنال صوتی مربوط به کلمه “آب” را در نظر بگیرد. بعد این سیگنال صوتی برابر با طول سیگنال است. در بحث کلاس بندی تصاویر مخصوصا با PCA، پیکسل های هر تصویر را یک بعد در نظر می گیریم، یعنی اگر یک تصویر 50در50 داشته باشیم، تعداد بعد این تصویر برابر 2500 می شود.

 

کاهش بعد چیست ؟

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

 

مولفه های اصلی (Principle Components)  یا مولفه های اساسی

به زبان ساده این روش بردارهایی را پیدا می کند که داده ها در جهت آن بردارها بیشترین پراکندگی را داشته باشند. مولفه های اصلی (بردار اصلی ) دو ویژگی اساسی دارند: 1- تصویر داده ها روی بردارها بیشترین پراگندگی را داشته باشد 2- بردارهای اصلی برهم عمود هستند.

برای نمونه به تصویر زیر دقت کنید. در اینجا تعدادی داده دو بعدی داریم. بردار اصلی اول برداری است که تصویر داده ها روی آن بیشترین پراکندگی ( بیشترین واریانس) را داشته باشد و بردار اصلی دوم برداری عمود بر بردار اول است که تصویر داده ها روی آن بیشترین واریانس را بعد از بردار اول داشته باشد. تعداد بردارهای اصلی در صورتی که تعداد داده ها (مشاهدات) بیشتر از تعداد بعد داده باشد، برابر تعداد بعد داده است. در اینجا چون دوبعد داریم، دو مولفه اساسی هم داریم.

pca_example

محاسبه مولفه های اساسی (PCA)

روش های متفاوتی برای محاسبه این بردارها ارائه شده است، که هرکدام اثبات خاص خود را دارد اما در اینجا قصد دارم تنها یکی از روش های ساده محاسبه مولفه اساسی را توضیح دهم. اینکه چگونه این روش منجر به محاسبه مولفه اساسی می شود بحث دیگری است.

یکی از روش های ساده محاسبه مولفه های اساسی (PCA)، روش ماتریس کواریانس است. به صورت ساده، ابتدا لازم است ماتریس کواریانس داده ها را بدست آوریم. اگر ابعاد داده ورودی n و تعداد مشاهدات m باشد، ماتریس ورودی به صورت m*n می شود. ابعاد ماتریس کواریانس برابر n*n می شود. سپس باید مقادیر ویژه و بردارهای ویژه ماتریس کواریانس را بدست بیاوریم. تعداد مقادیر ویژه برابر n و ابعاد ماتریس بردارهای ویژه برابر n*n می شود. پس از آن کافی است، مقادیر ویژه را به ترتیب از زیاد به کم مرتب کنیم و مطابق با مقادیر ویژه، بردارهای ویژه مرتبط را هم مرتبط می کنیم. بردارهای ویژه مرتبط شده به ترتیب مولفه اساسی اول، دوم و … است.

دستورات متلب محاسبه مولفه های اساسی (PCA) با محاسبه مقدار ویژه و بردار ویژه ماتریس کواریانس به صورت زیر است:

در این برنامه W حاوی مولفه های اصلی است.

فضای مولفه های اساسی (تصویر داده ها روی مولفه های اساسی)

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

T=X*W;

به صورتی که T تصویر داده ها روی محورهای اساسی است و ابعاد آن برابر m*n است. با انجام عکس این عمل می توانیم به داده های اصلی برسیم.

X=T*Inv(W);

 

کاهش بعد با تجزیه مولفه های اساسی (dimension reduction using PCA)

تنها کاری که لازم است انجام شود این است که پس از بدست آوردن مولفه های اساسی (W)، N مولفه اساسی اول را جدا کرده و بقیه مولفه ها را حذف کنیم (N<n). و سپس با ضرب مولفه های باقی مانده در داده های اصلی، داده های تصویر شده با بعد کمتر را بازسازی کنیم.

TN=X*W(:,1:N);

به صورتی که TN داده های جدید با بعد کمتر را نشان می دهد، که کلاس بندی آن ها بسیار راحت تر است.

 

دستورات PCA در متلب

متلب دستوری دارد که برای ما مولفه های اساسی را برای ما حساب می کند، بدون اینکه نیاز باشد ماتریس کواریانس یا مقادیر و بردار ویژه را بدست آوریم. نحوه استفاده از دستور pca به صورت زیر است:

به صورتی که X داده ورودی است، که سطرها مشاهدات و ستون بعد را نشان می دهد. Wp بردارهای ویژه را در هر ستون جای داده است و Tp مقادیر تصویر شده داده ورودی را روی بردارهای ویژه نشان می دهد.

در صورت استفاده از مطالب این سایت لطفا به سایت ارجاع دهید
  1. سلام باتشکر فراوان از اقای شیری
    من جند سوال دارم..حالا اگه داده من دیتا بیس تصویر باشه اولا چجوری وارد کنم در متلب و دوما همونجور که فرمودید اگه تصویرم۵۰*۵۰ باشه این میش ه ۲۵۰۰ ویژگی..خود اون دستور اخر اون ر و کم میکنه و به دو بعد میرسونه ؟[Wp,Tp]=pca(X);
    بعد رو در دستور چجوری خودمون انتخاب کنیم
    میشه بمن ایمبیل بزنید؟

    • جواب سوالاتتون کامل داخل متن توضیح داده شده، کد هم با دقت بیشتری بررسی کنید، کد را خط به خط اجرا کنید و خروجی ها را مشاهده کنید، بسیاری از ابهاماتتون رفع خواهد شد.

  2. سلام خسه نباشید ممنون از مطالب مفیدتون
    ببخشید در مقایسه PCA که خود متلب انجام میدهد WP ;که بدست می اورد همان eigvec در برنامه شما هست TP چطور بدست امده؟

    • سلام، برای بدست آوردن تصویر نقاط روی بردار های بدست آمده کافی است که نقاط را در بردار به این صورت ضرب کنید: T=X*W;
      این موضوع در متن توضیح داده شده است.

  3. سلام
    در مورد تعیین N مناسب در دستور TN=X*W(:,1:N); توضیح میدید ؟ و اینکه آیا روش بهینه ای برای تعیین آن وجود دارد ؟

  4. سلام
    من یه دیتاست تصاویر چهره دارم که با الگوریتم pca فیچر های اون رو از 512 به 128 کاهش دادم.
    الان که یه نمونه تصویر جدید قراره با الگوریتم های دسته بندی مثل knn دسته بندی کنم فیچر هاش همون 512 هست !
    چطور میتونم روی یه دونه سمپل جدید الگوریتم pca رو اجرا کنم تا فیچر هاش رو به 128 کاهش بدم ؟

    • سلام، در مورد تعیین مقدار N مقالات متعدد در زمینه های مختلف وجود داره، که متاسفانه من اطلاعات چندانی در این زمینه ندارم. اما به هر حال N یک مقداری هست که بسته به تعداد کلاس ها و پیچیدگی تصاویر باید با سعی و خطا بدست بیاد

  5. سلام ببخشید من بررسی دو روش را انجام میدم تصویر حاصل از روش pca چه مشکلاتی ممکنه داشه باشه از نظر کیفیت اطلاعات مکانی وغیره

    • متوجه سوال نشدم. بیشتر توضیح بدید. باید این رو در نظر بگیرید که خروجی pca در صورتی که کاهش بعد صورت بگیرد، دیگر تصویر نیست به این دلیل که اطلاعات مهم نگه داشته شده است و بقیه حذف شده است.

  6. باسلامسپاس از مطالب مفیدتون
    بنده دانشجوی کارشناسی ارشد صنایع هستم
    به فایلی ک در اون PCA&FA(تجزیه و تحلیل مولفه های اساسی و تحلیل عاملی) و روابط آنها ب همراه مثال وجود داشته باشه نیاز دارم
    از مدیریت محترم سایت و همچنین کاربران تقاضا دارم تا در صورتیکه چنین فالی رو دارن ب آدرس ایمیل بنده ب نشانی e_parisoozh@yahoo.com ارسال نمایند
    با تشکر

  7. سلام
    تشکر بابت توضیحاتتون و سایت خوبتون
    یه سوالی داشتم ممنون میشم اگه اطلاعاتی دارید کمکم کنید … من از یه تصویر 12 تا ویژگی استخراج کردم حالا میخوام این 12 تا رو به 4 تا کاهش بدم با روش pca …. که در نهایت با روش شبکه عصبی بتونم این 4تارو آموزش بدم ….
    الان سوالم اینه که 12 تا ویژگی رو چجوری به pca بدم و تعیین کنم که 4 تا بشه ….
    coeff=pca([f1,f2,f3….f12],4)
    الان اینجوری که غلطه خوب … این 12 تا رو چجوری بنویسم که بفهمه
    پیشاپیش از نوع سوالم پوزش میخوام …خیلی احتیاج دارم کمکم کنید

    • سلام ، فرض کنید ورودی ها ماتریس x هست. بنابراین هر سطر یک مشاهده است و هر ستون یک بعد را نشون میده. در ضمن حواستون باشه که pca روی یک داده 12 بعدی جواب نمیده باید تعداد زیادی از این داده ها داشته باشید. و بعد از این دستور استفاده می کنید :
      [Wp,Tp]=pca(X);

      حالا لازم هست برای کاهش بعد تعداد N بعد دلخواه رو از W جدا کرده و در ورودی ضرب کنید یعنی به صورت زیر :
      TN=X*W(:,1:N);

      در نهایت TN رو می تونید به شبکه عصبی بدید.
      موفق باشید

دیدگاه شما

( الزامي )

(الزامي)