如何优雅地将 Sklearn GridsearchCV 最佳参数传递给另一个模型?
How to pass elegantly Sklearn's GridseachCV's best parameters to another model?
我使用网格搜索 CV 为我的 KNN 估计器找到了一组最佳超参数:
>>> knn_gridsearch_model.best_params_
{'algorithm': 'auto', 'metric': 'manhattan', 'n_neighbors': 3}
到目前为止,还不错。我想用这些新发现的参数训练我的最终估计器。有没有办法直接将上面的超参数字典提供给它?我试过这个:
>>> new_knn_model = KNeighborsClassifier(knn_gridsearch_model.best_params_)
但相反,希望的结果 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')
确实令人失望。
您可以按如下方式进行:
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_)
很好,我个人经常使用它。
但是,正如您在文档 here 中看到的那样,如果您的目标是使用那些 best_parameters 来预测某些内容,您可以直接使用 grid.predict
方法,该方法将为您使用这些最佳参数默认。
示例:
y_pred = grid.predict(X_test)
希望这对您有所帮助。
我使用网格搜索 CV 为我的 KNN 估计器找到了一组最佳超参数:
>>> knn_gridsearch_model.best_params_
{'algorithm': 'auto', 'metric': 'manhattan', 'n_neighbors': 3}
到目前为止,还不错。我想用这些新发现的参数训练我的最终估计器。有没有办法直接将上面的超参数字典提供给它?我试过这个:
>>> new_knn_model = KNeighborsClassifier(knn_gridsearch_model.best_params_)
但相反,希望的结果 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')
确实令人失望。
您可以按如下方式进行:
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_)
很好,我个人经常使用它。
但是,正如您在文档 here 中看到的那样,如果您的目标是使用那些 best_parameters 来预测某些内容,您可以直接使用 grid.predict
方法,该方法将为您使用这些最佳参数默认。
示例:
y_pred = grid.predict(X_test)
希望这对您有所帮助。