در این مطلب می خواهیم در مورد مفاهیم بیش برازش (Overfitting)، کم برازش (Underfitting) صحبت کنیم.
دانش آموزی را در نظر بگیرید، که زبان انگلیسی بلد نیست اما تمام نمونه سوال های امتحان آیلتس را حفظ کرده است. در واقع اگر از نمونه سوال ها، امتحانی گرفته شود، این دانش آموزش عملکرد بسیار عالی خواهد داشت. چرا که او بدون داشتن دانش موردنیاز برای پاسخ به سوالات، در اثر تکرار، تنها شکل ظاهری سوال ها و پاسخ هایشان را به صورت چیدمانی از حروف و کلمات حفظ کرده است. در این وضعیت اصطلاحا Overfitting اتفاق افتاده است. یعنی فرد دانش واقعی درباره آن موضوع ندارد اما عملکردش بسیار قابل قبول است.
واضح است که اگر سوال های جدیدی به این فرد داده شود، عملکرد قبلی را نخواهد داشت.
در مورد Underfitting نیز فردی را تجسم کنید که حتی در هنگام مطالعه جزوه و نمونه سوال ها نیز نوانسته به نمره قابل قبولی برسد. چه برسد به امتحان اصلی :)
( به نظرم در فایل ویدیویی مثال رو بهتر توضیح دادم :) )
در این مثال ها، منظور از جزوه و نمونه سوال ها عملکرد مدل در داده های Training و منظور از امتحان اصلی داده های Validation است.
This is a phenomenon called overfitting, where a model matches the training data almost perfectly, but does poorly in validation and other new data.
When a model fails to capture important distinctions and patterns in the data, so it performs poorly even in training data, that is called underfitting.
در مورد الگوریتم درخت تصمیم، عمق درخت از جمله مواردی است که در بیش برازش (Overfitting)، کم برازش (Underfitting) تاثیرگذار است.
محور افقی نمودار زیر نشان دهنده عمق درخت تصمیم است. محور عمودی نیز مقدار خطای میانگین مطلق یا MAE را نشان می دهد. بدیهی است که هرچه مقدار MAE کمتر باشد، مدل عملکرد بهتری دارد.
همانطور که مشاهده می کنید، در مورد خط آبی که مربوط به داده های یادگیری و آموزش است، با افزایش عمق درخت، پس از محل مشخص شده، مقدار خطا دیگر تغییر چندانی نمی کند و مدل به سمت Overfit شدن پیش می رود.
در مورد منحنی قرمز رنگ که مربوط به داده های ارزیابی است، اگر محل مشخص شده را مدنظر قرار دهید مشاهده می کنید که تا قبل از علامت زرد رنگ، مقدار خطا روندی کاهشی داشته است اما پس از علامت زردرنگ مجدد خطا افزایش یافت است.
علامت زرد رنگ و خط عمودی رسم شده تقریبا در وسط نمودار، عمق مناسب درخت در این مثال است.
به طورخلاصه، افزایش عمق درخت تصمیم، خطر بیش برازش (Overfitting) را نیز افزایش می دهد.
در ادامه می خواهیم عمق مناسب را برای مثال مربوط به پیش بینی قیمت خانه که در قسمت های پیش نیز روی آن کار کرده ایم، اجرا کنیم.
قطعه کد شامل خواندن فایل دیتاست و ساخت مجموعه های Training و Validation است.
خطای MAE و درخست تصمیم را از sklearn فراخوانی می کنیم.
برای اینکه بتوانیم میزان خطای MAE برای عمق های مختلف درخت تصمیم را با هم مقایسه کنیم، یک تایع تعریف کرده ایم به اسم get_mae که به عنوان ورودی عمق درخت (max_leaf_nodes) و مجموعه های Train و Validation را دریافت کرده و خطای MAE را محاسبه می کنید.
در بخش پایین نیز یک حلقه for ایجاد شده است که چهار مقدار 5, 50, 500, 5000 را به عنوان عمق درخت به تابع get_mae ارسال می کند.
در خط آخر نیز مقدار عمق و MAE محاسبه شده براساس آن را پرینت می کنیم.
همانطور که از نتایج مشخص است، از عمق 5 به 50، مقدار خطا کم شده است، اما وقتی عمق از 50 بیشتر می شود خطا نیز بیشتر می شود.
به بیان دیگر، تا پیش از 50 کم برازش (Underfitting) و پس از 50 بیش برازش (Overfitting) داریم.
برای اینکه بتوان تفسیر بهتری از نتایج داشته باشیم، با استفاده از کد زیر نمودار مربوط به این داده ها را رسم می کنیم. محور افقی نشان دهنده عمق درخت و محور عمودی نیز شامل مقادیر خطای MAE است.
فایل های مرتبط:
تمام کدهای مربوط به این قسمت از لینک زیر قابل دسترس هستند:
دانلود فایل دیتاست train.csv از Kaggle
https://www.kaggle.com/c/home-data-for-ml-course/data?select=train.csv
توضیحات تکمیلی مرتبط با این مطلب