Подбор гиперпараметров в Python
Alex Scriven
Data Scientist
Проанализируем результаты GridSearchCV.
Свойства GridSearchCV делятся на три группы:
cv_results_best_index_, best_params_ & best_score_scorer_, n_splits_ & refit_time_
Доступ к свойствам осуществляется через точечную нотацию.
Например:
grid_search_object.property
Где property — нужное вам свойство
Свойство cv_results_:
Загрузим его в DataFrame для вывода и анализа:
cv_results_df = pd.DataFrame(grid_rf_class.cv_results_)
print(cv_results_df.shape)
(12, 23)
Столбцы time отражают время обучения (и оценки) модели.
Помните, мы использовали 5-кратную кросс-валидацию? Она выполнялась 5 раз, а среднее и стандартное отклонение времени (в секундах) были сохранены.

Столбцы param_ хранят параметры, проверенные в данной строке, — по одному столбцу на параметр

Столбец params содержит словарь всех параметров:
pd.set_option("display.max_colwidth", -1)
print(cv_results_df.loc[:, "params"])

Столбцы test_score содержат оценки на тестовой выборке для каждого фолда кросс-валидации, а также сводную статистику:

Столбец ранга упорядочивает mean_test_score от лучшего к худшему:

Лучшую ячейку сетки можно легко выбрать из cv_results_ с помощью столбца rank_test_score
best_row = cv_results_df[cv_results_df["rank_test_score"] == 1]
print(best_row)

Столбцы test_score повторяются для training_scores.
Несколько важных замечаний:
Чтобы включить столбцы обучающих оценок, параметр return_train_score должен быть равен True.
Для обучающих оценок столбец ранга отсутствует, так как нас интересует только качество на тестовой выборке
Информация о лучшей ячейке сетки компактно представлена в трёх свойствах:
best_params_ — словарь параметров, давших наилучший результат.
best_score_ — значение лучшей оценки.
best_index_ — строка в cv_results_.rank_test_score с наилучшим результатом.
Свойство best_estimator_ — это оценщик, построенный с использованием лучших параметров из поиска по сетке.
В нашем случае это оценщик случайного леса:
type(grid_rf_class.best_estimator_)
sklearn.ensemble.forest.RandomForestClassifier
Этот объект можно также напрямую использовать как оценщик!
print(grid_rf_class.best_estimator_)

Дополнительная информация доступна в следующих свойствах:
scorer_Функция оценки, применявшаяся к отложенным данным (мы задали AUC)
n_splits_Количество разбиений при кросс-валидации (мы задали 5)
refit_time_Время (в секундах), затраченное на переобучение лучшей модели на всём наборе данных
Подбор гиперпараметров в Python