ماشین لرنینگ

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

آموزش پیاده سازی الگوریتم جنگل تصادفی (Random Forest) در ماشین لرنینگ

الگوریتم جنگل تصادفی (Random Forest) در ماشین لرنینگ چیست؟ در قسمت های قبل، الگوریتم درخت تصمیم (Decision tree) را پیاده سازی و سپس با تغییر عمق بهینه کردیم.

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

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

در این قسمت به معرفی و پیاده سازی یکی دیگر از الگوریتم های supervised در ماشین لرنینگ یعنی الگوریتم جنگل تصادفی (Random Forest) می پردازیم.

الگوریتم های ماشین لرنینگ
الگوریتم های ماشین لرنینگ

نحوه کار جنگل تصادفی

الگوریتم جنگل تصادفی، از تعداد زیادی درخت تصمیم تشکیل شده است. تصمیم نهاییی جنگل نیز حاصل رای اکثریت درختان جنگل است.

The random forest uses many trees, and it makes a prediction by averaging the predictions of each component tree.

شکل زیر را در نظر بگیرید. یک ورودی به مدل داده شده است، و دو درخت از سه درخت موجود، آن را سیب پیش بینی کرده اند. از آنجاییکه رای اکثریت سیب بوده است، پس تصمیم نهایی جنگل نیز سیب است.

الگوریتم جنگل تصادفی Random Forest
الگوریتم جنگل تصادفی Random Forest

الگوریتم جنگل تصادفی در پایتون

پیاده سازی جنگل تصادفی (Random Forest) با sklearn تفاوت چندانی با پیاده سازی درخت تصمیم (Decision tree)  ندارد. برای این کار کافی است از sklearn ابتدا RandomForestRegressor را فراخوانی کنیم و مدل خود را نیر برابر RandomForestRegressor ایجاد کنیم. در ادامه این تفاوت به صورت کد پایتون ارایه شده است.

 
#Decision tree
from sklearn.tree import DecisionTreeRegressor

dt_model = DecisionTreeRegressor(random_state=1)


#Random Forest
from sklearn.ensemble import RandomForestRegressor

rf_model = RandomForestRegressor(random_state=1)

در ادامه الگوریتم جنگل تصادفی (Random Forest) را بر روی داده های مربوط مشخصات و قیمت خانه ها پیاده سازی کرده و تفاوت نتیجه این الگوریتم و درخت تصمیم را بررسی می کنیم. کدهای مربوط به این قسمت به چهار بخش تقسیم شده است.

1. در این بخش، مطابق آنچه در قسمت های قبل گفته شد، فایل train.csv فراخوانی می شود.
ستون های زیر به عنوان ویژگی ها (features) و ورودی مدل انتخاب می شوند.
LotArea ،YearBuilt ،1stFlrSF ،2ndFlrSF ،FullBath ،BedroomAbvGr ،TotRmsAbvGrd
مجموعه داده به دو بخش کلی Training و Validation و چهار زیر مجموعه تقسیم بندی می شود. (دو بخش ویژگی ها و قیمت در Validation و دو بخش ویژگی ها و قیمت در Training)
سپس الگوریتم Decision Tree را ارجرا می کنیم.
و در پایان خطای MAE را محسابه می کنیم.

 
import pandas as pd
from sklearn.metrics import mean_absolute_error
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeRegressor

file_path = 'train.csv'
home_data = pd.read_csv(file_path)


y = home_data.SalePrice
features = ['LotArea', 'YearBuilt', '1stFlrSF', '2ndFlrSF', 'FullBath', 'BedroomAbvGr', 'TotRmsAbvGrd']
X = home_data[features]


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

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

val_predictions = dt_model.predict(val_X)
val_mae = mean_absolute_error(val_predictions, val_y)
print("Validation MAE for Decision tree, when not specifying max_leaf_nodes: {:,.0f}".format(val_mae))

نتیجه اجرای کد بالا به صورت زیر است.

Validation MAE for Decision tree, when not specifying max_leaf_nodes: 29,653

2. در ادامه عمق درخت تصمیم را برابر 100 قرار می دهیم و مجدد خطای MAE را محاسبه می کنیم.

 
dt_model_with_depth = DecisionTreeRegressor(max_leaf_nodes=100, random_state=1)
dt_model_with_depth.fit(train_X, train_y)
val_predictions = dt_model_with_depth.predict(val_X)
val_mae_with_depth = mean_absolute_error(val_predictions, val_y)
print("Validation MAE for Decision tree, with best value of max_leaf_nodes: {:,.0f}".format(val_mae_with_depth))

نتیجه اجرای کد بالا به صورت زیر است.

Validation MAE for Decision tree, with best value of max_leaf_nodes: 27,283

همانطور که مشاهده می شود مقدار خطا در نتیجه تغییر عمق درخت، کاهش یافته است.

3. در ادامه الگوریتم جنگل تصادفی (Random Forest) را پیاده سازی می کنیم.
دفت شود که بخش از آنجایی که این یک مطلب آموزشی است کدهای خطوط 1 تا 15 مجددا تکرار شده اند، و در صورتی که کدهای این مطلب را به صورت پیوسته از ابتدا اجرا نموده اید نیازی به نوشتن مجدد کدهای خطوط 0 تا 15 از این بخش نیست.

 
import pandas as pd
from sklearn.metrics import mean_absolute_error
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor

file_path = 'train.csv'
home_data = pd.read_csv(file_path)


y = home_data.SalePrice
features = ['LotArea', 'YearBuilt', '1stFlrSF', '2ndFlrSF', 'FullBath', 'BedroomAbvGr', 'TotRmsAbvGrd']
X = home_data[features]


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

rf_model = RandomForestRegressor(random_state=1)
rf_model.fit(train_X, train_y)

val_predictions = rf_model.predict(val_X)
rf_val_mae = mean_absolute_error(val_predictions, val_y)

print("Validation MAE for Random forest, when not specifying max_leaf_nodes: {:,.0f}".format(rf_val_mae))

نتیجه اجرای کد بالا به صورت زیر است.

Validation MAE for Random forest, when not specifying max_leaf_nodes: 21,857

4. در پایان برای آنکه تغییرات عملکرد مدل به صورت خلاصه مشاهده شود، خطاهای MAE را در سه حالت: درخت تصمیم (خط دوم)، درخت تصمیم با عمق تعیین شده (خط سوم) و جنگل تصادفی (خط چهارم) نمایش داده شده اند.

 
print("Summary:")
print("Normal Decision tree, MAE: {:,.0f}".format(val_mae))
print("Decision tree with max_leaf_nodes, MAE: {:,.0f}".format(val_mae_with_depth))
print("Normal Random forest, MAE: {:,.0f}".format(rf_val_mae))

نتیجه اجرای کد بالا به صورت زیر است.

Summary:
Normal Decision tree, MAE: 29,653
Decision tree with max_leaf_nodes, MAE: 27,283
Normal Random forest, MAE: 21,857

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

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

https://github.com/alifallahi/MachineLearning_Warmup/tree/master/Session6-housing-prices-problem-random-forest

علی فلاحی

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

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

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

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


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

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