بررسی اهمیت فیچرها
احتمالا تا حالا پیش اومده که میخواستید اهمیت فیچرها رو در یک تسک بسنجید. در چنین شرایطی استفاده از معیار feature_importance در دستهبندهای درختی مثل random forest شاید اولین گزینهای باشه که به ذهن آدم میرسه. در این دستهبندها با توجه به اینکه در هر گره فیچری برای جداسازی داده انتخاب میشه که بیشترین کاهش رو در معیار impurity داشته باشه، مهمترین فیچرها اونهایی هستند که به ریشه درخت نزدیکتر هستند. به عبارت دیگه فیچرهایی بیشترین importance رو بهدست میارند که بهصورت وزندار بیشترین کاهش رو در معیار impurity بر روی داده داشته باشند. اما لزوما اولین گزینه بهترین گزینه نیست. در واقع اگه شما در دیتاستتون فیچرهای categorical زیادی داشته باشید احتمالا این معیار، شما رو به اشتباه میندازه. در واقع دستهبندهای درختی به فیچرهای numerical که مقادیر unique value زیادی دارند حساستر هستند. به خاطر همین ممکنه در ایجاد درخت تصمیم به فیچرهای categorical اهمیت کمتری بدند. این موضوع بهخاطر اینه که این دستهبندها برای ایجاد درخت تصمیم از معیاری به نام impurity استفاده میکنند. مقدار feature importance که براساس معیار impurity در درختهای تصمیم حساب میشه میتونه ما رو به اشتباه بندازه. حالا چاره کار، استفاده از روش دیگهای به نام permutation_importance است. در این روش در هر iteration یک فیچر انتخاب میشه و مقادیر اون به صورت رندم shuffle میشه ( در هر نمونه ورودی مقادیر همه فیچرها ثابت میمونه و فقط یک فیچر بین نمونههای مختلف ورودی شافل میشه) و بعد، دیتاست شافلشده به مدل داده میشه تا ببینیم چه مقدار افت کیفیت پیدا میکنه. طبیعتا اون فیچری که بعد از شافل شدن افت عملکرد بیشتری رو به مدل تحمیل میکنه از اهمیت بالاتری برخورداره. همونطور که میبینید این روش model agnostic هست و بر روی هر مدل ازقبلترینشدهای کار میکنه. از طرفی میتونید این معیار رو هم بر روی مجموعه تست و هم مجموعه ترین محاسبه کنید در حالیکه impurity-based feature importanceها عملا بر روی داده ترین فقط محاسبه شدهاند. مقایسه اهمیت برخی فیچرها در دیتای تست و ترین و تفاوت اونها میتونه سرنخی از وقوع اورفیت باشه. در واقع فیچری که در دیتای ترین اهمیت بالایی داره ولی موقع تست و inference اهمیت پایینی داره میتونه باعث اورفیت بشه. پیادهسازی و نحوه استفاده از این روش رو در پکیج scikit میتونید مشاهده کنید.
لینک توضیح permutation_importance:
https://scikit-learn.org/stable/modules/permutation_importance.html#permutation-importance
پ.ن. از این به بعد یه هشتگ جدید راه انداختیم که توش میخوایم نکات نغز و دلکش تکنیکال رو بگیم. کانال رو به بقیه هم معرفی کنید.
#handsOn
@nlp_stuff
Post #277
3.79K