sklearn auc ValueError: Nur eine Klasse in y_true vorhanden

9

Ich habe google gesucht und den stackoverflow-Beitrag zu diesem Fehler angezeigt. Sie sind nicht meine Fälle.

Ich benutze Keras, um ein einfaches neuronales Netzwerk zu trainieren und eine Vorbedingung für den geteilten Testdatensatz zu stellen. Aber wenn roc_auc_score verwendet wird, um auc zu berechnen, habe ich "ValueError: Nur eine Klasse in y_true. ROC AUC Score ist in diesem Fall nicht definiert.".

Ich überprüfe die Zielmarkenverteilung und sie sind sehr unausgeglichen. Einige Labels (in den insgesamt 29 Labels) haben nur 1 Instanz. Es ist daher wahrscheinlich, dass sie keine positive Label-Instanz auf dem Testlabel haben werden. Also hat die roc_auc_score -Funktion von sklearn das einzige Klassenproblem gemeldet. Das ist vernünftig.

Aber ich bin neugierig, denn wenn ich sklearns Funktion cross_val_score verwende, kann sie die AUC-Berechnung ohne Fehler verarbeiten.

%Vor%

Ich frage mich, was in cross_val_score passiert ist, weil die cross_val_score eine geschichtete Kreuzvalidierungs-Datenaufteilung verwenden?

== UPDATE ==
Ich fuhr fort zu graben, aber immer noch nicht den Unterschied dahinter.Ich sehe, dass cross_val_score Aufruf check_scoring(estimator, scoring=None, allow_none=False) , um einen Scorer, und die check_scoring ruft get_scorer(scoring) , die scorer=SCORERS[scoring]

zurückgeben wird

Und das SCORERS['roc_auc'] ist roc_auc_scorer ;
Der roc_auc_scorer wird von

gemacht %Vor%

Also, es benutzt immer noch die roc_auc_score-Funktion. Ich verstehe nicht, warum sich cross_val_score anders verhält, als direkt roc_auc_score aufzurufen.

    
Allan Ruin 18.08.2016, 12:21
quelle

1 Antwort

3

Ich denke, deine Vermutung ist richtig. Die AUC (Fläche unter der ROC-Kurve) benötigt eine ausreichende Anzahl von Klassen, um Sinn zu ergeben.

Standardmäßig berechnet cross_val_score die Leistungsmetrik jeweils separat. Eine andere Möglichkeit wäre, cross_val_predict zu verwenden und die AUC über alle zusammengefassten Falten zu berechnen.

Sie könnten etwas tun wie:

%Vor%     
Kris 19.08.2016 19:56
quelle

Tags und Links