مفهوم ویژگی، استخراج ویژگی ، بردار ویژگی و مشخصات ویژگی خوب


مفهوم ویژگی ، بردار ویژگی و استخراج ویژگی چیست؟

سلام.. ما در درس شناسایی آماری الگو، و درس یادگیری ماشین با اصطلاح ویژگی خیلی روبرو می‌شویم که یک بحث مهمی است.  برای اینکه بتوانیم یک مدل خوب طراحی کنیم لازمه که ویژگی خوبی استخراج کنیم، در این جلسه قصد داریم در مورد ویژگی صحبت کنیم و به سوالاتی از قبیل: ویژگی و استخراج ویژگی چیست؟ چرا باید ویژگی استخراج کنیم؟ و مشخصات ویژگی خوب چیست؟ پاسخ بدهیم.

در شناسایی آماری الگو، ویژگی به یک مشخصه یا خصوصیت قابل اندازه‌گیری از یک پدیده‌ای که مشاهده می‌کنیم گفته می‌شود. از هر پدیده ویژگی‌های مختلفی را اندازه‌گیری می کنیم که به آن پروسه استخراج ویژگی گفته ‌می‌شود.  سپس ویژگی های استخراج شده را کنار هم قرار می‌دهیم که به آن بردار ویژگی گفته میشود.

استخراج ویژگی در یادگیری ماشین

فرض کنید در مثال بالا از هر ماهی عرض و شدت روشنایی ماهی را به عنوان ویژگی در نظر بگیریم، این دو تا ویژگی را از تصویر ثبت شده ماهی اندازه گیری می کنیم و کنار هم قرار میدهیم که در واقع به آن بردار ویژگی می گوییم. سوال اینجاست که چرا باید ویژگی استخراج کنیم؟ آیا نمیتوان داده را مستقیما به مدل ارائه کرد؟ داده ای که تمام اطلاعات داخل آن هست!

بیان مثال برای استخراج ویژگی

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

 اگر خیلی ساده به مسئله نگاه کنیم در حالت ایده آل ما به چنین سیستمی نیاز داریم:

شناسایی چهره

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

حال نوبت این رسیده است که داده ها را به مدل ارائه دهیم تا مدل یاد بگیرد. اگر بخواهیم از شدت روشنایی هر پیکسل تصویر به عنوان ویژگی استفاده کنیم و  خود تصویر به عنوان ورودی به مدل ارائه دهیم، یعنی اطلاعات خود تصویر را مستقیما به مدل ارائه دهیم،  لازم است که در ابتدا تصویر را به یک بردار تبدیل کنیم تا بردار ویژگی آن تصویر ساخته شود و بعد به مدل ارائه دهیم. توجه داشته باشیم که مدل یادگیری ماشین ورودی بردار میگیرد نه ماتریس!

فرض کنید تصویر ورودی شما یک ماتریس 4*4 است، در این صورت به صورت زیر به یک بردار 1*16 تبدیل می‌شود.

تبدیل ماتریس به بردار

خب اگر تصویر ما یک ماتریس 50*50 باشد در آن صورت بردار ویژگی ما یک بردار 2500*1  خواهد شد! یک عدد بسیار بزرگ! حال اگر اندازه تصویر بزرگتر شود که این اندازه خیلی بزرگتر هم خواهد شد!

خب ایراد ارائه مستقیم داده خام به مدل در چیست ؟

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

2- وابستگی ویژگی ها به تغییرات

راهکار

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

کلاس بندی

برای مثال در تصویر زیر فاصله های بین نقاط کلیدی تصویر را به عنوان ویژگی در نظر بگیریم.

استخراج ویژگی های صورت

در این صورت هم مشکل پیچیدگی محاسباتی حل می شود و هم ویژگی هایی استخراج می کنیم که وابسته به تغییرات نباشند که این وابسته به شما خواهد بود که چه روشی را برای استخراج ویژگی استفاده کنید.

چه ویژگی هایی استخراج کنیم؟ مشخصات ویژگی خوب چیست؟

ویژگی خوب باید سه شرط زیر را داشته باشد:

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

ویژگی های خوب و بد در یادگیری ماشین

  • ویژگی ها از هم مستقل باشند. ویژگی ها اگر مستقل نباشند درواقع بحث افزونگی یا همان redundacy پیش می آید که باعث کاهش عملکرد سیستم می شود. ما ممکن است ویژگی های خوبی استخراج کنیم، ولی این ویژگی ها کنار هم اصلا نمی‌توانند خوب عمل کنند و در نتیجه کارایی مدل کاهش می یابد.

چطور ویژگی خوب استخراج کنیم؟

استخراج ویژگی یکی از مهمترین مراحل یادگیری ماشین است و اگر ما ویژگی خوبی استخراج نکنیم، الگوریتم تصمیم گیرنده ما هرچقدر هم که خوب باشد نمی تواند عملکرد خوبی داشته باشد! پس باید حوسمان باشد که ویژگی های خوبی به مدل تصمیم گیرنده ارائه بدهیم. ولی خب سوال اینجاست که من چگونه ویژگی خوب استخراج کنم؟؟ جواب: گوناگون(مزاح بود)

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

;کلاس بندی

پس در مرحله استخراج ویژگی، ویژگی ای که استخراج شده لزوما ویژگی خوبی نیست و باید در مرحله انتخاب ویژگی، ویژگی‌های خوب حفظ و ویژگی های بد حذف شوند!

مشخصات ویژگی خوب را هم در بالا توضیح دادیم. برای درک ساده مطلب شما را به مشاهده ویدیو دعوت می‌کنم.


 


دیدگاه ها

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

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

code

4 دیدگاه

  1. ناشناس

    باسلام، ممنونم از توضیحات خوبتان، بسیار جامع و کاربردی بود، من چند تا سوال برایم پیش آمده که اگر توضیح دهید ممنون میشم.
    ۱. شما یک جایی گفتید تا می‌توانید ویژگی از تصایر استخراج کنید، من متوجه نشدم که مثلا در نرم افزار متلب من خودم چه طور ویژگی استخراج کنم و به سیستم بدهم؟
    ۲.یک مسئه دیگری که میخواستم لطفا راهنمایی کنید من را این است که من باید با استفاده روش الگوی دودویی محلی و تهیه هیستوگرام از الگوی دودویی به استخراج ویژگی‌های تصویر بپردازم و باید از متغیرcount بر شدت پیکسل هاست استفاده کنم یا

    • مهتاب فرجی

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

      در تصویر میتونید از تابع imhist استفاده کنید.
      با حلقه for و ایجاد یک کانتر هم میتونید توزیع آماری تصویر رو حساب کنید.

  2. مهدی

    سلام
    مرسی از اطلاعاتتون
    من یک دیتاست دارم با 9 ویژگی عددی، می خواهم با استفاده از این 9 ویژگی تعداد ویژگی ها رو افزایش بدهم تا دقت دسته بندم افزایش یاید.
    چه روشی پیشنهاد می دهید؟

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