22

I have found a set of best hyperparameters for my KNN estimator with Grid Search CV:

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

So far, so good. I want to train my final estimator with these new-found parameters. Is there a way to feed the above hyperparameter dict to it directly? I tried this:

>>> new_knn_model = KNeighborsClassifier(knn_gridsearch_model.best_params_)

but instead the hoped result new_knn_model just got the whole dict as the first parameter of the model and left the remaining ones as default:

>>> 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')

Disappointing indeed.

4

2 回答 2

40

你可以这样做:

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_
于 2017-07-13T08:06:18.027 回答
3

我只想指出,使用grid.best_parameters并通过以下方式将它们传递给新模型unpacking

my_model = KNeighborsClassifier(**grid.best_params_)

很好,我个人经常使用它。
但是,正如您在此处的文档中看到的那样,如果您的目标是使用那些 best_parameters 预测某些东西,您可以直接使用grid.predict默认情况下为您使用这些最佳参数的方法。

例子:

y_pred = grid.predict(X_test)

希望这会有所帮助。

于 2017-07-13T08:22:33.713 回答