وبلاگ
الگوریتم جنگل تصادفی Random Forest چیست؟ راهنمای کامل Random Forest
الگوریتم جنگل تصادفی (Random Forest) یکی از پرکاربردترین الگوریتمهای یادگیری ماشین نظارتشده است که برای مسائل طبقهبندی (Classification) و رگرسیون (Regression) استفاده میشود. این الگوریتم با ترکیب تعداد زیادی درخت تصمیم (Decision Tree) تلاش میکند مدلی دقیقتر، پایدارتر و مقاومتر در برابر بیشبرازش (Overfitting) ایجاد کند.
ایده اصلی Random Forest بر پایه مفهوم یادگیری گروهی (Ensemble Learning) است؛ یعنی به جای اینکه تنها به یک مدل برای تصمیمگیری اعتماد کنیم، خروجی چندین مدل را با یکدیگر ترکیب میکنیم. در Random Forest این مدلها درختهای تصمیم هستند که هرکدام روی نمونهها و زیرمجموعههایی متفاوت از ویژگیها آموزش میبینند.
در مسئله طبقهبندی، پیشبینی نهایی معمولاً بر اساس رأی اکثریت درختها انجام میشود و در مسئله رگرسیون، خروجی درختها معمولاً با یکدیگر میانگینگیری میشود.
سرفصل محتوا:
الگوریتم Random Forest چیست؟
Random Forest یک الگوریتم یادگیری ماشین مبتنی بر Ensemble Learning است که از مجموعهای از درختهای تصمیم مستقل تشکیل میشود. هر درخت بخشی از دادههای آموزشی و بخشی از ویژگیها را به شکل تصادفی دریافت میکند و یک مدل تصمیمگیری ایجاد میکند.
زمانی که داده جدید وارد مدل میشود، تمام درختهای موجود در جنگل یک پیشبینی ارائه میکنند. سپس این پیشبینیها با یکدیگر ترکیب میشوند تا نتیجه نهایی به دست آید.
- در Classification، معمولاً کلاس دارای بیشترین رأی انتخاب میشود.
- در Regression، معمولاً میانگین پیشبینی درختها به عنوان خروجی استفاده میشود.
به همین دلیل، Random Forest معمولاً نسبت به یک Decision Tree منفرد، عملکرد پایدارتر و مقاومت بیشتری در برابر Overfitting دارد.
Random Forest چگونه از چند درخت تصمیم استفاده میکند؟
برای درک Random Forest ابتدا باید مفهوم Decision Tree را در نظر بگیریم. یک درخت تصمیم با تقسیم متوالی دادهها بر اساس ویژگیهای مختلف، تلاش میکند به یک تصمیم یا پیشبینی برسد.
مشکل یک درخت تصمیم منفرد این است که اگر بیش از حد با دادههای آموزشی سازگار شود، ممکن است دچار Overfitting شود. Random Forest با ساخت تعداد زیادی درخت متفاوت و ترکیب خروجی آنها، اثر این مشکل را کاهش میدهد.
برای مثال فرض کنید یک Random Forest شامل 100 درخت باشد. اگر برای یک نمونه جدید، 72 درخت کلاس A و 28 درخت کلاس B را پیشبینی کنند، خروجی نهایی در Classification کلاس A خواهد بود.
ایده اصلی Random Forest چیست؟
سه ایده مهم در پشت الگوریتم Random Forest قرار دارد:
- Bootstrap Sampling: ساخت نمونههای آموزشی متفاوت برای هر درخت.
- Random Feature Selection: انتخاب تصادفی زیرمجموعهای از ویژگیها هنگام ساخت درخت.
- Aggregation: ترکیب خروجی تمام درختها برای تولید پیشبینی نهایی.
ترکیب این سه ایده باعث میشود درختهای جنگل کاملاً مشابه یکدیگر نباشند و خطای یک درخت بتواند تا حدی توسط سایر درختها جبران شود.
Bootstrap Sampling در Random Forest چیست؟
یکی از مفاهیم مهم در Random Forest، Bootstrap Sampling است. در این روش برای آموزش هر درخت، نمونههایی از مجموعه داده اصلی به صورت تصادفی و معمولاً با جایگذاری (With Replacement) انتخاب میشوند.
در نتیجه ممکن است یک نمونه چند بار در داده آموزشی یک درخت ظاهر شود و برخی نمونهها اصلاً در داده آموزشی آن درخت قرار نگیرند.
به این نمونهگیری تصادفی، Bootstrap Aggregating یا Bagging گفته میشود و یکی از پایههای اصلی Random Forest محسوب میشود.
Bagging چیست و چه ارتباطی با Random Forest دارد؟
Bagging یک روش Ensemble Learning است که چند مدل را روی نمونههای مختلفی از داده آموزش میدهد و سپس خروجی آنها را با یکدیگر ترکیب میکند.
Random Forest را میتوان نسخهای توسعهیافته از ایده Bagging برای Decision Treeها در نظر گرفت؛ زیرا علاوه بر نمونهگیری تصادفی از دادهها، هنگام ایجاد تقسیمها نیز از زیرمجموعهای تصادفی از ویژگیها استفاده میکند.
Random Feature Selection چیست؟
در Random Forest تنها دادههای آموزشی برای درختها تصادفی نیستند؛ ویژگیهایی که در فرآیند تقسیم گرهها بررسی میشوند نیز به صورت تصادفی انتخاب میشوند.
فرض کنید مجموعه دادهای شامل 100 ویژگی داشته باشیم. الگوریتم مجبور نیست هنگام هر تقسیم تمام 100 ویژگی را بررسی کند؛ بلکه میتواند تنها بخشی از آنها را به صورت تصادفی در اختیار درخت قرار دهد.
این تصادفیسازی باعث افزایش تنوع بین درختها میشود و در نهایت میتواند به بهبود عملکرد Ensemble کمک کند.
Random Forest چگونه کار میکند؟
فرآیند کلی ساخت یک جنگل تصادفی را میتوان به چند مرحله تقسیم کرد:
1. انتخاب نمونههای تصادفی از دادهها
از مجموعه داده آموزشی، برای هر درخت یک نمونه Bootstrap ساخته میشود. این نمونه میتواند شامل برخی رکوردهای تکراری و برخی رکوردهای حذفشده باشد.
2. انتخاب تصادفی ویژگیها
در هر مرحله از ساخت درخت، تنها زیرمجموعهای از ویژگیها برای پیدا کردن بهترین Split بررسی میشوند.
3. ساخت درخت تصمیم
هر درخت با استفاده از داده و ویژگیهای انتخابشده ساخته میشود. این فرآیند برای تعداد مشخصی درخت تکرار میشود.
4. تکرار فرآیند برای تعداد زیادی درخت
الگوریتم تعداد زیادی Decision Tree ایجاد میکند. تفاوت دادهها و ویژگیهای استفادهشده باعث میشود درختها رفتار کاملاً یکسانی نداشته باشند.
5. دریافت پیشبینی تمام درختها
هنگام ورود یک نمونه جدید، نمونه به تمام درختهای موجود در جنگل داده میشود و هر درخت یک پیشبینی ارائه میکند.
6. ترکیب نتایج درختها
در Classification از رأیگیری و در Regression معمولاً از میانگینگیری استفاده میشود تا خروجی نهایی مدل به دست آید.
Random Forest در Classification
در مسائل طبقهبندی، هر درخت یک کلاس را برای نمونه ورودی پیشبینی میکند. سپس کلاسهایی که توسط درختها انتخاب شدهاند با یکدیگر مقایسه میشوند.
کلاسی که بیشترین رأی را به دست آورد، به عنوان پیشبینی نهایی Random Forest انتخاب میشود.
برای مثال اگر 10 درخت داشته باشیم و 7 درخت کلاس مثبت و 3 درخت کلاس منفی را انتخاب کنند، پیشبینی نهایی کلاس مثبت خواهد بود.
Random Forest در Regression
Random Forest فقط برای Classification نیست و میتوان از آن برای مسائل Regression نیز استفاده کرد.
در این حالت هر درخت یک مقدار عددی را پیشبینی میکند و خروجی نهایی معمولاً از میانگین پیشبینی تمام درختها به دست میآید.
به عنوان مثال، اگر پنج درخت مقادیر 20، 22، 21، 24 و 23 را پیشبینی کنند، میانگین این مقادیر میتواند خروجی نهایی مدل باشد.
مثال ساده Random Forest
فرض کنید میخواهیم پیشبینی کنیم که آیا فردی یک محصول خاص را خریداری خواهد کرد یا خیر. دادههای ما شامل ویژگیهایی مانند سن، درآمد، تعداد خریدهای قبلی و مدت زمان عضویت مشتری است.
Random Forest چندین Decision Tree ایجاد میکند. هر درخت با نمونهای متفاوت از مشتریان و زیرمجموعهای از ویژگیها آموزش میبیند.
برای یک مشتری جدید، هر درخت پیشبینی خود را ارائه میکند. اگر بیشتر درختها پیشبینی کنند که مشتری محصول را خریداری میکند، Random Forest نیز همین کلاس را به عنوان نتیجه نهایی انتخاب میکند.
مثال معروف Play Tennis و درخت تصمیم
یکی از مثالهای کلاسیک برای توضیح Decision Tree، پیشبینی امکان بازی تنیس بر اساس شرایط آبوهوایی است. ویژگیهایی مانند Outlook، Temperature، Humidity و Wind برای پیشبینی متغیر Play استفاده میشوند.
در یک Decision Tree، الگوریتم میتواند بر اساس معیارهایی مانند Entropy و Information Gain بهترین ویژگی را برای تقسیم دادهها انتخاب کند.
در Random Forest، به جای ساخت تنها یک درخت از کل دادهها، تعداد زیادی درخت با نمونهها و ویژگیهای متفاوت ساخته میشود و خروجی آنها در نهایت با یکدیگر ترکیب میشود.
Entropy و Information Gain در Random Forest
درختهای تصمیم میتوانند از معیارهای مختلفی برای انتخاب بهترین Split استفاده کنند. یکی از معیارهای شناختهشده Entropy است که میزان ناخالصی یا عدم قطعیت یک مجموعه را اندازهگیری میکند.
معیار Information Gain نیز نشان میدهد یک تقسیم تا چه اندازه توانسته است عدم قطعیت موجود در داده را کاهش دهد.
در پیادهسازیهای مختلف Random Forest میتوان از معیارهای دیگری مانند Gini Impurity نیز استفاده کرد.
تابع هدف Random Forest چیست؟
Random Forest مانند بسیاری از الگوریتمهای یادگیری ماشین یک تابع هدف واحد و ساده مانند K-Means ندارد؛ زیرا هر Decision Tree با توجه به معیار Split خود ساخته میشود و سپس خروجی درختها با یکدیگر Aggregation میشوند.
در Classification معیارهایی مانند Gini Impurity یا Entropy برای انتخاب Splitها استفاده میشوند و در Regression معیارهایی مانند کاهش واریانس یا خطای مربعات میتوانند نقش داشته باشند.
Out-of-Bag یا OOB چیست؟
یکی از ویژگیهای مفید Random Forest استفاده از نمونههایی است که در فرآیند Bootstrap برای آموزش یک درخت انتخاب نشدهاند. به این نمونهها Out-of-Bag یا OOB Samples گفته میشود.
از این دادهها میتوان برای ارزیابی عملکرد مدل استفاده کرد، بدون اینکه الزاماً برای هر ارزیابی به یک مجموعه Validation جداگانه نیاز باشد.
بنابراین OOB Score میتواند یک تخمین داخلی از عملکرد Random Forest ارائه کند.
Feature Importance در Random Forest چیست؟
یکی از مزیتهای مهم Random Forest امکان بررسی اهمیت نسبی ویژگیهاست. Feature Importance نشان میدهد هر ویژگی تا چه اندازه در تصمیمهای مدل نقش داشته است.
برای مثال در یک مدل پیشبینی خرید مشتری ممکن است درآمد و تعداد خریدهای قبلی اهمیت بیشتری نسبت به برخی ویژگیهای دیگر داشته باشند.
البته Feature Importance به معنی رابطه علت و معلولی نیست و نباید صرفاً بر اساس آن نتیجهگیری علّی درباره ویژگیها انجام داد.
پارامترهای مهم Random Forest
برای تنظیم عملکرد Random Forest، چند Hyperparameter اهمیت زیادی دارند:
n_estimators
تعداد درختهایی است که در جنگل ساخته میشوند. افزایش تعداد درختها معمولاً پایداری مدل را افزایش میدهد، اما هزینه محاسباتی و زمان آموزش را نیز بیشتر میکند.
max_depth
حداکثر عمق هر Decision Tree را مشخص میکند. محدود کردن عمق میتواند به کنترل پیچیدگی مدل کمک کند.
max_features
تعداد یا نسبت ویژگیهایی را مشخص میکند که هنگام پیدا کردن Split در هر گره بررسی میشوند.
min_samples_split
حداقل تعداد نمونههای لازم برای تقسیم یک گره را مشخص میکند.
min_samples_leaf
حداقل تعداد نمونههایی است که باید در یک Leaf باقی بمانند.
bootstrap
مشخص میکند آیا برای ساخت درختها از Bootstrap Sampling استفاده شود یا خیر.
چگونه تعداد درختهای Random Forest را انتخاب کنیم؟
افزایش تعداد درختها معمولاً باعث میشود پیشبینی جنگل پایدارتر شود، اما افزایش آن تا بینهایت لزوماً به معنی بهبود قابل توجه عملکرد نیست.
در عمل، مقدار مناسب n_estimators را میتوان با استفاده از Validation، Cross-Validation و بررسی هزینه محاسباتی تعیین کرد.
Random Forest و مشکل Overfitting
یکی از دلایل محبوبیت Random Forest، مقاومت نسبتاً خوب آن در برابر Overfitting در مقایسه با یک Decision Tree منفرد است.
چون مدل از تعداد زیادی درخت متفاوت تشکیل شده است، خطاها و نوسانهای یک درخت میتوانند تا حدی توسط سایر درختها خنثی شوند.
با این حال، Random Forest کاملاً از Overfitting مصون نیست و انتخاب نامناسب Hyperparameterها، دادههای بسیار نویزی یا طراحی نامناسب فرآیند آموزش میتواند عملکرد مدل را کاهش دهد.
کاربردهای الگوریتم Random Forest
تشخیص ریسک اعتباری در بانکداری
Random Forest میتواند برای پیشبینی ریسک اعتباری مشتریان و دستهبندی درخواستهای وام مورد استفاده قرار گیرد.
تشخیص تقلب
در سیستمهای مالی میتوان از Random Forest برای شناسایی الگوهای غیرعادی در تراکنشها و تشخیص احتمالی Fraud استفاده کرد.
پزشکی و زیستپزشکی
این الگوریتم میتواند برای Classification دادههای پزشکی، پیشبینی ریسک و بررسی اهمیت ویژگیهای مختلف مورد استفاده قرار گیرد.
بازاریابی و تقسیمبندی مشتریان
Random Forest میتواند برای پیشبینی رفتار مشتری، احتمال خرید، ریزش مشتری و پاسخ به کمپینهای بازاریابی استفاده شود.
تجارت الکترونیک
در E-commerce میتوان از آن برای پیشبینی خرید، امتیازدهی مشتریان و برخی مسائل مربوط به رفتار کاربران استفاده کرد.
پردازش دادههای جدولی
Random Forest یکی از گزینههای مناسب برای بسیاری از مسائل Tabular Data است، بهخصوص زمانی که رابطه بین ویژگیها و متغیر هدف پیچیده و غیرخطی باشد.
مزایای الگوریتم Random Forest
- قابل استفاده برای Classification و Regression است.
- معمولاً نسبت به یک Decision Tree منفرد مقاومت بیشتری در برابر Overfitting دارد.
- توانایی مدلسازی روابط غیرخطی را دارد.
- برای دادههای جدولی عملکرد مناسبی ارائه میدهد.
- نیاز کمتری به Scaling ویژگیها نسبت به الگوریتمهای مبتنی بر فاصله دارد.
- میتواند اهمیت نسبی ویژگیها را ارائه کند.
- با دادههایی با تعداد زیادی ویژگی قابل استفاده است.
- به دلیل Ensemble بودن، معمولاً مدل پایدارتری نسبت به یک درخت منفرد ایجاد میکند.
- امکان استفاده از OOB Evaluation را فراهم میکند.
معایب و محدودیتهای Random Forest
- تعداد زیاد درختها میتواند زمان آموزش و پیشبینی را افزایش دهد.
- مصرف حافظه آن میتواند نسبت به یک Decision Tree بیشتر باشد.
- تفسیر یک جنگل بزرگ دشوارتر از یک Decision Tree منفرد است.
- تنظیم Hyperparameterها همچنان برای رسیدن به عملکرد مناسب اهمیت دارد.
- در برخی مسائل با دادههای بسیار بزرگ، مدلهای دیگر ممکن است از نظر سرعت یا دقت مناسبتر باشند.
- Feature Importance استاندارد الزاماً نشاندهنده رابطه علّی بین ویژگی و هدف نیست.
آیا Random Forest به Feature Scaling نیاز دارد؟
در بیشتر کاربردهای معمول Random Forest، انجام Standardization یا Normalization برای ویژگیهای عددی ضروری نیست؛ زیرا Decision Treeها برای تقسیم دادهها از آستانههای ویژگی استفاده میکنند و مانند K-Means یا KNN مستقیماً بر اساس فاصله بین نقاط کار نمیکنند.
با این حال، آمادهسازی دادهها همچنان اهمیت دارد و باید متناسب با نوع داده، وجود مقادیر گمشده و سایر نیازهای پروژه انجام شود.
Random Forest در Python و Scikit-learn
کتابخانه Scikit-learn پیادهسازی آمادهای از Random Forest در اختیار توسعهدهندگان Python قرار میدهد. برای Classification میتوان از RandomForestClassifier و برای Regression از RandomForestRegressor استفاده کرد.
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(
n_estimators=100,
random_state=42
)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
در این مثال، مدل با 100 درخت ساخته شده و سپس روی دادههای آموزشی آموزش داده میشود. پس از آموزش میتوان از آن برای پیشبینی نمونههای جدید استفاده کرد.
Random Forest برای Classification و Regression
| ویژگی | Classification | Regression |
|---|---|---|
| هدف | پیشبینی کلاس | پیشبینی مقدار عددی |
| مدل Scikit-learn | RandomForestClassifier | RandomForestRegressor |
| ترکیب خروجی | رأیگیری | میانگینگیری |
تفاوت Random Forest و Decision Tree
Decision Tree تنها از یک درخت برای تصمیمگیری استفاده میکند، در حالی که Random Forest مجموعهای از درختهای تصمیم است.
یک Decision Tree معمولاً سادهتر و قابل تفسیرتر است، اما ممکن است نسبت به تغییرات داده حساس باشد. Random Forest با ترکیب چندین درخت، معمولاً پایداری و تعمیمپذیری بیشتری ایجاد میکند؛ در مقابل، هزینه محاسباتی و پیچیدگی آن بیشتر است.
تفاوت Random Forest با K-Means
Random Forest یک الگوریتم یادگیری نظارتشده است و برای آموزش به متغیر هدف یا Label نیاز دارد، در حالی که K-Means یک الگوریتم یادگیری بدون نظارت است که برای خوشهبندی دادههای بدون برچسب استفاده میشود.
| ویژگی | Random Forest | K-Means |
|---|---|---|
| نوع یادگیری | نظارتشده | بدون نظارت |
| کاربرد اصلی | Classification و Regression | Clustering |
| نیاز به Label | بله | خیر |
| تعداد مدلها | چندین Decision Tree | خوشهها و Centroidها |
چه زمانی از Random Forest استفاده کنیم؟
Random Forest انتخاب مناسبی برای بسیاری از مسائل دادههای جدولی است؛ بهخصوص زمانی که مسئله Classification یا Regression باشد و رابطه میان ویژگیها و متغیر هدف الزاماً خطی نباشد.
همچنین زمانی که یک Decision Tree منفرد بیش از حد به دادههای آموزشی حساس است، استفاده از مجموعهای از درختها میتواند انتخاب بهتری باشد.
چه زمانی از Random Forest استفاده نکنیم؟
Random Forest همیشه بهترین الگوریتم ممکن نیست. اگر تفسیرپذیری مدل اهمیت بسیار زیادی داشته باشد، یک Decision Tree ساده یا مدلهای خطی ممکن است گزینه مناسبتری باشند.
همچنین برای دادههای بسیار بزرگ یا مسائل خاص مانند تصاویر خام، متن و دادههای پیچیده، مدلهای تخصصیتر مانند Deep Learning یا روشهای دیگر ممکن است عملکرد بهتری داشته باشند.
Random Forest و Ensemble Learning
Random Forest نمونهای از Ensemble Learning است. ایده اصلی Ensemble Learning این است که ترکیب چند مدل میتواند نسبت به استفاده از یک مدل منفرد عملکرد بهتری داشته باشد.
در Random Forest، مدلهای پایه Decision Tree هستند و تصادفیسازی در دادهها و ویژگیها باعث ایجاد تنوع میان این مدلها میشود. سپس خروجی این درختها برای تولید یک تصمیم نهایی ترکیب میشود.
جمعبندی الگوریتم Random Forest
الگوریتم Random Forest یکی از الگوریتمهای قدرتمند و پرکاربرد یادگیری ماشین است که با ترکیب تعداد زیادی Decision Tree، یک مدل Ensemble ایجاد میکند. این الگوریتم هم برای Classification و هم برای Regression قابل استفاده است.
Random Forest با استفاده از Bootstrap Sampling، انتخاب تصادفی ویژگیها و ترکیب خروجی درختها تلاش میکند مدلی پایدارتر و مقاومتر در برابر Overfitting ایجاد کند.
از مهمترین کاربردهای آن میتوان به تشخیص تقلب، ارزیابی ریسک اعتباری، پیشبینی رفتار مشتری، پزشکی، بازاریابی و تحلیل دادههای جدولی اشاره کرد. همچنین قابلیتهایی مانند OOB Evaluation و Feature Importance باعث شدهاند این الگوریتم در بسیاری از پروژههای عملی به گزینهای قابل اتکا تبدیل شود.
سوالات متداول درباره Random Forest
Random Forest چیست؟
Random Forest یک الگوریتم یادگیری ماشین نظارتشده است که از تعداد زیادی Decision Tree تشکیل شده و با ترکیب خروجی آنها برای Classification یا Regression پیشبینی انجام میدهد.
آیا Random Forest یک الگوریتم یادگیری نظارتشده است؟
بله. Random Forest برای آموزش مدل به دادههای دارای متغیر هدف یا Label نیاز دارد و بنابراین در دسته الگوریتمهای Supervised Learning قرار میگیرد.
آیا Random Forest فقط برای Classification استفاده میشود؟
خیر. Random Forest هم برای Classification و هم برای Regression قابل استفاده است.
چرا Random Forest از چند Decision Tree استفاده میکند؟
ترکیب چند درخت متفاوت میتواند اثر خطا و نوسان یک درخت منفرد را کاهش دهد و معمولاً مدل پایدارتر و قابل تعمیمتری ایجاد کند.
آیا Random Forest دچار Overfitting میشود؟
Random Forest معمولاً نسبت به یک Decision Tree منفرد مقاومت بیشتری در برابر Overfitting دارد، اما کاملاً از آن مصون نیست. انتخاب Hyperparameterهای نامناسب و دادههای نامناسب همچنان میتواند باعث کاهش توانایی تعمیم مدل شود.
آیا برای Random Forest باید دادهها را نرمالسازی کنیم؟
در حالت معمول، Scaling ویژگیها برای Random Forest ضروری نیست؛ زیرا Decision Treeها مانند K-Means یا KNN بر اساس فاصله میان نقاط تصمیمگیری نمیکنند.
مهمترین Hyperparameterهای Random Forest کداماند؟
از مهمترین Hyperparameterها میتوان به n_estimators، max_depth، max_features، min_samples_split و min_samples_leaf اشاره کرد.
منابع
- Analytics Vidhya
- Breiman, L. (2001), Random Forests, Machine Learning, 45, 5–32.