【问题标题】:How to pass elegantly Sklearn's GridseachCV's best parameters to another model?如何优雅地将 Sklearn GridsearchCV 最佳参数传递给另一个模型?
【发布时间】:2017-12-17 21:16:08
【问题描述】:

我为我的 KNN 估计器找到了一组最佳超参数,其中包含 Grid Search CV:

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

到目前为止,一切都很好。我想用这些新发现的参数训练我的最终估计器。有没有办法直接将上述超参数 dict 提供给它?我试过这个:

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

确实令人失望。

【问题讨论】:

  • 你必须用**knn_gridsearch_model.best_params_解压dict

标签: python machine-learning scikit-learn grid-search hyperparameters


【解决方案1】:

你可以这样做:

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_

【讨论】:

  • 谢谢。至于你的后一个提示,我需要回收最好的参数,因为我想最后在组合的训练+测试集上训练一个新模型。
  • 我在这里使用最后一个答案 gs.best_estimator_ 来做到这一点,我建议将其作为这三个方法中的最佳方法。
【解决方案2】:

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

my_model = KNeighborsClassifier(**grid.best_params_)

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

示例:

y_pred = grid.predict(X_test)

希望这对您有所帮助。

【讨论】:

    猜你喜欢
    • 2018-05-02
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 2015-03-04
    • 2014-09-17
    • 1970-01-01
    相关资源
    最近更新 更多