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

جنگل تصادفی (Random Forest)

1. تعریف جنگل تصادفی

  • جنگل تصادفی مجموعه‌ای از چندین درخت تصمیم است که به صورت تصادفی ساخته شده‌اند. برای هر نمونه‌ای که قرار است دسته‌بندی یا پیش‌بینی شود، هر درخت تصمیم یک رأی (پیش‌بینی) می‌دهد، و در نهایت نتیجه نهایی بر اساس اکثریت آرا (در دسته‌بندی) یا میانگین (در رگرسیون) تعیین می‌شود.
  • این الگوریتم به دلیل استفاده از چندین درخت، معمولاً نتایج دقیق‌تر و پایدارتری نسبت به یک درخت تصمیم واحد ارائه می‌دهد.

2. مراحل ساخت جنگل تصادفی

  • نمونه‌گیری با جایگزینی (Bootstrap Sampling): از داده‌های اصلی به صورت تصادفی نمونه‌هایی انتخاب می‌شود (با جایگزینی) و برای ساخت هر درخت استفاده می‌شود.
  • انتخاب تصادفی ویژگی‌ها: در هر گره از درخت، به جای استفاده از تمام ویژگی‌ها، تعداد مشخصی از ویژگی‌ها به صورت تصادفی انتخاب می‌شوند. این کار باعث می‌شود که درخت‌ها از همدیگر مستقل باشند و مدل به سمت بیش‌برازش نرود.
  • ساخت درخت‌های تصمیم: هر درخت به صورت مستقل با استفاده از داده‌های نمونه‌گیری شده و ویژگی‌های انتخاب شده ساخته می‌شود.
  • ترکیب نتایج: در نهایت، نتایج همه درخت‌ها ترکیب شده و نتیجه نهایی بر اساس اکثریت آرا یا میانگین تعیین می‌شود.

3. مزایا و معایب جنگل تصادفی

  • مزایا:
    • کاهش بیش‌برازش: با ترکیب چندین درخت، مدل مقاوم‌تر به بیش‌برازش می‌شود.
    • پایداری بالا: تغییرات کوچک در داده‌ها تأثیر زیادی بر نتیجه نهایی ندارند.
    • دقت بالا: به دلیل استفاده از مجموعه‌ای از مدل‌ها، دقت پیش‌بینی جنگل تصادفی معمولاً بالاست.
  • معایب:
    • پیچیدگی محاسباتی بالا: جنگل تصادفی به منابع محاسباتی زیادی نیاز دارد و برای داده‌های بزرگ ممکن است زمان‌بر باشد.
    • عدم قابلیت تفسیر ساده: برخلاف درخت تصمیم، تفسیر جنگل تصادفی به دلیل تعداد زیاد درخت‌ها مشکل‌تر است.

4. پیاده‌سازی جنگل تصادفی در پایتون

برای پیاده‌سازی جنگل تصادفی، می‌توانیم از کلاس RandomForestClassifier یا RandomForestRegressor در کتابخانه Scikit-Learn استفاده کنیم. در مثال زیر، از جنگل تصادفی برای دسته‌بندی داده‌ها استفاده می‌کنیم.

pythonCopy codefrom sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# بارگذاری داده‌ها
data = load_iris()
X, y = data.data, data.target

# تقسیم داده‌ها به آموزش و تست
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# تعریف و آموزش مدل جنگل تصادفی
model = RandomForestClassifier(n_estimators=100, criterion='gini')  # تعداد درخت‌ها 100
model.fit(X_train, y_train)

# پیش‌بینی و ارزیابی مدل
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

در این مثال، از داده‌های مجموعه زنبق (Iris) استفاده کردیم. پارامتر n_estimators تعداد درخت‌های تصمیمی را که در مدل استفاده می‌شوند تعیین می‌کند.

5. بهینه‌سازی جنگل تصادفی

  • تنظیم تعداد درخت‌ها (n_estimators): افزایش تعداد درخت‌ها معمولاً دقت مدل را بالا می‌برد، اما منابع محاسباتی بیشتری نیاز دارد.
  • تنظیم عمق درخت‌ها (max_depth): عمق درخت‌ها را می‌توان محدود کرد تا از بیش‌برازش جلوگیری شود.
  • انتخاب تعداد ویژگی‌ها (max_features): می‌توان تعداد ویژگی‌های انتخابی در هر گره را تنظیم کرد تا عملکرد مدل بهبود یابد.

فعالیت پیشنهادی:

  • از داده‌های جدیدی که دارای ویژگی‌های مختلف هستند استفاده کنید (برای مثال، مجموعه داده‌های مربوط به بیماری یا رفتار مشتریان) و جنگل تصادفی را برای دسته‌بندی آن‌ها پیاده‌سازی کنید. سپس تعداد درخت‌ها و سایر پارامترها را تغییر دهید و ببینید چگونه دقت مدل تغییر می‌کند.

الگوریتم بعدی: ماشین بردار پشتیبان (SVM)