Легко настраивайте LGBM с помощью optuna

Привилегии:

  • LGBM == lightgbm (пакет python): реализация Microsoft машин с градиентным усилением
  • optuna (пакет python): автоматизированная среда оптимизации гиперпараметров, которую предпочитают гроссмейстеры Kaggle. Будучи независимым от алгоритма, он может помочь найти оптимальные гиперпараметры для любой модели. Помимо gridsearch, в нем есть инструменты для сокращения бесперспективных следов для более быстрого получения результатов

Так в чем подвох?

Полная оптимизация модели включает множество различных операций:

  • Выбор оптимальных начальных гиперпараметров для вашего алгоритма (в зависимости от типа задачи и статистики данных)
  • Определение гиперпараметров для оптимизации, их сетки и распределения
  • Выбор оптимальной функции потерь для оптимизации
  • Настройка стратегии проверки
  • Дальнейшая оптимизация (например, настройка n_estimators с Early_stopping для ансамблей деревьев, таких как LGBM)
  • Анализ результатов
  • и многое другое…

Чтобы собрать все это вместе даже для одной задачи, требуется много кода, и любые последующие задачи потребуют существенных изменений в этом коде.

Есть причина, по которой эта статья включает два важных ключевых слова:

  • LGBM — самый быстрый фреймворк для повышения градиента
  • optuna — самый быстрый фреймворк для оптимизации гиперпараметров

Разумное их совместное использование поможет вам построить лучшую и наиболее оптимальную модель в два раза быстрее.

Но нужно быть готовым иметь дело со всеми последствиями, изложенными выше.

К счастью, еще один пакет с открытым исходным кодом сочетает в себе преимущества обеих этих платформ и предоставляет однострочный метод для создания вашей лучшей модели с помощью lightgbm и optuna.

pip install verstack

Он не только находит оптимальные гиперпараметры для вашей задачи, но и предоставляет удобные методы прогнозирования и аналитики. И он тщательно использует многопроцессорность и почти на полную мощность, оставляя некоторую вычислительную мощность для вашей машины, чтобы она работала без зависаний.

Для этой демонстрации мы будем использовать набор данных бостонского жилья от Kaggle.

import pandas as pd
from verstack import LGBMTuner
# import the data
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
X = train.drop('medv', axis = 1)
y = train['medv']
# tune the hyperparameters and fit the optimized model
tuner = LGBMTuner(metric = 'mse') # <- the only required argument
tuner.fit(X, y)
# check the optimization log in the console.
pred = tuner.predict(test)

В принципе так и есть…

  • были выбраны оптимальные гиперпараметры при проведении 100 испытаний по умолчанию.
  • количество оценщиков было изменено с использованием ранней остановки
  • история оптимизации, значения параметров и функций были сохранены в конвейере построения графика
  • оптимизированная модель, обученная на данных всего поезда
  • методы прогнозирования были подготовлены для прогнозирования новых данных (включая различные эвристики для прогнозирования негативов в регрессии и прогнозирования классов/вероятностей в мультиклассе/бинарном анализе).

Что еще?

Подождите, там еще много…

Метрики

В настоящее время LGMTuner поддерживает (показатели оценки):

'mae', 'mse', 'rmse', 'rmsle', 'mape', 'smape', 'rmspe', 'r2', 'auc', 'gini', 'log_loss', 'accuracy', 'balanced_accuracy', 'precision', 'precision_weighted',  'precision_macro', 'recall', 'recall_weighted', 'recall_macro', 'f1', 'f1_weighted', 'f1_macro', 'lift'
# note the syntax

Метрики оценки становятся метриками оптимизации в случае регрессии, учитывая стратегию только минимизации. Единственным исключением для регрессии является 'r2' . Если эта метрика выбрана при инициализации LGBMTuner, она будет заменена оптимизацией 'mse' во время настройки гиперпараметров и, но настройка n_estimators все равно будет выполняться с проверкой по 'r2'

Для классификации, независимо от выбранной метрики оценки, LGBMTuner оптимизирует cross_entropy при поиске гиперпараметров и оптимизирует метрику оценки при настройке n_estimators.

Количество испытаний

Одно испытание — это одна итерация обучения/проверки модели со случайно выбранными параметрами из пространства поиска. По умолчанию LGBMTuner запустит 100 испытаний. Количество попыток может быть определено при инициализации тюнера: tuner = LGBMTuner(metric = 'mse', trials = 500)

Прогноз

Вызов tuner.fit(X, y) в конечном итоге будет соответствовать модели с лучшими параметрами по X и y.

Тогда доступны обычные методы: tuner.predict(test) и tuner.predict_proba(test)

Для задач классификации доступен дополнительный параметр threshold: tuner.predict(test, threshold = 0.3)

Совет. Можно использовать verstack.ThreshTuner для оптимизации порогового параметра

Визуализации

LGBMTuner поставляется с различными встроенными методами построения графиков для статического png и интерактивного html построения графиков важности функций и статистики оптимизации.

Когда LGBMTuner инициализируется с параметрами по умолчанию, а именно visualization = True, он создаст 4 статических графика после завершения оптимизации. Если вы используете интерактивную оболочку, такую ​​как Spyder или Jupiter, эти графики будут отображаться автоматически по окончании настройки. Это можно отключить при инициализации с помощью tuner = LGBMTuner(metric = 'mse', vusialization = False)

Эти графики также доступны по запросу соответствующими методами.

Важность функции

tuner.fit(X, y)
tuner.plot_importances()

figsize = (10, 6) и n_features = 15 являются аргументами по умолчанию, но при необходимости их можно изменить.

Интерактивный график доступен в виде html-файла, который автоматически отображается в браузере по умолчанию:

tuner.plot_importances(interactive = True)

Этот html можно сохранить из меню файлов браузера.

График результатов проверки испытаний

tuner.plot_intermediate_values()

Интерактивный аргумент наиболее полезен в этом случае

tuner.plot_intermediate_values(interactive = True)

Здесь среди всех испытаний вы можете увидеть обрезанные (прекращенные) испытания и результаты их оценки.

Важность параметров

Это график гистограммы важности параметров, который показывает, какие параметры оказали наибольшее влияние на показатель оптимизации.

tuner.plot_param_importances()

tuner.plot_param_importances(interactive = True)

График истории оптимизации

tuner.plot_optimization_history()

tuner.plot_optimization_history(interactive = True)

В интерактивном режиме вы можете наблюдать за изменением значений целевой функции (метрики оптимизации)

Многословие

Это важная часть каркаса. Уровень детализации по умолчанию 1 будет отображать важные результаты оптимизации в удобной структурированной форме, не загромождая вашу консоль.

По умолчанию метод fit выводит оптимальный объем информации, включая результаты каждого 5-го испытания (исключая испытания, которые были сокращены), ход оптимизации n_estimators для каждого сотого оценщика, окончательные (оптимизированные) параметры модели.

Все параметры детализации — 0,1,2,3,4,5, где 0 — полное молчание, за исключением фатальных ошибок и встроенных исключений; 1–5 основаны на опциях optuna.logging. Уровень детализации по умолчанию 1 дополнен необходимой статистикой оптимизации (скриншоты выше).

Дополнительные LGBMTuner атрибуты

Значения важности функции

tuner.feature_importances
>>> ID         0.08145
>>> crim       0.07421
>>> zn         0.00424
>>> indus      0.02870
>>> chas       0.00547
>>> nox        0.06929
>>> rm         0.13872
>>> age        0.11890
>>> dis        0.13448
>>> rad        0.02966
>>> tax        0.04619
>>> ptratio    0.03977
>>> black      0.06027
>>> lstat      0.16865

Первоначально определенные параметры

tuner.init_params
>>> {'learning_rate': 0.01,
>>>  'num_leaves': 16,
>>>  'colsample_bytree': 0.9,
>>>  'subsample': 0.9,
>>>  'verbosity': -1,
>>>  'n_estimators': 3000,
>>>  'early_stopping_rounds': 200,
>>>  'random_state': 42,
>>>  'objective': 'regression',
>>>  'metric': 'l2',
>>>  'num_threads': 10,
>>>  'reg_alpha': 1}

Оптимизированные параметры

tuner.best_params
>>> {'learning_rate': 0.01,
>>>  'num_leaves': 130,
>>>  'colsample_bytree': 0.8246563384855297,
>>>  'subsample': 0.5335500916057069,
>>>  'verbosity': -1,
>>>  'random_state': 42,
>>>  'objective': 'regression',
>>>  'metric': 'l2',
>>>  'num_threads': 10,
>>>  'reg_alpha': 0.0011166918277076062,
>>>  'min_sum_hessian_in_leaf': 0.00270990587924765,
>>>  'reg_lambda': 8.270186047772752e-06,
>>>  'n_estimators': 605}

Экземпляр обученной модели

Хотя после вызова tuner.fit(X, y) этот экземпляр LGBMTuner представляет собой объект, содержащий настроенную и подогнанную модель LGBM, а сам тюнер содержит все необходимые методы для прогнозов, tuner.predict(test) фактическую бустерную модель LGBM можно извлечь из объекта tuner:

tuner.fitted_model
>>> <lightgbm.basic.Booster at 0x7ff3b89a5b10>

Дополнительные методы и атрибуты хорошо описаны в документации.

Предлагаемая структура включает в себя обширные исследования и лучшие практики науки о данных, чтобы уменьшить количество стресса и добиться значительного улучшения для любых задач классификации/регрессии, для которых она может использоваться.

И обязательно ознакомьтесь с остальными инструментами, которые verstack может предложить.

В пакет включены решения некоторых повседневных задач, которые раньше не имели удобных решений

Текущие модули:

  • verstack.LGBMTuner
  • verstack.PandasOptimizer — автоматическая оптимизация памяти при чтении данных в панды. Однострочник для 5-кратного сокращения объема памяти и значительного сокращения времени обучения Статья среднего размера
  • verstack.Stacker — автоматизированное сборочное производство; создавайте ансамбли многослойной укладки с помощью нескольких строк кода Статья среднего размера
  • verstack.FeatureSelector — инструмент автоматизированного выбора признаков на основе быстрого рекурсивного исключения признаков по различным моделям машинного обучения Статья среднего размера
  • verstack.DateParser — окончательный класс DateParser, который автоматически находит и анализирует возможности даты и времени из всех возможных форматов даты и времени в вашем фрейме данных Статья среднего размера
  • verstack.Multicore — распараллелить любую функцию одной строкой кода (на сегодняшний день самый популярный инструмент) Статья среднего размера
  • verstack.NaNImputer — вычислить все значения NaN методом машинного обучения одной строкой кода Статья среднего размера
  • verstack.ThreshTuner — автоматический выбор порога для получения максимальной отдачи от предсказанных вероятностей бинарной классификации Средняя статья
  • stratified_continuous_split — непрерывная стратификация данных Средняя статья
  • Категориальные кодировщики Factorizer OneHotEncode FrequencyEncoder WeightOfEvidenceEncoder MeanTargetEncoder Средняя статья
  • timer — удобный таймер для измерения выполнения любой функции

Ссылки

verstack.LGBMTuner документация

verstack документация

Гит

Пипи

автор