web-dev-qa-db-ja.com

SklearnのGridseachCVの最適なパラメーターを別のモデルにエレガントに渡す方法は?

グリッド検索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 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')

本当にがっかり。

14
Hendrik

次のようにして行うことができます。

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_
27
Miriam Farber

grid.best_parametersを使用していることを指摘し、unpackingを使用してそれらを新しいモデルに渡します。

my_model = KNeighborsClassifier(**grid.best_params_)

すべてが良いですし、私は個人的にそれをたくさん使用しました。
ただし、ドキュメント here で確認できるように、これらのbest_parametersを使用して何かを予測することが目的である場合は、これらを最適に使用するgrid.predictメソッドを直接使用できます。デフォルトであなたのためのパラメータ。

例:

y_pred = grid.predict(X_test)

これがお役に立てば幸いです。

1
Rayhane Mama