Легко настраивайте 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
документация