Ответ
В CatBoost я настраиваю регуляризацию через комбинацию гиперпараметров, чтобы контролировать переобучение и улучшать обобщающую способность модели.
Основные методы регуляризации в CatBoost:
-
Регуляризация весов листьев (
l2_leaf_reg):- Это L2-регуляризация (по умолчанию = 3). Штрафует большие значения в листьях деревьев.
- Увеличение этого параметра делает модель более консервативной.
-
Ограничение сложности деревьев:
depth: Максимальная глубина дерева (по умолчанию 6).min_data_in_leaf: Минимальное количество объектов в листе.
-
Стохастическое бустирование:
subsample: Доля случайно выбираемых объектов для построения каждого дерева (например, 0.8).colsample_bylevel: Доля случайно выбираемых признаков на каждом уровне (разделении) дерева.
-
Ранняя остановка (
early_stopping_rounds):- Обучение автоматически останавливается, если качество на валидационной выборке не улучшается заданное число итераций.
Пример конфигурации с регуляризацией:
from catboost import CatBoostClassifier
model = CatBoostClassifier(
iterations=1000,
learning_rate=0.05,
depth=5, # Ограничиваем глубину
l2_leaf_reg=5, # Усиливаем L2-регуляризацию
subsample=0.8, # Берём 80% данных для каждого дерева
colsample_bylevel=0.8, # Берём 80% признаков на каждом уровне
random_strength=1, # Добавляем случайность при выборе разделений
verbose=100
)
# Обучение с ранней остановкой
model.fit(
X_train, y_train,
eval_set=(X_val, y_val),
early_stopping_rounds=50, # Остановка, если 50 итераций без улучшения
use_best_model=True
)
Также CatBoost по умолчанию использует упорядоченное бустирование, которое само по себе снижает переобучение за счёт специального механизма обработки категориальных признаков и вычисления градиентов.