Как выбрать гиперпараметры для xgboost?

Всем привет! Мой жизненный путь в сфере технологий начинался с машинного обучения для финансовых моделей и привел меня к data scientist в IT-компании. Решил написать свою первую статью и затронуть важную тему, которой обычно мало кто придает значение. Многие, работая над моделью, сталкиваются с тем, как правильно выбрать гиперпараметры. Обычно, это делается методом перебора по сетке с байесовской оптимизацией. Так я и делал раньше и не задумывался, что в этом есть какая-то проблема. Благо, у меня был хороший учитель, который обратил внимание на этот незначительный момент.
1. Так в чем, собственно, проблема?
Перебирая по сетке с байесовской оптимизацией вы позволяете поиску выбирать за вас и все, казалось бы, решено. Но хотелось бы объяснить, как именно адаптировать модель под новый датасет, чтобы это соответствовало именно вашим характеристикам. Конечно, настройка гиперпараметров не так важна, как разработка алгоритмов обнаружения. Но если вы не понимаете математику, которая лежит в основе модели, то не увидите, как работают алгоритмы и все будет наугад. В данной статье я хочу представить вам самый простой способ, как достичь идеальных гиперпараметров, а не просто плыть по течению.
Основная мысль:
вместо того, чтобы вслепую доверять оптимизатору, нужно понять математику модели.
2. Как настроить гиперпараметры так, чтобы не тратить время и добиться нужного результата практически сразу?
Схема довольно простая
eta=0.1
max_depth=10
subsample=1.0
min_child_weight=5
col_sample_bytree=0.2
objective='reg:linear'Далее, делим на 20% данные для проверки и делаем список значения обнаружения для обучения и тестирования.
num_round=1000000Можно поэкспериментировать с уровнем глубины. Начать с max_depth=10. При ошибки выше, чем на обучении - можно ставить 12, если ниже - ставим 5.
Когда определился с глубиной, то настраиваю параметр субдискретизации. Начинаю с 1.0, меняю его на 0.8. Если ошибка выше, то - 0.9 или 1.0
Настраиваю так же min child_weight и col_sample_bytree.
Eta уменьшаю на 0.05.
Оставляю программу работать и получаю оптимальный num_round. Использую эти параметры как базу, дополняя ее небольшими экспериментами.
Заключение.
Надеюсь, вам были полезны мои мысли и находки. И хотя гиперпараметры не идеальные, но такая настройка очень близка к самому лучшему результату, который только может быть. Поделитесь своими идеями по настройке гиперпараметров. Я могу лишь дополнить свой способ рассуждениями моего первого учителя и вдохновителя https://youtube.com/@realmikemozg?si=jEe52LlzSBfVDGed






















