Тюнінг гіперпараметрів у Python
Alex Scriven
Data Scientist
Досі ми виконували неінформований пошук:
Неінформований пошук: кожна ітерація підбору гіперпараметрів не враховує попередні.
Це дає змогу паралелізувати роботу. Проте звучить не надто ефективно, чи не так?
Процес до цього часу:

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

Базова методика інформованого пошуку:
Починайте з грубого випадкового підходу й ітеративно уточнюйте пошук.
Процес такий:
Крок (3) можна замінити ще кількома випадковими пошуками перед grid search
Підхід «від грубого до точного» має переваги:
Не витрачайте час на області пошуку з поганими результатами!
Примітка: інформування відбувається не на одному моделі, а пакетами
Розгляньмо приклад із такими діапазонами гіперпараметрів:
max_depth_list від 1 до 65min_sample_list від 3 до 17learn_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
Виконаймо випадковий пошук лише на 500 комбінаціях.
Тут наведено графік точності:

Які моделі виявилися кращими?
Найкращі результати:
| 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 |
Візуалізуймо значення max_depth проти точності:

min_samples_leaf краще менше ніж 8

learn_rate гірший понад 1.3

Що ми знаємо після першої ітерації:
max_depth між 8 і 30learn_rate менше 1.3min_samples_leaf імовірно менше 8Що далі? Ще один випадковий або grid search з урахуванням цих висновків!
Примітка: це був лише біваріантний аналіз. Можна досліджувати кілька гіперпараметрів (3, 4 і більше!) на одному графіку, але це поза межами цього курсу.
Тюнінг гіперпараметрів у Python