GridSearchCV con funzione di punteggio e parametro Refit

Aug 22 2020

La mia domanda sembra essere simile a questa, ma non c'è una risposta solida.

Sto facendo una classificazione multi-classe multi-etichetta e per farlo ho definito i miei punteggi. Tuttavia, per avere il refitparametro e ottenere i migliori parametri del modello alla fine dobbiamo introdurre una delle funzioni di scorer per il refit. Se lo faccio, ottengo l'errore that missing 1 required positional argument: 'y_pred'. y_pred dovrebbe essere il risultato dell'adattamento. Ma non sono sicuro da dove provenga questo problema e come posso risolverlo.

Di seguito il codice:

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

Risposte

2 BenReiniger Aug 22 2020 at 22:09

Dovresti usare refit="roc_auc_score", il nome del segnapunti nel tuo dizionario. Dai documenti :

Per la valutazione con metriche multiple, questo deve essere una strdenotazione del segnapunti che verrebbe utilizzato per trovare i migliori parametri per il refitting dello stimatore alla fine.

Usare un callable per refitha uno scopo diverso: il callable dovrebbe prendere il cv_results_dict e restituire il file best_index_. Questo spiega il messaggio di errore: sklearn sta cercando di passare cv_results_alla tua funzione di punteggio auc, ma quella funzione dovrebbe prendere parametri y_truee y_pred.