GridSearchCV avec fonction de notation et paramètre de refit

Aug 22 2020

Ma question semble être similaire à celle-ci, mais il n'y a pas de réponse solide.

Je fais une classification multi-classes multi-labels, et pour cela j'ai défini mes propres buteurs. Cependant, pour avoir le refitparamètre et obtenir les meilleurs paramètres du modèle à la fin, nous devons introduire l'une des fonctions de scoreur pour le refit. Si je le fais, j'obtiens l'erreur that missing 1 required positional argument: 'y_pred'. y_pred doit être le résultat de l'ajustement. Mais je ne sais pas d'où vient ce problème et comment je peux le résoudre.

Voici le code:

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

Réponses

2 BenReiniger Aug 22 2020 at 22:09

Vous devez utiliser refit="roc_auc_score"le nom du marqueur dans votre dictionnaire. À partir de la documentation :

Pour l'évaluation de plusieurs métriques, cela doit être un strmarqueur qui serait utilisé pour trouver les meilleurs paramètres pour le réajustement de l'estimateur à la fin.

L'utilisation d'un appelable pour refita un but différent: l'appelable doit prendre le cv_results_dict et retourner le best_index_. Cela explique le message d'erreur: sklearn essaie de passer cv_results_à votre fonction de scoreur auc, mais cette fonction doit prendre des paramètres y_trueet y_pred.