Знаешь ключевые реализации градиентных бустингов и их особенности?
Что проверяют
Работали ли вы с библиотеками руками или знаете только названия. Важно объяснить, чем реализации отличаются устройством деревьев и обработкой категорий, и вывести из этого выбор. Следом спрашивают, какие гиперпараметры вы настраиваете первыми и как боретесь с переобучением.
Как отвечать
- XGBoost: использует первую и вторую производные функции потерь и регуляризацию прямо в целевой функции (
lambda,alpha,gammaкак минимальный выигрыш для разбиения). Деревья по умолчанию растут по уровням. С версии 2.0 методhistстал методом по умолчанию, GPU включается параметромdevice="cuda". Для пропусков сам выбирает направление в разбиении, категории поддерживает черезenable_categorical; - LightGBM: гистограммы признаков и рост по листьям, когда расщепляется лист с наибольшим выигрышем. Поэтому главный параметр
num_leaves, а на малых данных нужно ограничиватьmin_data_in_leafиmax_depth. GOSS и EFB ускоряют обучение на больших разреженных данных. Категории принимает нативно, если их явно объявить; - CatBoost: симметричные (oblivious) деревья, где на одном уровне во всех узлах одно и то же разбиение. Отсюда быстрый инференс и встроенная регуляризация. Категории кодирует упорядоченными целевыми статистиками, а ordered boosting борется со смещением предсказаний. Хорош уже на параметрах по умолчанию;
HistGradientBoostingClassifierиз scikit-learn: гистограммный бустинг по мотивам LightGBM без выхода из экосистемы sklearn.
Выбор: много категорий с высокой кардинальностью ведут к CatBoost, скорость на больших объёмах к LightGBM, зрелая экосистема и распределённое обучение к XGBoost. Решает всё равно валидация на ваших данных.
Где спотыкаются
Называют жёсткий рейтинг вроде «LightGBM быстрее всех, CatBoost точнее всех». Скорость зависит от данных и параметров, а после перехода XGBoost на hist разрыв невелик.
Обучают фиксированное число деревьев без ранней остановки. Нужное число итераций зависит от learning rate, и без early stopping модель либо недообучена, либо переобучена.
Отдают LightGBM категорию целыми кодами, не объявив её категориальной. Модель ищет в кодах порядок, которого нет.