۱. ساخت درخت تصمیم: در مرحله اول یک کلاس برای هر درخت تصمیم مینویسیم. این کلاس مسئولیت یادگیری از دادهها و انجام پیشبینیها رو داره.
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
26%
نرخ یادگیری و تعداد دورههای آموزشی (epochs)
51%
تعداد درختان (n_estimators) و تعداد ویژگیهای در نظر گرفته شده برای هر تقسیم (max_features)
20%
تعداد نمونههای بوتاسترپ و عمق حداکثری درخت (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
23%
استفاده از نمودارهای درخت تصمیم به صورت تکی.
20%
تحلیل اجزاء اصلی (PCA) برای کاهش ابعاد ویژگیها.
27%
استفاده از تکنیک SHAP (SHapley Additive exPlanations) برای تحلیل اهمیت ویژگیها.
30%
تغییر 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
❓کوئیز شماره ۶۷: کدوم تکنیک زیر در پیادهسازی XGBoost برای کاهش overfitting به کار میره؟
Anonymous Quiz
18%
تقویت دادههای پرت
18%
کاهش سرعت یادگیری
38%
افزایش تعداد یادگیرندههای ضعیف
27%
هیچکدام
👌8😎2❤1🔥1
روشهای یادگیری گروهی با وجود افزایش دقت به منابع محاسباتی و هزینههای بیشتری نیاز دارن و گاهی پیچیدگی برای تفسیر و تحلیل ایجاد میکنن.
همچنین در صورتی که دادهها ناکافی یا پرنویز باشن، عملکرد پیشبینی رو مختل میکنن و در مواقعی که زمان محدوده یا دادهها ساده هستن، روشهای سریعتر یا سادهتر ترجیح داده میشن.
#Machine_Learning
#Xgboost
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👌4👍3
الگوریتم XGBoost (eXtreme Gradient Boosting) یکی از الگوریتمهای محبوب یادگیری ماشینه که برای حل مسائل طبقهبندی و رگرسیون استفاده میشه. این الگوریتم بر پایهی تقویت گرادیان (Gradient Boosting) کار میکنه و توانایی بالایی در برخورد با دادههای بزرگ و پیچیده داره.
تقویت گرادیان یک تکنیک یادگیری ماشینه که به صورت تکراری، مدلهای ساده (معمولا درختان تصمیم) رو ترکیب میکنه تا یک مدل پیچیدهتر و دقیقتر به دست بیاره. در هر مرحله، مدل جدید روی خطاهای مدلهای قبلی ساخته میشه.
در XGBoost، گرادیان نقش مهمی داره. هر مرحله در تقویت گرادیان، مدل رو بر اساس مشتق تابع هزینه نسبت به پیشبینیهای فعلی بهروز میکنه. این مشتق، گرادیان نام داره و نشوندهنده مراجلی هست که باید برای بهینهسازی مدل برداشته شه.
#Machine_Learning
#Xgboost
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7👌2👨💻1
❓کوئیز شماره ۶۸:در XGBoost، مدلها به صورت افزایشی آموزش داده میشن یعنی هر درخت به تدریج به مجموعه اضافه میشه. در این فرآیند، هدف اصلی چیه؟
Anonymous Quiz
10%
کاهش زمان آموزش برای هر درخت
45%
افزایش دقت پیشبینیها در هر مرحله
35%
اضافه کردن درختی که بهینهترین کاهش رو در تابع هدف ارائه میده
10%
ایجاد تنوع در مدلها برای کاهش بیشبرازش
👍5😎4❤1🤔1
یادگیری گروهی در زمینههای مختلفی مثل تشخیص بیماریها در پزشکی، پیشبینی قیمتها در بازارهای مالی، بهبود سیستمهای توصیهگر مثل در نتفلیکس و آمازون، و پیشبینی دقیقتر شرایط آب و هوایی به کار میروه. این تکنیکها به دلیل توانایی در ترکیب دادهها و پیشبینیها از چندین مدل مختلف، به افزایش دقت نهایی کمک میکنن.
#Machine_Learning
#Xgboost
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2🔥1
الگوریتم XGBoost در زمینههای مختلفی مسائل رگرسیون (پیشبینی مقادیر عددی) و طبقهبندی (مشخص کردن طبقهبندی) کاربرد داره.
برای رگرسیون، XGBoost با استفاده از مجموعهای از درختهای تصمیم به ساخت یک مدل قوی میپردازه که بتونه الگوهای پیچیدهای رو در دادهها تشخیص بده.
در طبقهبندی، هدف تشخیص دسته یا کلاسیه که نمونه بهش تعلق داره. XGBoost برای حل مسائل طبقهبندی دو کلاسه و چند کلاسی کاربرد داره.
در استفاده از XGBoost برای رگرسیون یا طبقهبندی، درک دقیق دادهها، پیشپردازش مناسب دادهها، و تنظیم دقیق پارامترها اهمیت بالایی داره. همچنین، استفاده از تکنیک Cross-Validation برای ارزیابی مدل و جلوگیری از بیشبرازش در بهبود عملکرد مدل مؤثره.
#Machine_Learning
#Xgboost
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👌3❤2
❓کوئیز شماره ۶۹: اگه قرار باشه از XGBoost برای مسئله طبقهبندی با دادههای نامتوازن استفاده شه؛ کدوم یک از پارامترهای زیر رو باید برای این هدف تنظیم کرد تا مدل بهترین عملکرد رو داشته باشه؟
Anonymous Quiz
29%
max_depth
26%
learning_rate
32%
scale_pos_weight
12%
colsample_bytree
😎7👍2❤1👌1
گاما یک پارامتر در XGBoost هست که کنترل میکنه هر درخت چقدر در خروجی نهایی تاثیر گذار باشه. مقدار بالاتر گاما به این معنی هست که هر درخت تأثیر بیشتری روی خروجی نهایی داره.
#Machine_Learning
#Xgboost
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍3👌3
برای پیادهسازی XGBoost از پایه در پایتون، باید مراحل زیر دنبال شن. XGBoost یک الگوریتم یادگیری ماشینه که بر اساس تقویت گرادیان کار میکنه.
class Node:
def __init__(self, feature_index=None, threshold=None, left=None, right=None, *, value=None):
self.feature_index = feature_index
self.threshold = threshold
self.left = left
self.right = right
self.value = value
کلاس Node برای مدلسازی هر کدوم از گرههای موجود در درخت تصمیم به کار میره. در این ساختار، گرههایی که در انتهای شاخهها قرار دارن و به عنوان برگهای درخت شناخته میشن، دارای یک مقدار مشخص (value) هستن. این در حالیه که بقیه گرهها، که وظیفه تقسیم دادهها رو دارن، دو ویژگی مهم دارن: شاخص ویژگی (feature_index) و آستانه تقسیمبندی (threshold). این دو مورد در تعیین نحوه جداسازی دادهها در هر گره غیر برگی نقش دارن.
class DecisionTree:
def __init__(self, max_depth):
self.max_depth = max_depth
self.root = None
def fit(self, X, y):
pass
def predict(self, X):
pass
def mse(y_true, y_pred):
return np.mean((y_true - y_pred) ** 2)
def mse_grad(y_true, y_pred):
return -2 * (y_true - y_pred) / len(y_true)
class XGBoost:
def __init__(self, n_estimators=100, max_depth=3, learning_rate=0.1):
self.n_estimators = n_estimators
self.max_depth = max_depth
self
.learning_rate = learning_rate
self.trees = []
def fit(self, X, y):
y_pred = np.zeros(len(y))
for _ in range(self.n_estimators):
tree = DecisionTree(max_depth=self.max_depth) #Calculation of gradients
grad = mse_grad(y, y_pred)
tree.fit(X, grad)
y_pred += self.learning_rate * tree.predict(X) #Update predicts
self.trees.append(tree)
def predict(self, X):
y_pred = np.zeros(len(X))
for tree in self.trees:
y_pred += self.learning_rate * tree.predict(X)
return y_pred
این کد فقط مهمترین کلاسها و توابع پیاده سازی XGBoost از Scratch هست و برای اجرا و نتیجه گرفتن ازش نیاز به بهبودهای بیشتری داره و باید توابع آموزش درخت رو تکمیل کرد. همچنین، میتونیم ویژگیهایی مثل تعداد برگها، نرخ یادگیری و بقیه پارامترهای تنظیم مدل رو اضافه کنیم.
#Machine_Learning
#Xgboost
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2🔥1
❓کوئیز شماره ۷۰: در XGBoost، کدوم روش زیر برای محاسبه اهمیت ویژگیها (Feature Importance) به کار نمیره؟
Anonymous Quiz
18%
میانگین افزایش خطا که توسط یک ویژگی ایجاد شده
18%
تعداد دفعات استفاده از یک ویژگی برای تقسیم در درختها
21%
میانگین افزایش دقت که توسط یک ویژگی ایجاد شده
43%
تحلیل مولفههای اصلی (PCA)
❤5👍3😎3