ماشین لرنینگ

دوره آموزش ماشین لرنینگ – قسمت چهارم

ارزیابی مدل ماشین لرنینگ Model Validation

موضوع اصلی این قسمت ایجاد مجموعه داده های training و validation و بررسی تاثیر آن با ارزیابی مدل ماشین لرنینگ Model Validation است. در قسمت دوم از دوره آموزشی ماشین لرنینگ، با درخت تصمیم (دسیژن تری – Decision tree) آشنا شدیم و در بخش پیاده سازی، مثال محاسبه قیمت خانه در ماشین لرنینگ را با استفاده از درخت تصمیم پیاده سازی کردیم. همانطور که مشاهده کردید مدل پیاده سازی شده توانست با دقت 100% قیمت خانه ها را درست پیش بینی کند، اما عملکرد بدون نقص، کاملا کاذب است و دلیل آن نیز یک اشتباه بسیار پایه ای در پیاده سازی مدل های ماشین لرنینگ است.

در قسمت قبل (قسمت سوم) از دوره آموزشی ماشین لرنینگ، نیز با معیار محاسبه میزان خطای جذر میانگین مربعات (Root Mean Squared Error) یا به اختصار RMSE به عنوان یکی از معیارهای ارزیابی رایج در مدل های ماشین لرنینگ برای مسایل رگرسیونی آشنا شدیم

لینک مشاهده دوره آموزش ماشین لرنینگ – قسمت دوم
لینک مشاهده دوره آموزش ماشین لرنینگ – قسمت سوم

برای یادآوری و جمع بندی، RMSE را بر روی نتایج الگوریتم درخت تصمیم اجرا می کنیم.

در تصویر زیر کد نهایی مربوط به نتایج درخت تصمیم را مشاهده می کنید. ردیف اول مربوط مقادیر پیش بینی شده و ردیف دوم شامل قیمت های واقعی و اصلی است که در فایل train.csv موجود بود.

مثال درخت تصمیم
مثال درخت تصمیم

فرمول خطای جذر میانگین مربعات یا RMSE نیز به صورت زیر است.

فرمول خطای جذر میانگین مربعات
فرمول خطای جذر میانگین مربعات

اگر بخواهیم این فرمول را بر روی نتایج اجرا کنیم (فقط همان 5 مورد را به عنوان نتایج در نظر گرفتیم)، خواهیم داشت:

ارزیابی مدل ماشین لرنینگ Model Validation
ارزیابی مدل ماشین لرنینگ Model Validation

 

مطابق نتیجه به دست آمده، مدل پیاده سازی شده توانست با دقت 100% قیمت خانه ها را درست پیش بینی کند. اما همانطور که قبلا هم گفته شد این عملکرد بدون نقص کاملا کاذب است و دلیل آن نیز یک اشتباه بسیار پایه ای در پیاده سازی مدل های ماشین لرنینگ است و آن هم چیزی نیست مگر:

ارزیابی مدل را دقیقا با همان داده هایی انجام بدهیم که در فاز اول برای ساخت مدل از آن ها استفاده کردیم.

Making predictions with training data and comparing those predictions to the target values in the training data.

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

تقسیم داده در یادگیری ماشین به داده های training و validation

راه حل این مسئله استفاده از دو گروه داده است. یک گروه برای یادگیری و ساخت مدل که با نام Training data شناخته می شود و یک گروه دیگر برای ارزیابی عملکرد مدل که به نام  Validation data شناخته می شود.

نسبت مجموعه داده فاز آموزش و یادگیری (Training) به مجموعه داده فاز  ارزیابی (Validation) اغلب 80 به 20 است. برای مثال اگر اطلاعات 1.000.000 خانه را در اختیار داشته باشیم، 800.000 را برای ساخت و آموزش مدل استفاده می کنیم و سپس ارزیابی را بر روی 200.000 خانه ای انجام می دهیم که مدل قبلا آن ها را مشاهده نکرده است.

اگرچه جداسازی داده ها و ایجاد مجموعه های Train set و Validation set به صورت دستی نیز امکان پذیر است، اما با استفاده از sklearn می توان به راحتی این کار را به صورت داینامیک انجام داد.

 

 

 کد پایتون برای تقسیم بندی داده ها به مجموعه های یادگیری و ارزیابی

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

همانطور که در خط سوم مشاهده می کنید، ما داده ها را به 4 گروه تقسیم می کنیم. فرض کنید تعداد 100 اطلاعات 100 خانه شامل متراژ، تعداد اتاق خواب و قیمت را داریم. هدف نیز محاصبه قیمت است. داده ها با نسبت 80 به 20 تقسیم کرده ایم، در این صورت:

  • train_X شامل متراژ و تعداد اتاق خواب 80 خانه است
  • train_y نیز شامل قیمت های آن 80 خانه است
  • val_X شامل متراژ و تعداد اتاق خواب 20 خانه دیگر است
  • val_y نیز شامل قیمت های آن 20 خانه است

در خط پنجم، مشخص می کنیم که می خواهیم از DecisionTreeRegressor استفاده کنیم.
در خط ششم، این مدل را بر روی داده های train_X و train_y یعنی فقط همان 80 خانه اجرا می کنیم.
دقت کنید که تا اینجا مدل ساخته شده، هیچ دسترسی به اطلاعات آن 20 خانه ندارد.
در خط هشتم، برای اینکه بتوانیم عملکرد مدل را برای داده هایی به غیر از آنچه با آن ها آموزش دیده است، ارزیابی کنیم، آن را بر روی اطلاعات 20 خانه اجرا می کنیم تا ببینیم چه قیمت هایی را برای آن ها پیش بینی می کند.
در پایان می توانیم برای مشخص کردن چگونگی عملکرد مدل، قیمت های پیش بینی شده برای آن 20 خانه را با قیمت های اصلی همان 20 خانه مقایسه کنیم.

 
from sklearn.model_selection import train_test_split

train_X, val_X, train_y, val_y = train_test_split(X, y, random_state=1)

splitted_model = DecisionTreeRegressor(random_state=1)
splitted_model.fit(train_X, train_y)

val_predictions = splitted_model.predict(val_X)

برای ارزیابی مدل از معیار MAE استفاده می کنیم. فرمول خطای میانگین مطلق یا MAE نیز به صورت زیر است.

میانگین خطای مطلق(Mean Absolute Error)
میانگین خطای مطلق(Mean Absolute Error)

این معیار نیز به سادگی از کتابخانه سایکیت لرن (scikit-learn) قابل فراخوانی است.

 
from sklearn.metrics import mean_absolute_error

splitted_MAE = mean_absolute_error(val_predictions, val_y)

print("\n MAE =", splitted_MAE)

در خط اول چهارم، خطای MAE بر اساس val_y یعنی قیمت های اصلی آن 20 خانه، و val_predictions یعنی قیمت های پیش بینی شده برای آن 20 خانه است.

فایل های مرتبط:

تمام کدهای مربوط به این قسمت که در فایل ویدیویی استفاده شده اند از لینک زیر قابل دسترس هستند:

https://github.com/alifallahi/MachineLearning_Warmup/tree/master/Session4-model-validation-train-test-split

علی فلاحی

علاقه مند به ماشین لرنینگ و ریکامندر سیستم.

نوشته های مشابه

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

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


The reCAPTCHA verification period has expired. Please reload the page.

دکمه بازگشت به بالا