ویژگی تصویر

آشنایی با کتابخانه xgboost در پایتون

  /  پایتون   /  کتابخانه xgboost در پایتون
بنر تبلیغاتی الف

کتابخانه xgboost یکی از قدرتمندترین پیاده‌سازی‌های الگوریتم گریدبوستینگ (Gradient Boosting) است که برای مسائل طبقه‌بندی و رگرسیون کاربرد فراوانی دارد. این کتابخانه به‌خاطر سرعت، بهینگی حافظه، قابلیت استفاده از GPU و امکانات تنظیم دقیق (hyperparameter tuning) مورد توجه متخصصان داده و مهندسان یادگیری ماشین قرار گرفته است.

ویژگی‌های کلیدی xgboost

  • سرعت آموزش بالا و پیاده‌سازی بهینه با C++
  • پشتیبانی از CPU و GPU (tree_method=’gpu_hist’)
  • قابلیت کار با داده‌های گمشده و وزن‌دهی نمونه‌ها
  • API ساده برای استفاده با scikit-learn و نیز API اختصاصی DMatrix
  • امکاناتی مثل early stopping، feature importance و مدل‌های باینری/متنی

نصب و آماده‌سازی

برای نصب xgboost کافی است از pip استفاده کنید:

pip install xgboost

پس از نصب می‌توانید از دو API اصلی استفاده کنید: کلاس‌های scikit-learn مانند XGBClassifier/XGBRegressor یا API سطح پایین xgboost.DMatrix و xgboost.train.

مثال پایه‌ای با XGBClassifier (scikit-learn API)

from xgboost import XGBClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

model = XGBClassifier(n_estimators=100, learning_rate=0.1, max_depth=4, use_label_encoder=False, eval_metric='logloss')
model.fit(X_train, y_train, early_stopping_rounds=10, eval_set=[(X_test, y_test)], verbose=False)

y_pred = model.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))

این کد از دیتاست سرطان سینه sklearn استفاده می‌کند. ابتدا داده را به آموزش و تست تقسیم می‌کنیم، سپس یک XGBClassifier می‌سازیم و با قابلیت early_stopping آموزش می‌دهیم تا اگر روی مجموعه اعتبارسنجی بهبود متوقف شد، از بروز بیش‌برازش جلوگیری شود. در انتها دقت مدل محاسبه می‌شود.

مثال پیشرفته: استفاده از DMatrix و xgboost.train

import xgboost as xgb
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

X, y = load_boston(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)

params = {
    'objective': 'reg:squarederror',
    'eta': 0.1,
    'max_depth': 5,
    'subsample': 0.8,
    'colsample_bytree': 0.8
}

evallist = [(dtest, 'eval'), (dtrain, 'train')]
bst = xgb.train(params, dtrain, num_boost_round=500, evals=evallist, early_stopping_rounds=20)
preds = bst.predict(dtest)
print("RMSE:", mean_squared_error(y_test, preds, squared=False))

در این مثال از API سطح پایین xgboost استفاده شده است. داده‌ها به DMatrix تبدیل می‌شوند که قالب بهینه‌ای برای xgboost است. پارامترها در دیکشنری params مشخص شده‌اند و با xgb.train مدل آموزش داده می‌شود. ارزیابی به‌صورت هم‌زمان روی مجموعه ارزیابی انجام می‌شود و early_stopping_rounds برای جلوگیری از آموزش اضافی استفاده شده است.

تنظیم ابرپارامترها (Hyperparameter Tuning)

تنظیم صحیح پارامترها می‌تواند تفاوت زیادی در عملکرد ایجاد کند. پارامترهای مهم عبارت‌اند از: learning_rate (یا eta)، n_estimators، max_depth، subsample، colsample_bytree، gamma، و scale_pos_weight برای داده‌های نامتعادل.

from sklearn.model_selection import RandomizedSearchCV
from xgboost import XGBClassifier
import numpy as np

param_dist = {
    'n_estimators': [100, 200, 300],
    'learning_rate': [0.01, 0.05, 0.1],
    'max_depth': [3, 5, 7],
    'subsample': [0.6, 0.8, 1.0],
    'colsample_bytree': [0.6, 0.8, 1.0]
}

xgb_clf = XGBClassifier(use_label_encoder=False, eval_metric='logloss')
rs = RandomizedSearchCV(xgb_clf, param_dist, n_iter=20, scoring='accuracy', cv=3, verbose=1, n_jobs=-1)
rs.fit(X_train, y_train)
print("Best params:", rs.best_params_)

این قطعه کد از RandomizedSearchCV استفاده می‌کند تا فضای پارامتری را با هزینه محاسباتی کمتر نسبت به GridSearch کاوش کند. با cv تقاطع‌صلی (cross-validation) استفاده شده و بهترین پارامترها بازگردانده می‌شوند.

عملکرد و نکات عملی

  • مدیریت داده‌های گمشده: xgboost قادر به کار با مقادیر NaN است و مسیر مناسب را به‌طور خودکار یاد می‌گیرد.
  • داده‌های نامتعادل: از پارامتر scale_pos_weight یا استفاده از نمونه‌برداری (sampling) بهره ببرید.
  • استفاده از GPU: برای دیتاست‌های بزرگ از tree_method=’gpu_hist’ استفاده کنید تا سرعت آموزش به‌طرز چشمگیری افزایش یابد.
  • مقادیر پیش‌فرض: همیشه قبل از تغییر پارامترها با مقادیر پیش‌فرض امتحان کنید و سپس بهینه‌سازی کنید.

جدول پارامترهای مهم

پارامترهدفتوصیه
learning_rate (eta)سرعت یادگیریمقادیر کوچک مانند 0.01-0.1 همراه با n_estimators بالا
n_estimatorsتعداد درخت‌هابا learning_rate کمتر افزایش دهید
max_depthعمق هر درختبرای جلوگیری از overfit معمولاً 3-10
subsampleنمونه‌برداری سطرها0.5-0.9 برای کاهش واریانس
colsample_bytreeنمونه‌برداری ستون‌ها0.5-1.0 برای تنوع‌بخشی در هر درخت

قابلیت‌های توضیح‌پذیری (Explainability)

xgboost ابزارهایی برای بررسی feature importance ارائه می‌دهد. علاوه بر آن می‌توان از SHAP برای تحلیل دقیق‌تر اثر هر ویژگی روی پیش‌بینی‌ها استفاده کرد که در پروژه‌های حساس به تبیین مدل بسیار مفید است.

مقایسه با سایر الگوریتم‌ها

  • XGBoost در مقابل LightGBM: هر دو سریع هستند؛ LightGBM ممکن است در دیتاست‌های خیلی بزرگ سریع‌تر باشد اما XGBoost پایداری و مستندسازی خوبی دارد.
  • در مقایسه با Random Forest: XGBoost معمولاً دقت بالاتری دارد ولی حساس‌تر به تنظیم پارامترها است.

نتیجه‌گیری

کتابخانه xgboost در پایتون یک ابزار بسیار قدرتمند برای مسائل یادگیری ماشین است که ترکیبی از سرعت، انعطاف‌پذیری و امکانات تنظیم دقیق را ارائه می‌دهد. با استفاده از APIهای sklearn و DMatrix می‌توانید به‌راحتی مدل‌های قوی‌ای تولید کنید و با تکنیک‌هایی مانند early stopping، regularization و hyperparameter tuning از آن‌ها بهینه‌ترین خروجی را دریافت کنید.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: