Ответ
Использование ансамбля многих (сотни-тысячи) неглубоких деревьев (часто называемых "пнями" при глубине 1, или деревьями глубиной 3-6) является ключевым принципом градиентного бустинга (GBM), на котором построены XGBoost и LightGBM. Это не просто эвристика, а следствие математической формулировки метода.
Основные причины:
- Каждое дерево исправляет ошибки предыдущих: GBM обучается последовательно. Каждое новое дерево обучается не на исходных метках
y, а на градиенте (антиградиенте) функции потерь относительно предсказаний текущего ансамбля. По сути, оно учится предсказывать, в какую сторону и насколько нужно скорректировать текущее предсказание, чтобы уменьшить ошибку. Неглубокое дерево делает это небольшой, простой коррекцией, что предотвращает резкие, шумные изменения. - Контроль переобучения и улучшение обобщения: Глубокое дерево — сильный ученик, который может идеально подогнаться под обучающие данные, включая шум. В бустинге нам нужны слабые ученики (high bias, low variance), которые лишь немного лучше случайного угадывания. Ансамбль из тысяч таких слабых моделей, корректирующих ошибки друг друга, дает сильную модель с низкой дисперсией (меньшим риском переобучения).
- Вычислительная эффективность и интерпретируемость: Обучение неглубокого дерева намного быстрее. Кроме того, ограничение глубины (например,
max_depth=3) действует как мощный регуляризатор, упрощая настройку гиперпараметров.
Практический пример настройки в XGBoost:
from xgboost import XGBRegressor
# Типичная конфигурация: много неглубоких деревьев
model = XGBRegressor(
n_estimators=1000, # Большое количество деревьев
max_depth=4, # Небольшая глубина
learning_rate=0.05, # Небольшой шаг обучения (shrinkage)
subsample=0.8 # Стрижка строк для дополнительной регуляризации
)
# learning_rate и n_estimators связаны: уменьшая шаг, нужно увеличивать количество деревьев.