GridSearchCV – это метод подбора гиперпараметров из библиотеки Scikit Learn. Импорт метода:
from sklearn.model_selection import train_test_split, GridSearchCV
Порядок работы алгоритма подбора
Разбиение данных на фолды
Это деление всех строк данных на равные части. Если параметр cv=3, значит, данные делятся на 3 равные части.
Обучение на выбранных гиперпараметрах
Далее идет обучение выбранной модели на фолдах с чередованием. Простой пример:
Допустим, у нас есть три фолда и мы подбираем значение только одного гиперпараметра (например, Learning Rate) со значениями 0.01, 0.05, 0.1.
Итерация 1
- Learning Rate = 0.01.
- Обучаем на фолдах 1 и 2.
- Тестируем на фолде 3 и оцениваем метрику качества.
Итерация 2
- Learning Rate = 0.01.
- Обучаем на фолдах 1 и 3.
- Тестируем на фолде 2 и оцениваем метрику качества.
Итерация 3
- Learning Rate = 0.01.
- Обучаем на фолдах 2 и 3.
- Тестируем на фолде 1 и оцениваем метрику качества.
После этого выполняется усреднение метрики качества для данного значения гиперпараметра. Затем используем следующее значение Learning Rate = 0.05 и повторяем обучение на фолдах (снова выполняем три итерации). И так далее, пока не переберем все значения гиперпараметра.
Если гиперпараметров несколько, происходит обучение на всех их возможных комбинациях аналогичным образом.
Переобучение финальной модели на всех данных
По итогам обучения выбирается лучшая комбинация гиперпараметров (с наилучшей метрикой качества) и на них обучается модель с использованием всех данных.
Атрибут best_estimator_ содержит финальную обученную модель. В нее можно отдать новые тестовые данные и посмотреть в деле.
best_model = grid_search.best_estimator_
y_pred = best_model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(f"Test MSE: {mse:.4f}")
Атрибут best_params_ содержит массив лучших гиперпараметров со значениями. Например:
{'learning_rate': 0.1, 'max_depth': 7, 'n_estimators': 500, 'num_leaves': 31}