Байесовская оптимизация с Optuna
optuna.create_study(), suggest_float/int/categorical, отсечение неудачных испытаний и визуализация.
«Байесовская оптимизация с Optuna» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.
Умнее случайного поиска
Поиск по сетке и случайный поиск игнорируют предыдущие результаты. Байесовская оптимизация учится на предыдущих испытаниях и предлагает более перспективные гиперпараметры, позволяя найти хорошие значения за меньшее число оценок.
Что делает Optuna
Optuna — популярная платформа для оптимизации гиперпараметров. Вы задаёте целевую функцию, а Optuna интеллектуально выбирает гиперпараметры и запоминает удачные варианты.
Создание исследования
Исследование управляет оптимизацией. Установите direction в значение "maximize" для точности или AUC и в значение "minimize" для функции потерь или ошибки.
import optuna
study = optuna.create_study(direction="maximize")Целевая функция
Целевая функция получает объект trial, предлагает гиперпараметры, обучает модель и возвращает оценку для оптимизации.
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
def objective(trial):
n = trial.suggest_int("n_estimators", 100, 500)
d = trial.suggest_int("max_depth", 3, 20)
clf = RandomForestClassifier(n_estimators=n, max_depth=d)
return cross_val_score(clf, X, y, cv=3).mean()Предложение целочисленных параметров
trial.suggest_int(name, low, high) выбирает целое число из заданного диапазона. Добавьте step или log=True, чтобы управлять выбором значений.
def objective(trial):
n_estimators = trial.suggest_int("n_estimators", 100, 1000, step=50)
return train_and_score(n_estimators)Предложение вещественных параметров
trial.suggest_float(name, low, high) выбирает вещественное число. Используйте log=True для параметров, таких как скорость обучения, значения которых охватывают несколько порядков величины.
def objective(trial):
lr = trial.suggest_float("learning_rate", 1e-4, 0.3, log=True)
subsample = trial.suggest_float("subsample", 0.5, 1.0)
return train_and_score(lr, subsample)Предложение категориальных параметров
trial.suggest_categorical(name, choices) выбирает значение из фиксированного списка — это идеально подходит для таких вариантов, как тип ядра или метод усиления.
def objective(trial):
kernel = trial.suggest_categorical("kernel", ["linear", "rbf", "poly"])
return train_svm(kernel)Запуск оптимизации
study.optimize(objective, n_trials=N) выполняет поиск в течение N испытаний. Чем больше испытаний, тем больше пространства исследуется; со временем Optuna сосредотачивается на перспективных областях.
study.optimize(objective, n_trials=100)Чтение лучшего результата
После оптимизации study.best_params содержит лучшие гиперпараметры, а study.best_value — лучшую оценку целевой функции.
print("Best params:", study.best_params)
print("Best value:", study.best_value)
best = RandomForestClassifier(**study.best_params)
best.fit(X, y)Досрочное прекращение бесперспективных испытаний
Optuna может досрочно прекращать неудачные испытания с помощью механизмов отсечения, экономя вычислительные ресурсы. Передавайте промежуточные значения и проверяйте trial.should_prune() внутри циклов обучения.
import optuna
study = optuna.create_study(
direction="maximize",
pruner=optuna.pruners.MedianPruner(),
)Почему Optuna хорошо масштабируется
Optuna поддерживает параллельные испытания, постоянное хранилище и визуализацию поиска. Для дорогих моделей её эффективный по количеству выборок байесовский подход находит сильные конфигурации с гораздо меньшим числом испытаний, чем поиск по сетке или случайный поиск.
Быстрая проверка
Проверьте свои знания об Optuna.
Итоги
Итоги: Optuna использует байесовскую оптимизацию для эффективной настройки гиперпараметров. Создайте исследование с параметром direction, напишите целевую функцию, использующую trial.suggest_int/float/categorical, запустите study.optimize(objective, n_trials=N), а затем проверьте study.best_params и study.best_value. Механизмы отсечения прекращают слабые испытания, чтобы сэкономить вычислительные ресурсы.
Часто задаваемые вопросы
Урок «Байесовская оптимизация с Optuna» бесплатный?
Да — полный текст урока «Байесовская оптимизация с Optuna» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.
Чему я научусь в уроке «Байесовская оптимизация с Optuna»?
optuna.create_study(), suggest_float/int/categorical, отсечение неудачных испытаний и визуализация. Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Learn AI with Python?
Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Байесовская оптимизация с Optuna»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Learn AI with Python?
Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Стратегии кросс-валидации
- Подробный разбор метрик классификации
- Поиск по сетке и случайный поиск
- Байесовская оптимизация с Optuna