Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Байесовский оптимизатор в Python
Байесовская оптимизация — это вероятностный метод для поиска оптимальных значений гиперпараметров модели. Вместо того, чтобы случайно или перебирать все комбинации (grid search, random search), она использует информацию о предыдущих испытаниях для интеллектуального выбора следующих кандидатов.
Основная идея
Байесовская оптимизация основана на двух концепциях:
- Гауссовский процесс (Gaussian Process) — модель, которая описывает распределение вероятностей всех возможных функций потерь
- Функция приобретения (Acquisition Function) — стратегия, которая решает, какие гиперпараметры попробовать дальше, основываясь на текущей модели
Как это работает
1. Начальная выборка → случайно пробуем несколько наборов параметров
2. Построение модели → Гауссовский процесс моделирует результаты
3. Выбор кандидата → Функция приобретения выбирает следующий набор
4. Оценка → Вычисляем качество модели на новом наборе
5. Обновление → Добавляем результат в историю
6. Повтор → Шаги 2-5 повторяются до конвергенции
Практический пример с Optuna
import optuna
from optuna.samplers import TPESampler
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
# Загрузка данных
X, y = load_iris(return_X_y=True)
# Определение функции оптимизации
def objective(trial):
# Гиперпараметры для поиска
n_estimators = trial.suggest_int("n_estimators", 10, 200)
max_depth = trial.suggest_int("max_depth", 2, 32)
min_samples_split = trial.suggest_int("min_samples_split", 2, 10)
# Обучение модели
clf = RandomForestClassifier(
n_estimators=n_estimators,
max_depth=max_depth,
min_samples_split=min_samples_split,
random_state=42
)
# Кросс-валидация
score = cross_val_score(clf, X, y, cv=3, scoring="accuracy").mean()
return score
# Создание исследования
study = optuna.create_study(
direction="maximize", # максимизируем accuracy
sampler=TPESampler(seed=42)
)
# Оптимизация
study.optimize(objective, n_trials=20)
# Результаты
print(f"Лучшее значение: {study.best_value}")
print(f"Лучшие параметры: {study.best_params}")
print(f"Количество выполненных trials: {len(study.trials)}")
Практический пример с Scikit-Optimize
from skopt import gp_minimize
from skopt.space import Integer, Real
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_breast_cancer
X, y = load_breast_cancer(return_X_y=True)
# Пространство поиска
space = [
Integer(50, 300, name="n_estimators"),
Real(0.001, 0.1, name="learning_rate"),
Integer(2, 10, name="max_depth")
]
# Функция оптимизации
def objective(params):
n_estimators, learning_rate, max_depth = params
model = GradientBoostingClassifier(
n_estimators=n_estimators,
learning_rate=learning_rate,
max_depth=max_depth,
random_state=42
)
# Возвращаем отрицательное значение, так как gp_minimize ищет минимум
return -cross_val_score(model, X, y, cv=3, scoring="accuracy").mean()
# Оптимизация
result = gp_minimize(
objective,
space,
n_calls=20, # количество вызовов функции
n_initial_points=5, # начальные случайные точки
random_state=42
)
print(f"Лучшее значение: {-result.fun}")
print(f"Лучшие параметры: {result.x}")
Основные библиотеки
| Библиотека | Особенности | Преимущества |
|---|---|---|
| Optuna | Современная, простая API, Bayesian + Tree-structured | Удобна для начинающих, хороша интеграция с ML фреймворками |
| Scikit-Optimize | Базирована на Gaussian Process | Стабильна, хорошо документирована |
| Hyperopt | Поддержка Tree-structured Parzen Estimator | Очень гибкая, работает с любыми гиперпараметрами |
Функции приобретения
- Expected Improvement (EI): максимизирует ожидаемое улучшение
- Upper Confidence Bound (UCB): баланс между исследованием и эксплуатацией
- Probability of Improvement (PI): вероятность улучшить лучший результат
Преимущества
- Эффективность: намного быстрее grid search и random search
- Адаптивность: учится из предыдущих результатов
- Теоретическая обоснованность: базируется на вероятностной теории
- Параллелизм: некоторые реализации поддерживают параллельный поиск
Недостатки
- Вычислительная сложность: требует обучения Гауссовского процесса на каждом шаге
- Не для больших пространств: когда размер пространства > 20 параметров
- Требует метрики качества: нужна быстровычислимая функция оценки
Байесовская оптимизация — это золотой стандарт для подбора гиперпараметров в конкурсах и в production, когда вычисления дорогие (обучение больших моделей, обработка большого датасета).