Подбор гиперпараметров в Python
Alex Scriven
Data Scientist
Очень похоже на поиск по сетке:
НО вместо этого мы случайно выбираем ячейки сетки.
Bengio & Bergstra (2012):
В этой работе эмпирически и теоретически показано, что случайный выбор параметров эффективнее перебора по сетке при оптимизации гиперпараметров.
Две основные причины:
Поиск по сетке:

Сколько моделей нужно обучить, чтобы с вероятностью 95% попасть в одну из зелёных ячеек?
Лучшие модели:

При равномерном случайном выборе комбинаций гиперпараметров рассмотрим вероятность того, что мы промахнёмся на каждой итерации — и убедимся, насколько это маловероятно
Итерация 1 = вероятность успеха 0,05 и (1 - 0,05) — промаха
При n итерациях вероятность промаха на каждой из них равна (1-0,05)^n.
Итак, сколько итераций нужно, чтобы с высокой вероятностью (95%) попасть в нужную область?
Что это означает на практике?
Важно помнить:
Максимум ограничен заданной сеткой!
Для честного сравнения со сеточным поиском используйте одинаковый «бюджет» на обучение моделей
Можно вручную сформировать случайную выборку комбинаций гиперпараметров:
# 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]
Покрытие случайного поиска можно визуализировать, нанеся выбранные значения гиперпараметров на график.

Обратите внимание: точки охватывают широкий диапазон, но без глубокого покрытия отдельных зон.
Подбор гиперпараметров в Python