Для чего нужен Grid Search?

«Для чего нужен Grid Search?» — вопрос из категории Классическое ML, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Grid Search (сетчатый поиск) — это метод оптимизации гиперпараметров машинного обучения, который выполняет исчерпывающий перебор по заранее заданной сетке значений. Его цель — найти комбинацию гиперпараметров, которая дает наилучшую производительность модели на валидационных данных.

Как это работает: Вы определяете словарь, где ключи — это названия гиперпараметров (например, max_depth, n_estimators), а значения — списки возможных значений для перебора. Алгоритм обучает и оценивает модель для каждой возможной комбинации этих значений.

Пример с GridSearchCV из Scikit-learn для Random Forest:

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.datasets import load_iris

# Загрузка данных
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# Определение модели и сетки параметров
model = RandomForestClassifier(random_state=42)
param_grid = {
    'n_estimators': [50, 100, 200],      # Количество деревьев
    'max_depth': [None, 10, 20, 30],     # Максимальная глубина дерева
    'min_samples_split': [2, 5, 10]      # Минимальное число образцов для разделения узла
}

# Создание и запуск Grid Search
grid_search = GridSearchCV(
    estimator=model,
    param_grid=param_grid,
    cv=5,               # 5-кратная кросс-валидация
    scoring='accuracy', # Метрика для оптимизации
    n_jobs=-1           # Использовать все ядра процессора
)
grid_search.fit(X_train, y_train)

# Результаты
print(f"Лучшие параметры: {grid_search.best_params_}")
print(f"Лучшая оценка кросс-валидации: {grid_search.best_score_:.3f}")

# Оценка на тестовом наборе
best_model = grid_search.best_estimator_
test_score = best_model.score(X_test, y_test)
print(f"Accuracy на тестовом наборе: {test_score:.3f}")

Преимущества: Гарантирует нахождение лучшей точки в пределах заданной сетки. Прост в понимании и реализации. Недостатки: Вычислительно очень дорог, особенно при большом количестве параметров и значений. Неэффективен для поиска по непрерывным пространствам. На практике для больших пространств параметров часто используют RandomizedSearchCV или более продвинутые методы, такие как Optuna или Hyperopt.