🔍 Оптимизация поиска гиперпараметров: метод последовательного деления пополам
Очень много информации по GridSearch, RandomSearch и даже по другим видам поиска Optuna / HyperOpt, но вот про метод последовательного деления пополам почти ничего не встречала в массовом сегменте. Кстати, он реализован в scikit-learn и представлен в виде HalvingGridSearchCV и HalvingRandomSearchCV, разберем работу последнего.
➡️ Как работает HalvingRandomSearchCV?
1. Генерируется большой набор случайных конфигураций гиперпараметров
2. Обучение моделей на ограниченном кол-ве ресурсов (например, модели обучаются на небольшом подмножестве данных)
3. Отбрасываются N% худших моделей (N - это параметр
factor)
4. Процесс повторяется со 2 шага, но уже с увеличенным кол-вом ресурсов
Этот цикл продолжается, пока не останется одна лучшая конфигурация. В реализации
HalvingGridSearchCV на 1 шаге вместо случайных конфигураций, используются все.
➡️ Ключевые параметры:
-
resource='n_samples'
- использует размер обучающего набора как варьируемый ресурс
-
factor
- определяет процент отсеиваемых кандидатов (например, при factor=1.5 100 / 1.5 =~ 67% кандидатов пройдут в следующий раунд)
-
n_candidates='exhaust'
- автоматически выбирает количество конфигураций для максимального использования ресурсов в последнем раунде
🏃♀️Пример использования:
# включаем экспериментальную функцию
from sklearn.experimental import enable_halving_search_cv
from sklearn.model_selection import HalvingRandomSearchCV
hs = HalvingRandomSearchCV(
estimator,
param_distributions=param_grid,
n_candidates='exhaust',
resource='n_samples',
factor=1.5,
random_state=1,
n_jobs=-1
)
hs.fit(X_train, y_train)
В нашей программе по обучению Data Science подробно разбираются методы оптимизации как классических моделей, так и нейросетевых на реальных данных.
Старт 23 сентября, осталось 11 мест, из них 5 мест в брони. Более подробная информация и программа обучения на сайте PyMagic