スコアリング関数とリフィットパラメータを備えたGridSearchCV
Aug 22 2020
私の質問はこれに似ているようですが、確かな答えはありません。
私はマルチクラスマルチラベル分類を行っています。そのために、独自のスコアラーを定義しました。ただし、refit
パラメーターを取得し、最後にモデルの最適なパラメーターを取得するには、リフィット用のスコアラー関数の1つを導入する必要があります。そうすると、エラーが発生しmissing 1 required positional argument: 'y_pred'
ます。y_predはfitの結果である必要があります。しかし、この問題がどこから来ているのか、どうすれば解決できるのかわかりません。
以下はコードです:
scoring = {'roc_auc_score':make_scorer(roc_auc_score),
'precision_score':make_scorer(precision_score, average='samples'),
'recall_score':make_scorer(recall_score, average='samples')}
params = {'estimator__n_estimators': [500,800],
'estimator__max_depth': [10,50],}
model = xgb.XGBClassifier(n_jobs=4)
model = MultiOutputClassifier(model)
cls = GridSearchCV(model, params, cv=3, refit=make_scorer(roc_auc_score), scoring = scoring, verbose=3, n_jobs= -1)
model = cls.fit(x_train_ups, y_train_ups)
print(model.best_params_)
回答
2 BenReiniger Aug 22 2020 at 22:09
refit="roc_auc_score"
辞書にあるスコアラーの名前を使用する必要があります。ドキュメントから:
複数のメトリック評価の場合、これは
str
、最後に推定量を再調整するための最適なパラメーターを見つけるために使用されるスコアラーを示す必要があります。
呼び出し可能オブジェクトの使用にrefit
は別の目的があります。呼び出し可能オブジェクトはcv_results_
dictを受け取り、を返す必要がありbest_index_
ます。これはエラーメッセージを説明しています:sklearnはauccv_results_
スコアラー関数に渡そうとしていますが、その関数はパラメーターy_true
とを受け取る必要がありますy_pred
。