کتابخانه catboost در پایتون
CatBoost یکی از کتابخانههای قدرتمند یادگیری ماشینی برای دادههای جدولی است که توسط Yandex توسعه یافته است. این کتابخانه بهخصوص برای کار با ویژگیهای دستهای (categorical) بهینه شده و الگوریتمهای گرادیان بوستینگ را با روشهایی مثل ordered boosting و target statistics ترکیب میکند تا عملکرد بهتر و کاهش اورفیتینگ را فراهم آورد.
ویژگیهای کلیدی CatBoost
- پشتیبانی داخلی از ویژگیهای دستهای بدون نیاز به one-hot یا target encoding دستی.
- الگوریتم Ordered Boosting که برای مجموعههای کوچک یا با نشانهگذاری ترتیب متغیر، اورفیتینگ را کاهش میدهد.
- پشتیبانی از CPU و GPU و بهینهسازیهای سرعتی برای آموزش سریع روی دادههای بزرگ.
- API سازگار با scikit-learn، قابلیت گرفتن مقادیر اهمیت ویژگیها و پشتیبانی از چندکلاسه، رگرسیون و رتبهبندی.
- ابزارهای تفسیرپذیری مثل SHAP داخلی و get_feature_importance.
نصب و مثال ساده
pip install catboost
در مثال زیر از pandas و sklearn برای تقسیم داده استفاده میکنیم و یک مدل طبقهبندی ساده آموزش میدهیم:
from catboost import CatBoostClassifier, Pool
import pandas as pd
from sklearn.model_selection import train_test_split
df = pd.read_csv('data.csv') # فرض: شامل ستون 'target' و چند ویژگی
X = df.drop('target', axis=1)
y = df['target']
cat_features = ['gender', 'city'] # فهرست ستونهای دستهای
X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.2, random_state=42)
train_pool = Pool(X_train, y_train, cat_features=cat_features)
valid_pool = Pool(X_valid, y_valid, cat_features=cat_features)
model = CatBoostClassifier(
iterations=1000,
learning_rate=0.05,
depth=6,
eval_metric='AUC',
early_stopping_rounds=50,
verbose=100
)
model.fit(train_pool, eval_set=valid_pool)
model.save_model('catboost_model.cbm')
توضیح: کد بالا دادهها را بارگذاری، تقسیم و به کمک شیء Pool که فهرست ویژگیهای دستهای را میپذیرد، برای مدل فراهم میکند. پارامترهای مهم مانند iterations، learning_rate و depth تنظیم شدهاند و با early_stopping_rounds از آموزش بیش از حد جلوگیری میشود. در نهایت مدل ذخیره میشود.
استفاده از Pool و مدیریت ویژگیهای دستهای
بهترین روش برای دادن ویژگیهای دستهای به CatBoost، استفاده از کلاس Pool است که اطلاعات نوع ستونها و نمونههای اعتبارسنجی را نگهداری میکند.
from catboost import Pool
pool = Pool(data=X, label=y, cat_features=['city', 'device_type'])
توضیح: Pool ساختار دادهای بهینهشده برای CatBoost است که هنگام فراخوانی fit کمک میکند تا کتابخانه بداند کدام ستونها باید بهعنوان متغیر دستهای پردازش شوند.
اجرای آموزش روی GPU
model = CatBoostClassifier(
iterations=2000,
learning_rate=0.03,
depth=8,
task_type='GPU',
devices='0'
)
model.fit(train_pool, eval_set=valid_pool)
توضیح: با قرار دادن task_type='GPU' مدل از کارت گرافیک استفاده میکند که برای دادههای بزرگ و تعداد تکرار بالا بسیار سودمند است. پارامتر devices شماره دستگاه GPU را مشخص میکند.
تنظیمات ابرپارامتر و جستجوی شبکهای
پارامترهای کلیدی که معمولاً تنظیم میشوند عبارتند از: iterations, learning_rate, depth, l2_leaf_reg, border_count و bagging_temperature. نمونهای از جستجوی شبکهای ساده:
from sklearn.model_selection import GridSearchCV
from catboost import CatBoostClassifier
cbc = CatBoostClassifier(verbose=0)
params = {
'depth': [4, 6, 8],
'learning_rate': [0.01, 0.05],
'iterations': [500, 1000]
}
grid = GridSearchCV(cbc, params, cv=3, scoring='roc_auc')
grid.fit(X, y)
print(grid.best_params_, grid.best_score_)
توضیح: در این مثال از wrapper اسکیکیتلرن برای استفاده از GridSearchCV بهره میبریم. توجه کنید که برای دادههای بزرگ یا پارامترهای زیاد بهتر است از روشهای کارآمدتر مثل RandomizedSearchCV یا Optuna استفاده شود تا هزینه محاسباتی کاهش یابد.
تفسیرپذیری و SHAP
CatBoost امکان استخراج اهمیت ویژگی و نیز مقادیر SHAP را فراهم میکند که برای توضیح تصمیمات مدل مفید است.
# گرفتن اهمیت ویژگی
import numpy as np
feature_importances = model.get_feature_importance(train_pool)
features = X.columns
for f, imp in sorted(zip(features, feature_importances), key=lambda x: x[1], reverse=True)[:10]:
print(f, imp)
# گرفتن SHAP values
shap_values = model.get_feature_importance(type='ShapValues', data=valid_pool)
توضیح: get_feature_importance انواع مختلفی دارد؛ type='ShapValues' مقادیر SHAP را برمیگرداند که میتوان برای تفسیر محلی و کلی استفاده کرد. توجه کنید که خروجی SHAP ممکن است شامل یک ستون اضافی برای مقدار پایه (base value) باشد.
موارد کاربرد و بهترین شیوهها
- CatBoost برای مسائل طبقهبندی، رگرسیون و رتبهبندی روی دادههای جدولی بسیار مناسب است.
- اگر تعداد ویژگیهای دستهای زیاد و کاردینالیتی بالا است، CatBoost معمولاً بهتر از one-hot عمل میکند.
- برای مجموعههای کوچک یا دادههای دارای ترتیب زمانی، از ordered boosting و cross-validation مناسب استفاده کنید.
- همیشه از
early_stopping_roundsوeval_setبرای جلوگیری از overfitting بهره ببرید. - برای بهینهسازی زمان آموزش، از GPU و کاهش دقت پارامترها مانند
iterationsوdepthاستفاده کنید.
مقایسه سریع با XGBoost و LightGBM
| ویژگی | CatBoost | LightGBM | XGBoost |
|---|---|---|---|
| پشتیبانی از categorical | بومی، قوی | محدود (نیاز به تبدیل) | نیاز به تبدیل |
| سرعت آموزش | خوب (GPU) | بسیار سریع | خوب |
| مقابله با overfitting | ordered boosting | regularization های معمولی | regularization های معمولی |
نتیجهگیری
CatBoost انتخابی هوشمند برای مشکلات جدولی است، بهویژه زمانی که با ویژگیهای دستهای سروکار دارید یا مجموعه دادههای نسبتاً کوچک تا متوسط دارید. با رعایت نکات تنظیم پارامتر و استفاده از امکاناتی مانند Pool، GPU، و ابزارهای تفسیرپذیری میتوانید مدلهایی دقیق و قابلاعتماد بسازید.
آیا این مطلب برای شما مفید بود ؟




