Как элегантно передать лучшие параметры Sklearn's GridseachCV другой модели?
Я нашел набор лучших гиперпараметров для моего оценщика KNN с Grid Search CV:
>>> knn_gridsearch_model.best_params_
{'algorithm': 'auto', 'metric': 'manhattan', 'n_neighbors': 3}
Все идет нормально. Я хочу обучить мою окончательную оценку этим новым параметрам. Есть ли способ подачи вышеуказанного гиперпараметра на него напрямую? Я попробовал это:
>>> 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)
Надеюсь, это было полезно.