Seite 1 von 1

Fehlermeldung bei der Übergabe von Parametern

Verfasst: Samstag 31. Dezember 2022, 23:19
von nichtSoGuter
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

Re: Fehlermeldung bei der Übergabe von Parametern

Verfasst: Samstag 31. Dezember 2022, 23:28
von nichtSoGuter
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)


Re: Fehlermeldung bei der Übergabe von Parametern

Verfasst: Sonntag 1. Januar 2023, 15:08
von Mimags
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!