Сегодня поговорим о методах поиска гиперпараметров и о популярных фреймворках для автоматизации этого процесса. Речь пойдет о Optuna и Hyperopt.

В первую очередь давайте разберемся, что мы будем оптимизировать и каким образом.

Гиперпараметрами могут быть как параметры самого алгоритма, например, глубина дерева в random forest, число соседей в knn, веса нейронов в нейронных сетях, так и способы обработки признаков, пропусков и т.д.



Существуют 3 основных метода для подбора гиперпараметров:



1. Поиск по сетке. Выполняется полный перебор параметров в заданном диапазоне. Минусы - долгое время работы и продолжение поиска при заведомо неудачных параметрах.



2. Случайный поиск. Параметры берутся случайным образом из выборки с указанным распределением.



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



Итак, в чем сходства и различия этих двух библиотек?

1.Удобство использования API

Optuna: перед началом работы нужно определить пространство поиска и целевую функцию, затем вы создаете study объект и оптимизируете его.

Hyperopt: так же определяется пространство поиска и целевая функция, затем создается объект Trials который передается в функцию fmin, чуть менее гибко чем в Optuna.

2. Пространство поиска:

Optuna: отличительная особенность в том, что вы можете использовать оператор if, для пространство поиска, и менять область поиска в зависимости от ситуации.

Hyperopt:в hyperopt же вы можете создавать очень сложные пространства поиска, с множеством параметров, сэмплировать их.

3. Визуализация.

Optuna имеет модуль optuna.visualisation который позволяет отображать параметры на интерактивной диаграмме, эволюцию поиска, то, какие части пространства исследовались больше. В общем, богатый набор!

Аналог в hyperopt - модуль hyperopt.plotting, который имеет гораздо меньше функций, основные это отображение результатов всех итераций в виде диаграмм и гистограмм.



А какими библиотека для поиска гиперпараметров пользуетесь вы и какие видите в них преимущества?🔎