Сеточный поиск (Grid Search) представляет собой систематический перебор всех возможных комбинаций заданных гиперпараметров. Этот метод хорошо подходит для задач с небольшим числом параметров и ограниченным диапазоном значений. Например, если необходимо протестировать несколько фиксированных значений скорости обучения и количества нейронов в слое, сеточный поиск гарантирует, что будет рассмотрена каждая комбинация. Однако его вычислительная сложность быстро возрастает с увеличением числа гиперпараметров и их диапазонов. Это делает сеточный поиск менее применимым для больших задач, где пространства гиперпараметров могут быть огромными.

Случайный поиск (Random Search) предлагает альтернативу: вместо систематического перебора он случайным образом выбирает комбинации гиперпараметров для тестирования. Исследования показывают, что случайный поиск часто быстрее находит подходящие значения, особенно если не все гиперпараметры одинаково важны для качества модели. В отличие от сеточного поиска, где каждое значение проверяется независимо от его эффективности, случайный подход позволяет сосредоточиться на более широкой области гиперпараметров, экономя ресурсы и сокращая время вычислений.

Байесовская оптимизация является более сложным и продвинутым методом. Она основывается на адаптивном подходе, который использует предыдущие результаты для прогнозирования наиболее перспективных комбинаций гиперпараметров. Этот метод строит априорные вероятности и обновляет их на каждом шаге, выбирая следующие комбинации на основе максимизации ожидаемого улучшения. Байесовская оптимизация особенно эффективна для задач, где тестирование гиперпараметров является дорогостоящим процессом, так как она позволяет минимизировать количество необходимых итераций. Такой подход часто используется в автоматическом машинном обучении (AutoML) и сложных моделях глубокого обучения.

Рассмотрим задачу поиска гиперпараметров для логистической регрессии при работе с датасетом `Breast Cancer` из библиотеки `sklearn`. Мы будем искать оптимальные значения для двух гиперпараметров:

1. `C` – обратная величина коэффициента регуляризации.

2. Тип регуляризации: `L1` или `L2`.

Применим три метода: сеточный поиск, случайный поиск и Байесовскую оптимизацию, сравнив их результаты.

Код с решением

```python

import numpy as np

from sklearn.datasets import load_breast_cancer

from sklearn.linear_model import LogisticRegression

from sklearn.model_selection import train_test_split, GridSearchCV, RandomizedSearchCV

from sklearn.metrics import accuracy_score

from skopt import BayesSearchCV

# Загрузка данных

data = load_breast_cancer()

X, y = data.data, data.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Логистическая регрессия

model = LogisticRegression(solver='liblinear', max_iter=1000)

1. Сеточный поиск

grid_params = {

'C': [0.01, 0.1, 1, 10, 100],

'penalty': ['l1', 'l2']

}

grid_search = GridSearchCV(estimator=model, param_grid=grid_params, cv=5, scoring='accuracy')

grid_search.fit(X_train, y_train)

grid_best_params = grid_search.best_params_

grid_best_score = grid_search.best_score_

2. Случайный поиск

random_params = {

'C': np.logspace(-2, 2, 20),

'penalty': ['l1', 'l2']

}

random_search = RandomizedSearchCV(estimator=model, param_distributions=random_params, n_iter=10, cv=5, scoring='accuracy', random_state=42)

random_search.fit(X_train, y_train)

random_best_params = random_search.best_params_

random_best_score = random_search.best_score_

3. Байесовская оптимизация

bayes_search = BayesSearchCV(