جنگل تصادفی (Random Forest) در گروه الگوریتمهای باناظر قرار داره و برای حل مسائل طبقهبندی و رگرسیون استفاده میشه. این الگوریتم بر اساس ترکیب چندین درخت تصمیم کار میکنه و به عنوان یک روش یادگیری گروهی (Ensemble Learning) شناخته میشه.
هر درخت در "جنگل" سعی میکنه به طور مستقل یک پیشبینی انجام بده، و نتیجهی نهایی بر اساس میانگین یا اکثریت آراء این درختها به دست میاد. ایدهی اصلی پشت این الگوریتم اینکه با استفاده از چندین درخت تصمیم به جای یک درخت تصمیم، بشه پیشبینیهای دقیقتر و معتبرتری انجام داد.
#Machine_Learning
#Random_Forest
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👌2👨💻1
❓کوئیز شماره ۶۱: در مورد تأثیر تعداد درختان در یک جنگل تصادفی، کدوم گزینه صحیحه؟
Anonymous Quiz
9%
افزایش تعداد درختان همیشه به بهبود دقت مدل منجر میشه
17%
افزایش بیرویه تعداد درختان به کاهش سرعت یادگیری و پیشبینی بدون بهبود قابل توجه در دقت منجر میشه
14%
کاهش تعداد درختان معمولاً باعث افزایش دقت مدل میشه
60%
افزایش درختان تا یک حدی دقت رو بهبود میده اما بعد از اون بهبود دقت ناچیز و هزینه محاسبات بیشتر میشه
👍7❤2😎1
خطای Out-of-Bag یک روش ارزیابی عملکرد برای الگوریتمهای جنگل تصادفیه. در فرایند آموزش یک جنگل تصادفی، برای هر درخت تصمیم، یک نمونهگیری بوتاسترپ از دادههای آموزشی انجام میشه. یعنی بعضی از دادهها ممکنه چندین بار در نمونهگیری ظاهر شن، در حالی که بعضی دیگه اصلاً انتخاب نمیشن. دادههایی که در نمونهگیری برای یک درخت خاص استفاده نمیشن، خارج از کیسه (OOB) نام دارن.
پس از آموزش درخت، دادههای OOB برای ارزیابی عملکرد اون درخت به کار میرن، چون این دادهها در آموزش درخت شرکت نداشتن. با استفاده از OOB برای هر درخت، خطای OOB محاسبه میشه و بعد خطاهای هر درخت در جنگل تصادفی میانگینگیری میشه تا خطای OOB کلی محاسبه شه.
مزیت این روش اینکه نیازی به جدا کردن یک مجموعه تست جداگانه نیست و میشه یک تخمین از خطای تعمیم رو بدون استفاده از دادههای بیشتر به دست آورد. خطای OOB به عنوان یک روش در زمان تنظیم هایپرپارامترها کاربرد داره.
#Machine_Learning
#Random_Forest
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤔1👌1
در الگوریتم جنگل تصادفی، "تصادفی" به دو مکانیزم اصلی اشاره داره که برای افزایش تنوع در مدلهای درخت تصمیم و کاهش بیشبرازش استفاده میشه. این دو مکانیزم به این صورت هستن:
در جنگل تصادفی، هر درخت تصمیم بر اساس یک نمونه تصادفی از دادهها آموزش میبینه. این نمونهها از طریق فرایندی به نام Bagging انتخاب میشن. در Bagging، نمونههای گوناگون با جایگذاری از مجموعه داده اصلی انتخاب میشن، به این معنی که هر نمونه میتونه بیشتر از یک بار انتخاب شه. در نتیجه باعث میشه که هر درخت تصمیم با توجه به بخشی متفاوت و منحصر به فرد از دادهها آموزش ببینه.
زمان ساخت هر گره در درختهای تصمیم، به جای بررسی تمام ویژگیها برای انتخاب بهترین تقسیم، یک زیر مجموعه تصادفی از ویژگیها انتخاب میشه و بعد بهترین تقسیم از بین این زیرمجموعه ویژگیها انتخاب میشه. این فرایند به مدل اجازه میده که برای هر گره، تنوع بیشتری داشته باشه و به این ترتیب، از بیشبرازش جلوگیری میکنه و مقاومت در برابر نویز و تغییرات در دادهها رو افزایش میده.
این دو تعریف پشت "تصادفی" در جنگل تصادفی باعث میشن که این الگوریتم به عنوان یک مدل قوی و مقاوم در برابر Overfitting شناخته شه. ترکیب پیشبینیهای تمام درختها، که هر کدوم با توجه به نمونهها و ویژگیهای متفاوتی آموزش دیدن، منجر به ایجاد یک مدل نهایی میشه که هم دقت بالایی داره و هم قابلیت تعمیم خوبی به دادههای جدید داره.
#Machine_Learning
#Random_Forest
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍2👌1👨💻1
❓کوئیز شماره ۶۲: کدوم گزینه بهترین توصیف از اثر تصادفی در بهبود کیفیت مدل جنگل تصادفیه؟
Anonymous Quiz
62%
هر درخت به خطاهای مختلف دچار میشه و با ترکیب پیشبینی درختها، خطاها جبران و مدل دقیق حاصل میشه.
27%
تصادفی بودن باعث ساخت درختهای تصمیم مشابه میشه، که در نتیجه مدل نهایی دارای پایداری بیشتری میشه.
11%
تصادفی بودن در انتخاب نمونهها و ویژگیها تاثیری روی کیفیت مدل نهایی نداره و فقط برای کاهش محاسباته.
😎9👌4❤1🤔1
#Machine_Learning
#Random_Forest
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤4👨💻1
❓کوئیز شماره ۶۳: در مواجهه با دادههای نامتعادل در الگوریتم جنگل تصادفی، کدوم استراتژی معمولاً به کار میره؟
Anonymous Quiz
34%
استفاده از تکنیکهایی مثل نمونهبرداری بیشتر (Oversampling) یا نمونهبرداری کمتر (Undersampling)
20%
حذف ویژگیهای کم اهمیت
31%
استفاده از معیارهای تقسیم خاص مثل شاخص جینی
14%
افزایش عمق درختان
❤5😎3👍2
یکی از روشهای رایج اینکه در هر تقسیم (split)، درختهای تصمیمگیری از مقادیر دادهای که موجود هستن استفاده میکنن و مقادیر گمشده رو نادیده میگیرن.
یه روش دیگه اینکه مقادیر گمشده رو در زمان تقسیم به زیر گروهی اختصاص میده که بیشترین شمار (یا وزن) رو دارن. این روش به این دلیل مفیده که اجازه میده مدلسازی بدون نیاز به حدس زدن یا جایگزینی مقادیر گمشده پیش بره.
به طور کلی، جنگلهای تصادفی در مقایسه با الگوریتمهای دیگه نسبت به دادههای گمشده مقاومتر هستن، چون میتونن با استفاده از رایگیری اکثریت پیشبینیهای موثری ارائه بدن.
#Machine_Learning
#Random_Forest
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤2👌1👨💻1
جنگل تصادفی با ترکیب چند درخت تصمیمگیری و استفاده از تکنیکی به نام بوتاسترپینگ (Bootstrap Aggregation یا Bagging)، به نتایج قابل اطمینانی دست پیدا میکنه و کاربردهای زیادی داره.
#Machine_Learning
#Random_Forest
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8👌3👨💻1
❓کوئیز شماره ۶۴: در کدوم موارد، استفاده از جنگل تصادفی به دلیل قابلیتهای خاصش، مزیت رقابتی ایجاد میکنه؟
Anonymous Quiz
15%
پیشبینی نرخ تبدیل کاربر در وبسایتها با استفاده به دادههای رفتاری غیرساختار یافته
9%
ساخت مدلهای هواشناسی برای پیشبینی دمای روزانه
35%
کلاسبندی متون بر اساس نوع ژانر
41%
تحلیل علت و معلول در دادههای پزشکی برای شناسایی ریسکهای بیماری
❤4😎3👍2
جنگل تصادفی یکی از قدرتمندترین و پرکاربردترین الگوریتمها در زمینه یادگیری ماشینه. توی این پست بلاگ، اینکه جنگل تصادفی یا Random Forest چیه، چطور کار میکنه و چرا بهتر از درخت تصمیم هست رو بررسی میکنیم. همچنین به بعضی از کاربردها، مزایا و معایبش هم پرداختیم.
#Machine_Learning
@DSLanders | دیاسلندرز
Please open Telegram to view this post
VIEW IN TELEGRAM
👌6❤3👏1👨💻1
۱. ساخت درخت تصمیم: در مرحله اول یک کلاس برای هر درخت تصمیم مینویسیم. این کلاس مسئولیت یادگیری از دادهها و انجام پیشبینیها رو داره.
class DecisionTree:
def __init__(self, max_depth=None):
self.max_depth = max_depth
self.left = None
self.right = None
self.feature_index = None
self.threshold = None
self.label = None
def fit(self, X, y, depth=0):
# اگه دادهها همگی از یک کلاس هستن یا به حداکثر عمق رسیدیم
if len(set(y)) == 1 or depth == self.max_depth:
self.label = max(set(y), key=list(y).count)
return
# پیدا کردن بهترین تقسیم
best_feature, best_threshold = find_best_split(X, y)
if best_feature is None or best_threshold is None:
self.label = max(set(y), key=list(y).count)
return
self.feature_index = best_feature
self.threshold = best_threshold
# تقسیم دادهها
left_indices = X[:, best_feature] < best_threshold
X_left, y_left = X[left_indices], y[left_indices]
X_right, y_right = X[~left_indices], y[~left_indices]
# ساخت درخت برای زیر مجموعهها
self.left = DecisionTree(max_depth=self.max_depth)
self.left.fit(X_left, y_left, depth + 1)
self.right = DecisionTree(max_depth=self.max_depth)
self.right.fit(X_right, y_right, depth + 1)
def predict(self, X):
if self.label is not None:
return self.label
if X[self.feature_index] < self.threshold:
return self.left.predict(X)
else:
return self.right.predict(X)
در این کد،
fit
متدیه که برای آموزش درخت تصمیم استفاده میشه. این متد به صورت بازگشتی عمل میکنه و در هر مرحله بهترین ویژگی و آستانه برای تقسیم دادهها رو پیدا میکنه. predict
متدیه که برای انجام پیشبینیها با استفاده از درخت آموزش دیده استفاده میشه.۲. بوتاسترپینگ دادهها: برای بوتاسترپ کردن دادهها، میتونیم از تابع زیر استفاده کنیم. این تابع به صورت تصادفی نمونههایی از دادهها رو با جایگزینی انتخاب میکنه و به عنوان نمونه بوتاسترپ برمیگردونه.
def bootstrap_sample(X, y):
n_samples = X.shape[0]
indices = np.random.choice(n_samples, size=n_samples, replace=True)
return X[indices], y[indices]
۳. انتخاب ویژگیها: این تابع از بین همه ویژگیها، تعداد
max_features
ویژگی رو به صورت تصادفی انتخاب میکنه.def random_feature_indices(n_features, max_features):
return np.random.choice(n_features, max_features, replace=False)
۴. ترکیب پیشبینیهای درختها: این تابع برای ترکیب پیشبینیها در مسائل طبقهبندی از رایگیری اکثریت و در مسائل رگرسیون از میانگینگیری استفاده میکنه.
from statistics import mode, mean
def aggregate_predictions(predictions):
# برای طبقهبندی
if isinstance(predictions[0], (int, np.int64)):
return mode(predictions)
# برای رگرسیون
else:
return mean(predictions)
این مراحل اساسی و اولیهای هستن که برای ساخت یک جنگل تصادفی از Scratch نیاز هست.
#Machine_Learning
#Random_Forest
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤4👏2
❓کوئیز شماره ۶۵: برای بهینهسازی عملکرد جنگل تصادفی پیادهسازی شده از Scratch، کدوم هایپرپارامترها باید با دقت تنظیم شن؟
Anonymous Quiz
24%
نرخ یادگیری و تعداد دورههای آموزشی (epochs)
53%
تعداد درختان (n_estimators) و تعداد ویژگیهای در نظر گرفته شده برای هر تقسیم (max_features)
21%
تعداد نمونههای بوتاسترپ و عمق حداکثری درخت (max_depth)
3%
تعداد لایهها و تعداد نورونها در هر لایه (برای شبکههای عصبی)
😎6👌2🤔1
#Machine_Learning
#Random_Forest
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍3👨💻1
کتابخانه scikit-learn شامل ابزارهای مفیدی برای پیشپردازش دادهها، انتخاب ویژگی، تنظیم پارامترها و ارزیابی مدله که فرآیند توسعه و تحلیل مدلهای یادگیری ماشین رو آسون میکنه. در ادامه مراحل لازم برای پیاده سازی الگوریتم جنگل تصادفی از این کتابخانه رو با هم بررسی میکنیم.
۱. آمادهسازی دادهها: قبل از آموزش مدل، دادهها باید بارگذاری و به دو بخش آموزش و تست تقسیم شن.
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=42)
۲. ایجاد مدل جنگل تصادفی: مدل جنگل تصادفی با استفاده از
RandomForestClassifier
یا RandomForestRegressor
از کتابخانه scikit-learn
ایجاد و با دادههای آموزشی، آموزش داده میشه.from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
۳. ارزیابی مدل: نهایتا عملکرد مدل با استفاده از دادههای تست ارزیابی میشه.
from sklearn.metrics import accuracy_score
y_pred = model.predict(X_test)
print(accuracy_score(y_test, y_pred))
- n_estimators: تعداد درختها در جنگل. تعداد بیشتر عملکرد بهتری به همراه داره اما زمان محاسبه رو افزایش میده
- max_features: تعداد ویژگیهایی که باید در هر تقسیم در نظر گرفته شه. این مقدار تأثیر زیادی روی عملکرد مدل داره
- max_depth: حداکثر عمق درخت. مقدار کمتر میتونه به جلوگیری از بیش برازش کمک کنه
- min_samples_split: حداقل تعداد نمونههای مورد نیاز برای تقسیم یک گره
- min_samples_leaf: حداقل تعداد نمونههای مورد نیاز در یک برگ
- اهمیت ویژگیها (Feature Importance): جنگل تصادفی این امکان رو میده که بفهمیم کدوم ویژگیها بیشترین تأثیر رو روی پیشبینیها دارن.
feature_importances = model.feature_importances_
- مقابله با بیش برازش (Overfitting): استفاده از پارامترهای
max_depth
, min_samples_leaf
, و min_samples_split
در جلوگیری از Overfitting موثره.کد زیر یک مجموعه داده مصنوعی با ۱۰۰۰ نمونه و ۲۰ ویژگی ایجاد میکنه. بعد با استفاده از الگوریتم جنگل تصادفی در scikit-learn، مدلی آموزش داده میشه و دقتش روی دادههای تست محاسبه میشه. در نهایت اهمیت ویژگیها ارزیابی و سه ویژگی برتر نشون داده میشن.
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
import numpy as np
X, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_redundant=10, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print('Accuracy:', accuracy_score(y_test, y_pred))
feature_importances = model.feature_importances_
indices = np.argsort(feature_importances)[::-1]
top_three_indices = indices[:3]
top_three_importances = feature_importances[top_three_indices]
print('Top 3 feature indices:', top_three_indices)
print('Top 3 feature importances:', top_three_importances)
Top 3 feature indices: [ 2 13 7]
Top 3 feature importances: [0.12026529 0.10476057 0.10329556]
#Machine_Learning
#Random_Forest
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3👌1
❓کوئیز شماره ۶۶: کدوم روش میتونه برای تفسیر پیچیدگیهای مدلهای جنگل تصادفی در sklearn مفید باشه؟
Anonymous Quiz
21%
استفاده از نمودارهای درخت تصمیم به صورت تکی.
21%
تحلیل اجزاء اصلی (PCA) برای کاهش ابعاد ویژگیها.
28%
استفاده از تکنیک SHAP (SHapley Additive exPlanations) برای تحلیل اهمیت ویژگیها.
31%
تغییر max_depth به ۱ برای تبدیل همه درختها به stumps.
👍6👏2😎1
پارامتر bootstrap برای پیاده سازی جنگل تصادفی از scikit-learn نشوندهنده استفاده یا عدم استفاده از نمونهگیری با جایگزینی برای ساخت درختهاست.
وقتی bootstrap=True باشه، نمونهها با جایگزینی انتخاب میشن، که تنوع بیشتری به درختها و مقاومت بالاتری به مدل میدن. در حالت bootstrap=False تمام دادهها رو برای ساخت هر درخت به کار میبره و ممکنه خطر بیش برازش رو افزایش بده.
بهترین مقدار برای این پارامتر به دادهها و ویژگیهای مسئله بستگی داره و اکثرا توسط جستجوی شبکهای یا تصادفی تعیین میشه.
model = RandomForestClassifier(n_estimators=100, bootstrap=True, random_state=42)
#Machine_Learning
#Random_Forest
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👏2❤1
#Weekend
#Machine_Learning
#Random_Forest
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2👏1
Audio
توی این دوره به بررسی جامع مباحث دیتا ساینس و ماشین لرنینگ، از مقدماتی تا پیشرفته پرداخته میشه. شما با کلیک روی این لینک، میتونین گزارش روند پیشرفت کلاس رو مطالعه کنین.
#DS_Course
@DSLanders | دیاسلندرز
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2❤1👏1
#Machine_Learning
#Xgboost
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👌2🔥1
یادگیری ترکیبی (Ensemble Learning)، که به نام تجمیعی هم شناخته میشه، رویکردی در یادگیری ماشینه که در اون مدلهای مختلف برای حل یک مسئله خاص ترکیب میشن. هدف اینکه با ترکیب کردن تعدادی از مدلها، یک مدل نهایی قویتر، دقیقتر و قابل اعتمادتر از هر مدل انفرادی به دست بیاد. این رویکرد بر این فرض هست که ترکیب چند مدل میتونه نویز، واریانس و bias رو کاهش بده.
بعد با استفاده از روشهایی مثل رایگیری یا میانگینگیری، نتیجه نهایی به دست میاد. یک مثال معروف از Bagging، مدل Random Forest هست که در تشخیص بیماریها یا تحلیل ریسک مالی کاربرد داره.
همچنین از تکنیکهایی مثل AdaBoost و Gradient Boosting استفاده میکنه. XGBoost یکی از پیادهسازیهای محبوب Boosting هست که با استفاده از تکنیکهایی مثل gradient descent، عملکرد خودش رو بهینه میکنه.
روش Stacking معمولاً در وظایف طبقهبندی از logistic regression و در وظایف رگرسیونی از linear regression به عنوان متا-یادگیرنده استفاده میکنه، چون این مدلها توانایی خوبی در ترکیب پیشبینیهای مدلهای پایه دارن و میتونن نتایج نهایی رو بر اساس وزندهی به پیشبینیهای مختلف بهینهسازی کنن.
#Machine_Learning
#Xgboost
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3🔥1