Как передать лучшие параметры Gridseachcv от Sklearn в другую модель?

Я нашел набор лучших гиперпараметров для моей оценки KNN с поиском сетки CV:

>>> knn_gridsearch_model.best_params_
{'algorithm': 'auto', 'metric': 'manhattan', 'n_neighbors': 3}

пока все хорошо. Я хочу обучить мою окончательную оценку этим новым параметрам. Есть ли способ, чтобы накормить выше hyperparameter дикт к нему напрямую? Я попробовал:

>>> new_knn_model = KNeighborsClassifier(knn_gridsearch_model.best_params_)

но вместо этого ожидаемый результат new_knn_model просто получил весь dict в качестве первого параметра модели и оставил остальные по умолчанию:

>>> knn_model
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
           metric_params=None, n_jobs=1,
           n_neighbors={'n_neighbors': 3, 'metric': 'manhattan', 'algorithm': 'auto'},
           p=2, weights='uniform')

разочарование действительно.

2 ответов


вы можете сделать это следующим образом:

new_knn_model = KNeighborsClassifier()
new_knn_model.set_params(**knn_gridsearch_model.best_params_)

или просто распаковать непосредственно, как предложил @ taras:

new_knn_model = KNeighborsClassifier(**knn_gridsearch_model.best_params_)

кстати, после завершения поиска сетки объект поиска сетки фактически сохраняет (по умолчанию) лучшие параметры, поэтому вы можете использовать сам объект. Кроме того, вы также можете получить доступ к классификатору с лучшими параметрами через

gs.best_estimator_

Я просто хочу отметить, что с помощью grid.best_parameters и передайте их новой модели по unpacking как:

my_model = KNeighborsClassifier(**grid.best_params_)

хороший и все и я лично использовал его много.
Однако, как вы можете видеть в документации здесь, если ваша цель-предсказать что-то с помощью этих best_parameters, вы можете напрямую использовать grid.predict метод, который будет использовать эти лучшие параметры по умолчанию.

пример:

y_pred = grid.predict(X_test)

надеюсь, что это было полезный.