Направленный поиск: от грубого к точному

Подбор гиперпараметров в Python

Alex Scriven

Data Scientist

Направленный и ненаправленный поиск

 

До сих пор мы использовали ненаправленный поиск:

Ненаправленный поиск: каждая итерация подбора гиперпараметров не учитывает результаты предыдущих итераций.

Именно это позволяет распараллеливать работу. Но звучит не очень эффективно, не правда ли?

Подбор гиперпараметров в Python

Направленный и ненаправленный поиск

Текущий процесс:

карта ненаправленного процесса

Альтернативный подход:

карта направленного процесса

Подбор гиперпараметров в Python

Настройка от грубого к точному

Базовая стратегия направленного поиска:

Начните с грубого случайного подхода и постепенно сужайте область поиска.

Процесс:

  1. Случайный поиск
  2. Определение перспективных областей
  3. Поиск по сетке в суженной области
  4. Повторение до достижения оптимального результата

Вместо шага (3) можно выполнить дополнительный случайный поиск перед поиском по сетке

Подбор гиперпараметров в Python

Зачем использовать подход от грубого к точному?

Преимущества подхода от грубого к точному:

  • Сочетает достоинства поиска по сетке и случайного поиска.
    • Широкий охват на старте
    • Детальный поиск там, где уже найдена перспективная область
  • Экономия времени и вычислительных ресурсов позволяет быстрее итерировать

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

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

Подбор гиперпараметров в Python

Применение подхода от грубого к точному

Рассмотрим пример со следующими диапазонами гиперпараметров:

  • max_depth_list от 1 до 65
  • min_sample_list от 3 до 17
  • learn_rate_list — 150 значений от 0,01 до 150

Сколько возможных моделей получится?

combinations_list = [list(x) for x in product(max_depth_list, min_sample_list, learn_rate_list)]
print(len(combinations_list))
134400
Подбор гиперпараметров в Python

Визуализация подхода от грубого к точному

Выполним случайный поиск по 500 комбинациям.

Визуализируем значения точности:

график плотности точности моделей

Какие модели оказались лучшими?

Подбор гиперпараметров в Python

Визуализация подхода от грубого к точному

Лучшие результаты:

max_depth min_samples_leaf learn_rate accuracy
10 7 0.01 96
19 7 0.023355705 96
30 6 1.038389262 93
27 7 1.11852349 91
16 7 0.597651007 91
Подбор гиперпараметров в Python

Визуализация подхода от грубого к точному

Визуализируем значения max_depth в сравнении с точностью:

диаграмма рассеяния max depth vs точность

Подбор гиперпараметров в Python

Визуализация подхода от грубого к точному

min_samples_leaf лучше при значениях ниже 8

диаграмма рассеяния min samples leaf vs точность

learn_rate хуже при значениях выше 1,3

диаграмма рассеяния learn rate vs точность

Подбор гиперпараметров в Python

Следующие шаги

Что мы узнали после первой итерации:

  • max_depth в диапазоне от 8 до 30
  • learn_rate меньше 1,3
  • min_samples_leaf предпочтительно меньше 8

Что дальше? Случайный или сеточный поиск с учётом полученных знаний!

Примечание: это был лишь бивариантный анализ. Можно рассматривать несколько гиперпараметров (3, 4 и более) на одном графике, но это выходит за рамки данного курса.

Подбор гиперпараметров в Python

Давайте потренируемся!

Подбор гиперпараметров в Python

Preparing Video For Download...