بلاگ

حل مسائل رگرسیون با استفاده از الگوریتم جنگل‌های تصادفی + کد پایتون

حل مسائل رگرسیون با استفاده از الگوریتم جنگل‌های تصادفی + کد پایتون

در این بخش بررسی خواهیم کرد که چگونه جنگل‌های تصادفی (Random Forests) می‌توانند برای حل مسائل رگرسیون با استفاده از Scikit-Learn به کار برده شوند.

تعریف مسأله

می‌خواهیم مصرف گاز (بر حسب میلیون گالن) در ۴۸ ایالت ایالات متحده را بر اساس مالیات بر بنزین (بر حسب سنت)، درآمد سرانه (دلار)، بزرگراه های آسفالت شده (بر حسب مایل) و نسبت جمعیت با گواهینامه رانندگی پیش‌بینی کنیم.

راه حل

برای حل این مسأله رگرسیون، از الگوریتم جنگل تصادفی با استفاده از  کتابخانه Scikit-Learn پایتون استفاده خواهیم کرد. این مراحل را دنبال کنید:

۱) کتابخانه‌ها را وارد کنید (Import Libraries)

برای وارد کردن کتابخانه‌های ضروری، کد زیر را اجرا کنید:

from sklearn import datasets
import pandas as pd
import numpy as np

۲) وارد کردن مجموعه داده‌ها (Importing Dataset)

ابتدا مجموعه داده‌ها را از اینجا دانلود کنید.

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

dataset = pd.read_csv(‘E:\petrol_consumption.csv’)

برای بدست آوردن یک دید کلی نسبت به مجموعه داده‌ها، کد زیر را اجرا کنید:

print(dataset.head())

همانطور که می‌ببینیم مقادیر موجود در مجموعه داده ما به خوبی scale نشده‌اند. بنابراین قبل از آموزش الگوریتم، آنها را scale down خواهیم کرد.

۳) آماده‌سازی داده‌ها برای آموزش (Preparing Data For Training)

در این بخش دو کار انجام خواهد شد. اولین وظیفه این است که داده‌ها را به مجموعه‌های ‘attributes’ و ‘label’ تقسیم کنیم. سپس داده‌های حاصل به مجموعه‌های آموزشی و تست تقسیم می‌شوند.

کد زیر داده‌ها را به ویژگی‌ها و برچسب‌ها تقسیم می‌کند:

X = dataset.iloc[:, 0:4].values
y = dataset.iloc[:, 4].values

در نهایت، داده‌ها را به مجموعه‌های آموزشی و تست تقسیم می‌کنیم:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

۴) به‌مقیاس‌رسانی ویژگی‌ها (Feature Scaling)

ما می‌دانیم که مجموعه داده‌های ما هنوز دارای مقادیر scale شده نیستند، به عنوان مثال فیلد Average_Income دارای مقادیری در محدوده هزاران است در حالی که Petrol_tax مقادیری در محدوده ده‌ها دارد. بنابراین، به‌مقیاس‌رسانی داده‌ها (اگر چه این مرحله برای الگوریتم‌های جنگل‌های تصادفی مهم نیست) مفید است. برای انجام این کار، از کلاس StandardScaler موجود در کتابخانه  Scikit-Learn استفاده خواهیم کرد. برای انجام این کار کد زیر را اجرا کنید:

۵) آموزش الگوریتم (Training the Algorithm)
اکنون که مجموعه داده‌های خود را scale کرده‌ایم، وقت آن است که الگوریتم جنگل تصادفی را برای حل مسأله رگرسیون آماده کنیم. کد زیر را اجرا کنید:

from sklearn.ensemble import RandomForestRegressor

regressor = RandomForestRegressor(n_estimators=20, random_state=0)
regressor.fit(X_train, y_train)
y_pred = regressor.predict(X_test)

کلاس RandomForestRegressor از کتابخانه sklearn.ensemble برای حل مسائل رگرسیون با استفاده از جنگل تصادفی استفاده می‌شود. مهمترین پارامتر این کلاس پارامتر n_estimators است. این پارامتر تعداد درخت‌ها را در جنگل تصادفی تعریف می‌کند. ما با n_estimator = 20 شروع خواهیم کرد تا ببینیم که چگونه الگوریتم ما عمل خواهد کرد.

شما می‌توانید جزئیات بیشتر برای همه پارامترهای RandomForestRegressor را در اینجا پیدا کنید.

۶) ارزیابی الگوریتم (Evaluating the Algorithm)

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

  • Mean Absolute Error
  • Mean Squared Error (MSE)
  • Root Mean Squared Error (RMSE)

برای پیدا کردن این مقادیر، کد زیر را اجرا کنید:

from sklearn import metrics

print(‘Mean Absolute Error:’, metrics.mean_absolute_error(y_test, y_pred))
print(‘Mean Squared Error:’, metrics.mean_squared_error(y_test, y_pred))
print(‘Root Mean Squared Error:’, np.sqrt(metrics.mean_squared_error(y_test, y_pred)))

خروجی چیزی شبیه به این خواهد بود:

Mean Absolute Error: 51.76500000000001
Mean Squared Error: 4216.166749999999
Root Mean Squared Error: 64.93201637097064

با ۲۰ درخت، RMSE برابر ۶۴.۹۳ است که بیشتر از ۱۰ درصد از مصرف متوسط بنزین یعنی ۵۷۶.۷۷ می‌باشد. این ممکن است نشان دهد که ما از درختان کافی استفاده نکرده‌ایم.

اگر تعداد estimator ها (درخت‌ها) به ۲۰۰ تغییر یابد، نتایج به شرح زیر است:

Mean Absolute Error: 47.9825
Mean Squared Error: 3469.7007375000007
Root Mean Squared Error: 58.90416570583103

نمودار زیر نشان‌دهنده کاهش مقدار خطای جذر میانگین مربعات (RMSE) با توجه به تعداد estimator ها می‌باشد. در اینجا محور X حاوی تعداد estimator است در حالی که محور Y حاوی مقدار RMSE می‌باشد.

شما می‌توانید ببینید که مقدار خطا با افزایش تعداد estimator ها کاهش می‌یابد. پس از ۲۰۰، نرخ کاهش خطا کاهش می‌یابد، بنابراین ۲۰۰ تعداد خوبی برای n_estimators است.

همچنین می‌توانید با تعداد درختان و پارامترهای دیگر بازی کنید تا ببینید آیا می‌توانید نتایج بهتری بدست آورید.

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