Ответ
Подбор гиперпараметров — это итеративный процесс поиска комбинации, которая максимизирует производительность модели на валидационных данных. Основные методы:
1. Grid Search (Поиск по сетке) Полный перебор всех комбинаций из предопределённого набора. Прост, но вычислительно затратен.
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
param_grid = {
'n_estimators': [50, 100, 200],
'max_depth': [3, 5, 7, None],
'min_samples_split': [2, 5, 10]
}
model = RandomForestClassifier()
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5, scoring='accuracy')
grid_search.fit(X_train, y_train)
print(f"Лучшие параметры: {grid_search.best_params_}")
2. Random Search (Случайный поиск) Случайная выборка комбинаций из заданных распределений. Часто находит хорошее решение быстрее Grid Search при том же бюджете вычислений.
3. Байесовская оптимизация
Строит вероятностную модель функции цели (например, валидационная ошибка) и выбирает следующие параметры для оценки, чтобы максимизировать ожидаемое улучшение. Идеально для дорогих моделей (нейросети, градиентный бустинг). Популярные библиотеки: Optuna, scikit-optimize.
import optuna
def objective(trial):
n_estimators = trial.suggest_int('n_estimators', 50, 300)
max_depth = trial.suggest_int('max_depth', 3, 15)
model = RandomForestClassifier(n_estimators=n_estimators, max_depth=max_depth)
score = cross_val_score(model, X_train, y_train, cv=5, scoring='accuracy').mean()
return score
study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=100)
Ключевые практики:
- Всегда используйте кросс-валидацию для оценки параметров, чтобы избежать переобучения.
- Начинайте с широких диапазонов, затем сужайте поиск вокруг лучших значений.
- Используйте раннюю остановку для итеративных алгоритмов.
- Учитывайте компромисс между временем настройки и приростом качества.