Тюнінг гіперпараметрів у Python
Alex Scriven
Data Scientist
Дуже схоже на grid search:
АЛЕ замість цього ми випадково обираємо клітинки сітки.
Bengio & Bergstra (2012):
Ця робота емпірично та теоретично показує, що випадкові випробування ефективніші для оптимізації гіперпараметрів, ніж випробування на сітці.
Дві головні причини:
Grid search:

Скільки моделей треба запустити, щоб із 95% імовірністю потрапити в одну із зелених клітинок?
Наші найкращі моделі:

Якщо ми рівномірно випадково обираємо комбінації гіперпараметрів, розгляньмо шанс ПРОМАХНУТИСЯ кожного разу, щоб показати, наскільки це малоймовірно
Спроба 1 = 0,05 шанс успіху та (1 - 0,05) шанс промаху
Взагалі, для n спроб маємо (1-0,05)^n імовірність, що кожна спроба омине бажану зону.
То скільки спроб потрібно, щоб мати високий (95%) шанс потрапити в ту ділянку?
Що це означає?
Пам'ятайте:
Максимум все одно залежить від обраної вами сітки!
Щоб коректно порівняти з grid search, потрібно мати однаковий «бюджет» моделювання
Можемо створити власну випадкову вибірку комбінацій гіперпараметрів:
# Set some hyperparameter lists
learn_rate_list = np.linspace(0.001,2,150)
min_samples_leaf_list = list(range(1,51))
# Create list of combinations
from itertools import product
combinations_list = [list(x) for x in
product(learn_rate_list, min_samples_leaf_list)]
# Select 100 models from our larger set
random_combinations_index = np.random.choice(
range(0,len(combinations_list)), 100,
replace=False)
combinations_random_chosen = [combinations_list[x] for x in
random_combinations_index]
Можемо також візуалізувати покриття random search, наносячи вибрані гіперпараметри на осі X та Y.

Зверніть увагу: розкид широкий, але глибокого покриття немає.
Тюнінг гіперпараметрів у Python