Как вы обычно подбираете гиперпараметры для своей модели?
У меня для вас есть отличный лайфхак для того чтобы добиться наилучшего качества модели!
for i in range(43):
model = LogisticRegression(random_state=i).fit(X_train, y_train)
Ладно, это шутка!
На самом деле подобрать хорошие параметры модели крайне важно, так как это позволит нам выбить несколько пунктов нашей метрики качества практически без дополнительных усилий. Есть разные методы подбора, например GridSearch, RandomSearch, HyperOpt - но все они беспощадно устарели…
Расскажу вам сегодня про современный и универсальный фреймворк для оптимизации гиперпараметров - Optuna.
Японцы постарались и сделали бомбиту, которая умеет:
❤️Подбирать гп как и для классических алгоритмов, так и для нейросетей
❤️Поддерживает GPU
❤️Интегрируется с MLflow
❤️Поддерживает категориальные фичи
❤️Имеет встроенные визуализации
Пошаговый план как использовать optuna для своей задачи
1) Создайте функцию, которая принимает объект trial и возвращает значение метрики
Включите в нее:
• Загрузку данных
• Разделение на train/validation
• Инициализацию модели с параметрами из trial
• Обучение и валидацию модели
• Возврат метрики качества
2) Для каждого параметра выберите подходящий метод suggest_*:
• suggest_int() - для целочисленных параметров
• suggest_float() - для вещественных параметров
• suggest_categorical() - для категориальных параметров
3) Определите границы для каждого параметра
Для параметров, где важны порядки величин, используйте log=True
4) Создайте объект study с правильным направлением оптимизации:
• direction='maximize' - для accuracy, F1-score
• direction='minimize' - для loss, RMSE
5) Выберите подходящий sampler (по умолчанию TPE):
• TPESampler() - для большинства задач
• RandomSampler() - для начального исследования
• CmaEsSampler() - для непрерывных пространств
6) Установите storage для сохранения результатов (если нужно)
7) Выберите критерии остановки:
• n_trials - количество испытаний
• timeout - ограничение по времени
• Ранняя остановка через callbacks
9) Запустите оптимизацию
10) Извлеките лучшие параметры
11) Сохраните лучшую модель
Дополнительные советы:
❤️Начинайте с небольшого числа trials (20-50) для определения перспективных областей
❤️Используйте n_jobs для параллельного выполнения trials
❤️Для глубокого обучения добавьте callback для сохранения весов
❤️Логируйте все эксперименты (например, в MLflow или Weights & Biases)
❤️Для очень больших пространств параметров используйте optuna.samplers.NSGAIISampler
Подробный пример objective категорически не влезает в пост, поэтому держите файл txt и мем на эту тему❤️
#data_science
