❓کوئیز شماره ۶۱: استفاده از پارامتر splitter= random در مقایسه با splitter= best چه مزایا و معایبی داره؟
Anonymous Quiz
74%
حالت random سریعتره اما ممکنه دقت کمتری داشته باشه، در حالی که best دقیقتره و زمان بیشتری میبره.
16%
هیچ تفاوت عمدهای بین این دو وجود نداره.
11%
حالت random برای دادههای با حجم کم مناسبتره.
0%
حالت best همیشه بهترین گزینه است و نباید از random استفاده شه.
😎7❤1👍1
نه max_depth حداکثر تعداد گره هاییه که یک درخت تصمیم میتونه داشته باشه. این پارامتر برای جلوگیری از رشد بیش از حد درخت و کاهش پیچیدگی استفاده میشه. هرس، فرآیند حذف گره ها از یک درخت تصمیمه که برای بهبود دقت درخت و کاهش احتمال بیش برازش انجام شه.
برای هرس درخت تصمیم در Scikit-learn، میشه از تابع ().prune استفاده کرد. این تابع دو پارامتر ورودی criterion و max_depth رو میگیره. برای مثال برای هرس یک درخت تصمیم با استفاده از شاخص Gini و عمق حداکثر 5، میشه از کد زیر استفاده کرد:
from sklearn.tree import DecisionTreeClassifier
classifier = DecisionTreeClassifier()
classifier.fit(X_train, y_train)
pruned_classifier = classifier.prune(criterion="gini", max_depth=5)
#Machine_Learning
#Decision_Tree
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👌1👨💻1
#Weekend
#Machine_Learning
#Decision_Tree
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👏3👍1
#Machine_Learning
#Random_Forest
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤4🔥1
Audio
@DSLanders | دیاسلندرز
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1🔥1
جنگل تصادفی (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