Underfitting and Overfitting

در انتهای این آموزش با مفهوم underfitting و overfitting آشنا میشویم و یاد میگیریم چطور ازشون برای افزایش دقت مدلمون استفاده کنیم.آزمایش با مدل های مختلف الان که یک راه حل برای اندازه گیری دقت مدلمون یاد گرفتیم، میتونیم مدل های دیگه هم آزمایش کنیم و ببینیم کدوم برای ما پیش بینی بهتری میکند.اما چه مدل های جایگزینی داریم؟با نگاه کردن داکیومنت های sckit-learn متوجه میشید که مدل درخت تصمیم گیری ویژگی های زیادی داره (بیشتر از چیزی که شما نیاز دارید) مهترین ویژگی تعیین عمقه.با یاد آوری دروس قبلی میفهمیم که عمق یعنی درخت ما چند بار به دسته های مختلف تقسیم شده (یا شکافته شده ؟!) مثلا این درخت یک درخت کم عمق محسوب میشه.در واقع داشتن 10 تقسیم بندی بین سطح بالایی (همه خانه ها ) و یک برگ غیر معمول نیس با عمیق تر شدن درخت مجموعه داده های ما به برگ هایی با تعداد خونه های کمتر تقسیم میشن. اگر درختی فقط یک تقسیم داشته باشه داده ها رو به دو گروه تقسیم میکنه ،اگر هر گروه دوبار تقسیم شوند 4 گروه خانه میگیریم و با تقسیم مجدد آنها به 8 گروه خانه میرسیم.اگر تعداد گروه ها را با اضافه کردن تقسیم بیشتر در هر سطح دو برابر کنیم تا زمانی که به سطح دهم میرسیم 1024 برگ و 210 گروه خانه داریم.وقتی خانه ها را به چندین برگ تقسیم میکنیم، خانه های کمتری نیز در هر برگ داریم برگ هایی که خانه های بسیار کمی دارن پیش بینی های میکنند ک کاملا به مقادیر واقعی آن خانه نزدیک است ،اما ممکنه پیش بینی های غیر قابل اعتمادی برای داده های جدید انجام دهند( زیرا هر پیش بینی فقط براساس چند خانه است).این پدیده ای است که بهش میگیم overfitting زمانی که مدل با داده های تمرینی به صورت کامل مچ میشه ولی رو داده های ارزیابی معمولا خراب میکنه! اگه درخت ما خیلی خیلی کم عمق باشه خانه ها به گره های خیلی مجزا تقسیم نمیشن .اگه خانه ها رو به 3 یا 4 گروه تقسیم کنیم باز هم با خانه های بسیار متنوعی طرف هستیم. نتایج پیش بینی ممکنه بسیار دور از انتظار باشه حتی تو داده های تمرینی هم ممکنه نتیجه خوبی نگیریم و در نهایت رو داده های ارزیابی هم نتیجه افتضاحی میگیریم.زمانی که مدل نتونه تمایز بین الگو های مهم توی داده ها رو ثبت کنه در داده های آموزشی هم ضعیف عمل میکنه به این حالت میگیم underfitting .از اونجایی که ما به دقت توی پیش بینی هامون که از داده های ارزیابی تخین زدیم اهمیت زیادی میدیم میخوایم یه نقطه دوست داشتنی بین underfitting و overfitting پیدا کنیم . یعنی ما در شکل زیر دنبال نقطه پایین نمودار قرمز هستیم.چند راه کار برای کنترل عمق درخت وجود دارد و بعضی از این راهکار ها اجازه میدهند بعضی از مسیر های درخت نسبت به بقیه عمق بیشتری داشته باشند. ولی آرگومان max_leaf_nodes یک راهکار معقولبرای کنترل overfitting وunderfitting ارائه میده.هرچه به مدل اجازه بدهیم تعداد برگ های بیشتری داشته باشه از ناحیه underfitting در گراف بالایی به سمت ناحیه overfitting حرکت میکنیم.ما میتونیم از یه تابع ابزار برای کمک به مقایسه امتیازات mea از مقادیر مختلف برای max_leaf_nodes استفاده کنیم:داده ها توی متغییر های train_X ,train_y,val_X و val_y ذخیره شدند . ما میتونیم یه حلقه for ایجاد کنیم تا دقت مدل های ساخته شده با مقادیر مختلف max_leaf_nodes رو با هم مقایسه کنیم.تو لیست بالا مقدار 500 مقار بهینه برای تعدا برگ هاست .یک نکته مهم اینه که مدلها ممکنه از موارد زیر هم رنج ببرن:overfitting: گرفتن الگوی جعلی که در آینده تکرار نخواهد شد و منجر به پیش بینی های کمتر دقیق میشودunderfitting :ناتوانی در درک الگو های مرتبط که باز هم منجر به دقت کمتر میشودما از داده های ارزیابی استفاده میکنیم که در آموزش استفاده نمیشهتا دقت مدل مورد نظر و اندازه بگیریم، این به ما این امکان را میدهد بسیاری از مدل های کاندید را انتخاب کنیم و بهترین و پیدا کنیم.آموزش اصلی رو میتونید از اینجا ببینید.