الگوریتم 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
الگوریتم XGBoost یک الگوریتم یادگیری باناظره بهخاطر قابلیتهاش در تنظیم خودکار، سرعت بالا در آموزش و قدرت پیشبینیاش، بهعنوان یکی از قدرتمندترین و مؤثرترین ابزارها در حوزه یادگیری ماشین شناخته میشه و کاربردهای فراوانی داره.
#Machine_Learning
#Xgboost
@DSLanders | دیاسلندرز
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2👌2
پکیج پایتون برای XGBoost که به دلیل سرعت و دقت بالا شهرت داره، برای حل مسائل طبقهبندی، رگرسیون و رتبهبندی به کار میره.
۱. نصب و وارد کردن پکیج XGBoost: در مرحله اول باید کتابخانه XGBoost رو نصب کرد. این کار با استفاده از pip انجام میشه.
pip install xgboost
بعد از نصب، به این صورت وارد میشه:
import xgboost as xgb
۲. آمادهسازی دادهها: دادهها باید به فرمت DMatrix تبدیل شن که فرمت دادهای اختصاصی XGBoost هست و برای بهینهسازی عملکرد طراحی شده.
train = xgb.DMatrix(X_train, label=y_train)
test = xgb.DMatrix(X_test, label=y_test)
۳. تنظیم پارامترها: پارامترهای XGBoost رو میشه به سه دسته کلی تقسیم کرد: پارامترهای عمومی، پارامترهای بوستر و پارامترهای مربوط به وظایف خاص.
params = {
'max_depth': 3,
'eta': 0.1,
'objective': 'binary:logistic',
'eval_metric': 'auc'
}
num_round = 100
- نوع مدلی که استفاده میشه رو booster مشخص میکنه. میتونه gbtree (درخت تصمیمگیری), gblinear یا dart باشه.
- تعداد رشتههای CPU برای اجرای XGBoost توسط nthread مشخص میشه. اگه با None تنظیم شه، XGBoost تعداد رشتههای موجود رو خودش تعیین میکته.
- نرخ یادگیری توسط eta مشخص میشه. مقدار کمش باعث میشه مدل به آرومی یاد بگیره.
- حداکثر عمق هر درخت با max_depth مشخص میشه و افزایش این مقدار مدل رو پیچیدهتر و قادر به یادگیری الگوهای دقیقتر میکنه.
- حداقل وزن مورد نیاز برای یک فرزند توسط min_child_weight مشخص میشه. مقادیر بزرگتر برای این پارامتر باعث کنترل بیشبرازش میشن.
- تابع هدف یا خطایی که باید بهینهسازی شه با objective مشخص میشه. مثلا binary:logistic برای طبقهبندی دو کلاسه کاربرد داره.
- معیار ارزیابی برای مجموعه دادههای اعتبارسنجی eval_metric هست. مثلا auc برای منطقه زیر منحنی ROC.
۴. آموزش و ارزیابی مدل: مدل با استفاده از دادههای آموزشی و پارامترهای تعیینشده آموزش داده میشه و با استفاده از دادههای تست عملکردش ارزیابی میشه.
bst = xgb.train(params, train, num_round)
preds = bst.predict(test)
۵. تنظیم دقیق مدل (Fine-tuning): XGBoost از روشهایی مثل cross-validation برای تنظیم دقیق پارامترها و جلوگیری از بیشبرازش پشتیبانی میکنه.
cv_results = xgb.cv(params, train, num_boost_round=100, nfold=3, metrics={'auc'}, early_stopping_rounds=10)
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_breast_cancer
from sklearn.metrics import accuracy_score
data = load_breast_cancer()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
train = xgb.DMatrix(X_train, label=y_train)
test = xgb.DMatrix(X_test, label=y_test)
params = {
'max_depth': 3,
'eta': 0.1,
'objective': 'binary:logistic',
'eval_metric': 'auc'
}
num_round = 100
bst = xgb.train(params, train, num_round)
preds = bst.predict(test)
predictions = [1 if value > 0.5 else 0 for value in preds]
accuracy = accuracy_score(y_test, predictions)
print(f"Accuracy: {accuracy * 100.0}%")
#Machine_Learning
#Xgboost
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3👌2
❓کوئیز شماره ۷۱: در XGBoost چطور میشه با استفاده از subsampling به کاهش بیشبرازش (overfitting) کمک کرد؟
Anonymous Quiz
32%
تنظیم پارامتر subsample به مقدار بزرگتر از 1
21%
تنظیم پارامتر colsample_bytree برای نمونهبرداری ستونها (column sampling) در هر درخت
26%
استفاده از پارامتر max_delta_step برای کاهش گامهای بزرگ در وزنهای درخت
21%
تنظیم پارامتر subsample به مقدار کمتر از 1
❤4👍3😎1
یک رویکرد عمومی تقویت گرادیان، الگوریتم (Gradient Boosting Machines) GBM هست که میتونه برای انواع کاربردها استفاده شه اما XGBoost یک پیادهسازی خاص از GBM هست.
#Machine_Learning
#Xgboost
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👌4👍3❤2
#Machine_Learning
#Xgboost
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👌5❤3👍2
❓کوئیز شماره ۷۲: کدوم گزینه در مورد تکنیکهای هرس کردن (Pruning) درختان در XGBoost و Random Forest صحیحه؟
Anonymous Quiz
25%
الگوریتم XGBoost با استفاده از تکنیک post-pruning درختان رو هرس میکنه.
25%
هر دو از هرس کردن درختان برای مقابله با overfitting استفاده نمیکنن.
17%
جنگل تصادفی از pre-pruning، یعنی اعمال محدودیتهایی در هر برگ قبل از کامل شدن درخت، استفاده میکنه.
33%
هر دو به صورت پیشفرض از post-pruning استفاده میکنن.
😎5❤3👌1
الگوریتم XGBoost یک الگوریتم مبتنی بر درخت تصمیمه، در حالی که روشهای یادگیری عمیق بر اساس شبکههای عصبی مصنوعی هستن. یعنی XGBoost نسبت به روشهای یادگیری عمیق، قابل تفسیرتره؛ چون ساختار درخت تصمیم نسبت به شبکههای عصبی برای درک آسانتره.
علاوه بر این، XGBoost برای تسکهای رگرسیون و طبقهبندی قابل استفاده است، در حالی که روشهای یادگیری عمیق معمولاً فقط برای تسکهای طبقهبندی به کار میرن. در نهایت، آموزش XGBoost به طور کلی سریعتر از روشهای یادگیری عمیقه؛ هرچند این میتونه بسته به دادههای خاص و پارامترهای مدل متفاوت باشه.
#Machine_Learning
#Xgboost
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤4👏1
#Weekend
#Machine_Learning
#Xgboost
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4👏3❤1🔥1
#Machine_Learning
#Dimensionality_Reduction
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍6👌1
کاهش ابعاد یا Dimensionality Reduction فرآیندیه که در طولش تعداد متغیرها یا ویژگیهای (Features) موجود در دادهها کاهش پیدا میکنه؛ بدون اینکه اطلاعات مهم و مرتبط با مسئله به طور قابل توجهی از دست برن.
- تجزیه مولفههای اصلی (PCA): محبوبترین روش برای کاهش ابعاد که با پیدا کردن مولفههای اصلی که بیشترین واریانس دادهها رو حفظ کنن، کار میکنه.
- تجزیه مقادیر منفرد (SVD): روشی که از تجزیه ماتریس برای کاهش بُعد استفاده میکنه.
- تعبیه چندبُعدی مقیاس (MDS): روشی که سعی داره فواصل بین نقاط در فضای کاهش یافته رو حفظ کنه.
- توزیع استوکاستیک همسایگی t-SNE: روشی محبوب برای کاهش بُعدیت که ساختارهای محلی دادهها رو حفظ میکنه و برای تصویرسازی دادههای پیچیده مفیده.
چالشهای کاهش ابعاد شامل انتخاب تعداد ابعاد مناسب برای کاهش، حفظ تمام اطلاعات مهم و اطمینان از اینکه کاهش ابعاد به تفسیرپذیری مدل آسیب نمیزنه، میشه.
#Machine_Learning
#Dimensionality_Reduction
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3👌3
❓کوییز شماره ۷۳: چطور عملکرد خوب یک الگوریتم کاهش ابعاد روی دیتاست ارزیابی میشه؟
Anonymous Quiz
38%
با توجه به افزایش دقت مدل بعد از کاهش ابعاد.
48%
زمانیکه الگوریتم تعداد زیادی از فیچرها رو حذف کنه؛ بدون اینکه اطلاعات زیادی از دست برن.
15%
کاهش زمان آموزش مدل بعد از کاهش بُعد.
0%
فقط بر اساس کاهش فضای ذخیرهسازی مورد نیاز برای دادهها.
😎5❤3👍2
روشهای کاهش بُعد دو دسته کلی دارن: روشهایی که فقط ویژگیهای مهم رو حفظ میکنن و روشهایی که ترکیب جدیدی از ویژگیها پیدا میکنن. در دسته اول، سه تکنیک وجود داره: حذف ویژگی به روش عقبگرد، انتخاب ویژگی به روش جلوگرد و جنگلهای تصادفی. در دسته دوم، دو زیر دسته از روشها وجود دارن: روشهای خطی و روشهای غیرخطی
اگه دادهها دارای روابط غیرخطی قوی باشن، استفاده از روشهای غیرخطی مثل Kernel PCA یا t-SNE مناسبه. در حالی که اگه دادهها به صورت خطی جدا بشن، استفاده از PCA یا LDA مؤثرتره. t-SNE برای مجموعههای دادههای بزرگ بسیار زمانبره و نیاز به تنظیم دقیق پارامترها داره.
در نهایت، هدف از کاهش بُعد اینکه بتوانیم دادههای پیچیده رو به شکلی سادهتر برای تحلیل و مدلسازی در یادگیری ماشین تبدیل کنیم. این کار نه تنها به بهبود عملکرد الگوریتمها کمک میکنه بلکه امکان تصویرسازی دادههایی که در فضاهای بُعد بالا قرار دارن رو هم فراهم میکنه. همچنین، با کاهش ابعاد، overfitting هم کاهش پیدا میکنه چون مدل کمتر توسط نویز و ویژگیهای غیرمرتبط تأثیر میپذیره.
#Machine_Learning
#Dimensionality_Reduction
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤4👌3👏1