Ответ
CatBoost имеет множество гиперпараметров для тонкой настройки. Вот основные, с которыми я чаще всего работаю:
Основные гиперпараметры:
iterations(n_estimatorsв sklearn-стиле): Количество деревьев в ансамбле. По умолчанию 1000.learning_rate: Темп обучения. Меньшие значения (0.01-0.1) обычно требуют больше итераций, но могут улучшить обобщающую способность.depth: Максимальная глубина деревьев. Контролирует сложность модели. По умолчанию 6.l2_leaf_reg: Коэффициент L2-регуляризации. Помогает бороться с переобучением.random_strength: Сила рандомизации при выборе разбиений. Полезен для увеличения разнообразия деревьев.border_count(max_bin): Количество границ для квантования числовых признаков. Большее значение может повысить точность, но замедлит обучение.loss_function: Функция потерь. Для классификации —Logloss,CrossEntropy. Для регрессии —RMSE,MAE,Quantile.cat_features: Список индексов или имен категориальных признаков. Ключевая особенность CatBoost — он эффективно обрабатывает их без предварительного кодирования.early_stopping_rounds: Количество раундов без улучшения метрики на отложенной выборке для остановки обучения.
Пример настройки для задачи бинарной классификации:
from catboost import CatBoostClassifier, Pool
# Создаем пул данных с указанием категориальных признаков
train_pool = Pool(X_train, y_train, cat_features=['category1', 'category2'])
eval_pool = Pool(X_val, y_val, cat_features=['category1', 'category2'])
model = CatBoostClassifier(
iterations=2000,
learning_rate=0.05,
depth=8,
l2_leaf_reg=4,
random_strength=0.5,
border_count=128,
loss_function='Logloss',
early_stopping_rounds=50,
verbose=100
)
model.fit(train_pool, eval_set=eval_pool)