Найти в Дзене
Властелин машин

Ранняя остановка с LightGBM

Рассмотрим, как осуществить подбор оптимального количества деревьев для максимизации качества заданной метрики с градиентным бустингом LightGBM. Сначала сгенерируем рабочий датасет:

Разделим данные на выборки:

-2

Инициализируем объект класса LGBMClassifier максимальным количеством деревьев и количеством итераций, в течение которых если метрика не улучшается, происходит останов (подробнее писал здесь). В методе fit для раннего останова передадим валидационный датасет (параметр eval_set) и метрику (eval_metric, список здесь). При этом в последнем может задаваться список метрик, которые будут отслеживаться на валидационном датасете и использоваться для останова (выбор итерации будет происходит с учетом их всех либо первой, если при создании модели указать first_metric_only=True). Также для приглушения вывода значений метрики по умолчанию можно в конструктор класса указать metric='None':

-3
-4

Как можно заметить, алгоритм выбирает 6 итерацию в качестве оптимальной. Однако, несмотря на то, что при выводе параметров классификатора количество количество деревьев в "обрезанном" лесу не указывается, в реальности используется лучшая итерация:

-5

метрика roc_auc, соответствует лучшей:

-6

В свойствах best_score_ и evals_result_ хранятся лучший результат обученной модели и история оценок на валидационном датасете:

-7

-8

Также отмечу, что в параметр categorical_feature метода fit можно передать список категориальных признаков (по умолчанию 'auto' - для pandas датафрейма извлекаются признаки с категориальным типом). Чтобы признаки расценивались как категориальные, их надо преобразовать в этот тип (набрать что-то вроде df.astype({it:'category' for it in cat_cols}) )

Подробнее о параметрах можно узнать здесь.

Полезные ссылки:

1. Тюнинг параметров LightGBM

-9