GridSearchCV mit Bewertungsfunktion und Refit-Parameter
Meine Frage scheint ähnlich zu sein , diese aber es gibt keine feste Antwort gibt.
Ich mache eine Multi-Class-Multi-Label-Klassifizierung und habe dafür meine eigenen Torschützen definiert. Um jedoch den refitParameter zu haben und am Ende die besten Parameter des Modells zu erhalten, müssen wir eine der Scorer-Funktionen für die Überholung einführen. Wenn ich das tue, bekomme ich den Fehler, dass missing 1 required positional argument: 'y_pred'. y_pred sollte das Ergebnis der Anpassung sein. Aber ich bin mir nicht sicher, woher dieses Problem kommt und wie ich es lösen kann.
Unten ist der 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_)
Antworten
Sie sollten refit="roc_auc_score"den Namen des Scorers in Ihrem Wörterbuch verwenden. Aus den Dokumenten :
Für die Auswertung mehrerer Metriken muss dies eine Bewertung
strdes Scorers sein, mit dem am Ende die besten Parameter für die Anpassung des Schätzers ermittelt werden.
Die Verwendung eines Callable für refithat einen anderen Zweck: Der Callable sollte das cv_results_Diktat annehmen und das zurückgeben best_index_. Das erklärt die Fehlermeldung: sklearn versucht, cv_results_an Ihre auc scorer-Funktion zu übergeben, aber diese Funktion sollte Parameter y_trueund annehmen y_pred.