Fehlermeldung bei der Übergabe von Parametern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
nichtSoGuter
User
Beiträge: 92
Registriert: Mittwoch 13. April 2022, 17:40

Ich möchte die Performance meines Models mit mehreren Metriken gleichzeitig messen. Dazu nutze ich die "cross_validate" von sklearn.

Mein Code sieht folgendermaßen aus:

Code: Alles auswählen

 
    predictions = cross_val_predict(model,X_data, y_data, cv = 10)
    predict_proba =  cross_val_predict(model,X_data, y_data, cv = 10, method="predict_proba")

     scoring = {"Recall": make_scorer(recall_score,y_true=y_data, y_pred=predictions, pos_label=positive_class_label),
              "Precision": make_scorer(precision_score,y_true=y_data, y_pred=predictions, pos_label=positive_class_label),
               "F2_Score": make_scorer(fbeta_score,y_true=y_data, y_pred=predictions, beta = 2, pos_label=positive_class_label),
               "F0,5_Score": make_scorer(fbeta_score,y_true=y_data, y_pred=predictions, beta = 0.5, pos_label=positive_class_label),
               "Balanced_acc": make_scorer(balanced_accuracy_score,y_true=y_data, y_pred=predictions),
               "PR_AUC": make_scorer(average_precision_score,y_true=y_data, y_score=predict_proba[:,positive_class_label], 
                                     pos_label=positive_class_label, needs_threshold=True)}
    
    scores = cross_validate(model, X_data, y_data, scoring=scoring, cv=6)
 
Dabei erhalte ich folgende Fehlermeldung:
File "/home/hpc/iwfa/iwfa017h/.local/lib/python3.8/site-packages/sklearn/model_selection/_validation.py", line 767, in _score
scores = scorer(estimator, X_test, y_test)
File "/home/hpc/iwfa/iwfa017h/.local/lib/python3.8/site-packages/sklearn/metrics/_scorer.py", line 107, in __call__
score = scorer._score(cached_call, estimator, *args, **kwargs)
File "/home/hpc/iwfa/iwfa017h/.local/lib/python3.8/site-packages/sklearn/metrics/_scorer.py", line 268, in _score
return self._sign * self._score_func(y_true, y_pred, **self._kwargs)
TypeError: recall_score() got multiple values for argument 'y_true'
Dem Parameter "y_ture" von "recall_score" nur einmal was übergeben. Wieso erhalte ich die Fehlermeldung.
Dadurch werden alle sind die Werte für die Metricen alle gleich NaN.

Vielen Dank im Voraus!

LG
nichtSoGuter
User
Beiträge: 92
Registriert: Mittwoch 13. April 2022, 17:40

Weil sowohl den Metriken selbst (also recall_score, precision_score, etc.) als auch cross_validate die Features und Label übergeben wurden
Richtig wäre:

Code: Alles auswählen

    scoring = {"Recall": make_scorer(recall_score, pos_label=positive_class_label),
              "Precision": make_scorer(precision_score, pos_label=positive_class_label),
               "F2_Score": make_scorer(fbeta_score, beta = 2, pos_label=positive_class_label),
               "F0,5_Score": make_scorer(fbeta_score, beta = 0.5, pos_label=positive_class_label),
               "Balanced_acc": make_scorer(balanced_accuracy_score),
               "PR_AUC": make_scorer(average_precision_score, pos_label=positive_class_label, needs_threshold=True)}
    
    scores = cross_validate(model, X_data, y_data, scoring=scoring, cv=6)

Mimags
User
Beiträge: 4
Registriert: Freitag 30. Dezember 2022, 23:55
Wohnort: Deutschland

Hallo "nichtSoGuter",
Da mir der Code auf anhieb nichts wirklich aussagt, und in meiner IDE gleich alles gelb wird, weil es für die Variablen keine Werte gibt, kann ich dir nur den Ratschlag geben: setzt ein "print" vor die Methode und schau was da an Werten drin ist bzw. welcher Art. Oder versuchs gleich mal mit eingebauten Debugger, den wird man sowieso irgendwann mal nutzen lernen müssen.
Wenn du trotzdem keine Lösung gefunden hast, pack mal Beispiel Werte für die Variablen rein, das man probieren kann und das Problem bei sich daheim reproduzieren kann um es dann zu lösen, dir die Lösung zu kommen zu lassen.
Na dann Viel Glück!
Antworten