Рассмотрим подробнее алгоритм xgBoost (Extreme Gradient Boosting [1]), представляющий собой эффективную реализацию градиентного бустинга со многими возможностями и настройками.
Основное отличие XGBoost от классического градиентного бустинга заключается в использовании разложения Тейлора второго порядка для аппроксимации функции потерь и явном включении штрафа за сложность дерева в оптимизационную задачу. Э то позволяет модели быстрее настраиваться и лучше обобщать данные.
Вспомним итерационный процесс: на шаге m мы ищем такое дерево fm(x), чтобы минимизировать общую ошибку. Запишем целевую функцию L на m-й итерации:
L(m)=n=1∑NL(yn,Gm−1(xn)+fm(xn))+Ω(fm)
Здесь L — функция потерь, а Ω(fm) — регуляризатор, ограничивающий сложность дерева. Применим разложение Тейлора до второго порядка для функции L в окрестности точки Gm−1(xn):
Пусть дерево fm(x) имеет J листьев, а функция q(x) возвращает индекс листа для объекта x. Вес (прогноз) в j-м листе обозначим wj. Тогда fm(x)=wq(x).
Регуляризатор определим как:
Ω(fm)=γJ+21λj=1∑Jwj2
Сгруппируем объекты по листьям, в которые они попали. Пусть Ij={n:q(xn)=j} — множество индексов объектов в j-м листе. Перепишем L(m):