مقدمه
در زمینه یادگیری ماشین، مدلهای رگرسیون برای پیشبینی مقادیر عددی پیوسته استفاده میشوند. یکی از الگوریتمهای قدرتمند و پرکاربرد در این حوزه، جنگل تصادفی (Random Forest) است که به عنوان یک روش ensemble (تجمعی) عمل میکند. در این مقاله، به بررسی جامع کلاس RandomForestRegressor از کتابخانه معروف Scikit-learn میپردازیم و نحوه استفاده از آن در حل مسائل رگرسیونی را با مثالهای عملی توضیح خواهیم داد.
جنگل تصادفی (Random Forest) چیست؟
جنگل تصادفی یک الگوریتم یادگیری ماشین است که از تعداد زیادی درخت تصمیم (Decision Tree) تشکیل شده است. هر درخت روی یک نمونه تصادفی از دادهها آموزش دیده و پیشبینی میکند. سپس، نتایج تمام درختها با هم ترکیب میشوند (معمولاً با میانگین گرفتن در مسائل رگرسیون)، تا یک پیشبینی دقیقتر و پایدارتر به دست آید.
در مورد رگرسیون، این روش به نام RandomForestRegressor در کتابخانه Scikit-learn پیادهسازی شده است.
مزایای RandomForestRegressor
- عدم نیاز به تنظیم دقیق هایپر-پارامترها: در مقایسه با مدلهای دیگر، جنگل تصادفی به طور کلی بدون تنظیم فراوان هایپر-پارامترها عملکرد خوبی دارد.
- مقاومت بالا نسبت به بیشبرازش (Overfitting): به دلیل استفاده از تعداد زیادی درخت و نمونهبرداری تصادفی، این مدل تمایل کمتری به بیشبرازش دارد.
- مدلسازی غیرخطی: قادر به مدلسازی روابط پیچیده و غیرخطی بین ویژگیها و متغیر هدف است.
- قابلیت محاسبه اهمیت ویژگیها: میتوان از جنگل تصادفی برای شناسایی ویژگیهای مهم استفاده کرد.
نحوه کارکرد RandomForestRegressor
هر درخت در جنگل تصادفی:
- روی یک زیرمجموعه تصادفی از دادهها (با جایگذاری – Bootstrapping) آموزش داده میشود.
- در هر گره، فقط زیرمجموعهای تصادفی از ویژگیها برای انتخاب بهترین ویژگی اسپلیت (split) در نظر گرفته میشود.
در مرحله پیشبینی، خروجی تمام درختها میانگین گرفته میشود و به عنوان نتیجه نهایی ارائه میشود.
استفاده از RandomForestRegressor در Scikit-learn
ابتدا مراحل اصلی استفاده از این کلاس را مرور میکنیم:
1. وارد کردن کتابخانهها
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
import numpy as np
2. بارگزاری و آمادهسازی دادهها
فرض کنید دادههایمان در قالب یک DataFrame به نام df موجود است و ستون هدف target نام دارد.
X = df.drop('target', axis=1)
y = df['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
3. ایجاد و آموزش مدل
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
4. پیشبینی و ارزیابی
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f'MSE: {mse:.2f}')
print(f'R2 Score: {r2:.2f}')
5. مشاهده اهمیت ویژگیها
import pandas as pd
feature_importances = pd.Series(model.feature_importances_, index=X.columns)
print(feature_importances.sort_values(ascending=False))
تنظیمات مهم (Hyperparameters)
برخی از پارامترهای مهم RandomForestRegressor عبارتند از:
| پارامتر | توضیح |
|---|---|
n_estimators | تعداد درختهای در جنگل |
max_depth | حداکثر عمق هر درخت |
min_samples_split | حداقل تعداد نمونهها لازم برای اسپلیت یک گره |
min_samples_leaf | حداقل تعداد نمونهها لازم در یک گره برگ |
max_features | حداکثر تعداد ویژگیها که برای اسپلیت در هر گره در نظر گرفته میشود |
مثال کامل
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
# دادههای نمونه
data = {
'feature1': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'feature2': [10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
'target': [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000]
}
df = pd.DataFrame(data)
X = df[['feature1', 'feature2']]
y = df['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f'MSE: {mse:.2f}')
print(f'R2 Score: {r2:.2f}')
کاربردهای عملی
- پیشبینی قیمت خانهها
- پیشبینی تقاضا در مدیریت زنجیره تأمین
- پیشبینی میزان فروش
- پیشبینی آلایندهها در محیط زیست
- پیشبینی عملکرد دانشجویان
نتیجهگیری
الگوریتم جنگل تصادفی (Random Forest) یکی از قدرتمندترین روشهای رگرسیون در یادگیری ماشین است که به خوبی میتواند با دادههای پیچیده و غیرخطی کار کند. کلاس RandomForestRegressor در Scikit-learn ابزاری کاربردی برای استفاده از این الگوریتم است که با سادگی و انعطافپذیری بالا، قابلیت استفاده در پروژههای مختلف را فراهم میکند.
با استفاده از این کلاس، میتوانید به راحتی مدلی قوی برای پیشبینی مقادیر عددی بسازید و حتی اهمیت ویژگیهای دادههایتان را نیز استخراج کنید.
منابع
- مستندات رسمی Scikit-learn: https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html
- کتاب “Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow” – Aurélien Géron