如何优雅地将Sklearn的GridseachCV的最佳参数传递给另一个模型?

Hen*_*rik 12 python machine-learning scikit-learn hyperparameters grid-search

我通过网格搜索CV为我的KNN估算器找到了一组最好的超参数:

>>> knn_gridsearch_model.best_params_
{'algorithm': 'auto', 'metric': 'manhattan', 'n_neighbors': 3}
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.我想用这些新发现的参数训练我的最终估算器.有没有办法直接提供上面的超参数字典?我试过这个:

>>> new_knn_model = KNeighborsClassifier(knn_gridsearch_model.best_params_)
Run Code Online (Sandbox Code Playgroud)

但相反,希望的结果new_knn_model只是将整个字典作为模型的第一个参数,并将其余的作为默认值:

>>> 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')
Run Code Online (Sandbox Code Playgroud)

确实令人失望.

Mir*_*ber 25

你可以这样做:

new_knn_model = KNeighborsClassifier()
new_knn_model.set_params(**knn_gridsearch_model.best_params_)
Run Code Online (Sandbox Code Playgroud)

或者直接解压缩为@taras建议:

new_knn_model = KNeighborsClassifier(**knn_gridsearch_model.best_params_)
Run Code Online (Sandbox Code Playgroud)

顺便说一下,在完成网格搜索后,网格搜索对象实际上保留了(默认情况下)最佳参数,因此您可以使用该对象本身.或者,您也可以通过最佳参数访问分类器

gs.best_estimator_
Run Code Online (Sandbox Code Playgroud)


Ray*_*ama 5

我只是想指出,使用grid.best_parameters并将它们传递给新模型,例如unpacking

my_model = KNeighborsClassifier(**grid.best_params_)
Run Code Online (Sandbox Code Playgroud)

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

例子:

y_pred = grid.predict(X_test)
Run Code Online (Sandbox Code Playgroud)

希望这有帮助。