Інформований пошук: від грубого до точного

Тюнінг гіперпараметрів у Python

Alex Scriven

Data Scientist

Інформований vs неінформований пошук

 

Досі ми виконували неінформований пошук:

Неінформований пошук: кожна ітерація підбору гіперпараметрів не враховує попередні.

Це дає змогу паралелізувати роботу. Проте звучить не надто ефективно, чи не так?

Тюнінг гіперпараметрів у Python

Інформований vs неінформований

Процес до цього часу:

мапа процесу без інформування

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

мапа процесу з інформуванням

Тюнінг гіперпараметрів у Python

Налаштування від грубого до точного

Базова методика інформованого пошуку:

Починайте з грубого випадкового підходу й ітеративно уточнюйте пошук.

Процес такий:

  1. Випадковий пошук
  2. Знайти перспективні ділянки
  3. Grid search у меншій області
  4. Продовжуйте, доки не отримаєте оптимальну оцінку

Крок (3) можна замінити ще кількома випадковими пошуками перед grid search

Тюнінг гіперпараметрів у Python

Чому «від грубого до точного»?

Підхід «від грубого до точного» має переваги:

  • Поєднує сильні сторони grid і random search.
    • Спочатку широкий пошук
    • Глибший пошук, коли вже відомо, де ймовірно добра зона
  • Краще витрачання часу й обчислень дозволяє швидше ітерувати

Не витрачайте час на області пошуку з поганими результатами!

Примітка: інформування відбувається не на одному моделі, а пакетами

Тюнінг гіперпараметрів у 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 проти точності:

діаграма розсіювання: глибина 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

Що далі? Ще один випадковий або grid search з урахуванням цих висновків!

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

Тюнінг гіперпараметрів у Python

Давайте потренуємось!

Тюнінг гіперпараметрів у Python

Preparing Video For Download...