Unterschiedliches Ergebnis mit roc_auc_score () und auc ()
Ich habe Schwierigkeiten zu verstehen, den Unterschied (wenn es einen gibt) zwischen roc_auc_score()
und auc()
in scikit-learn.
Im binden voraussagen eine binäre Ausgabe mit unausgewogenen Klassen (rund 1,5% für Y=1).
Classifier
model_logit = LogisticRegression(class_weight='auto')
model_logit.fit(X_train_ridge, Y_train)
Roc-Kurve
false_positive_rate, true_positive_rate, thresholds = roc_curve(Y_test, clf.predict_proba(xtest)[:,1])
AUC s
auc(false_positive_rate, true_positive_rate)
Out[490]: 0.82338034042531527
und
roc_auc_score(Y_test, clf.predict(xtest))
Out[493]: 0.75944737191205602
Jemand kann sich diesen Unterschied zu erklären ? Ich dachte, beide waren nur die Berechnung der Fläche unter der ROC-Kurve. Möglicherweise werden wegen der unausgewogenen Datensatz aber ich konnte nicht herausfinden, warum.
Dank!
InformationsquelleAutor der Frage Florian Gauthier | 2015-07-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
AUC nicht immer die Fläche unter der Kurve der ROC-Kurve. Die Fläche Unter der Kurve ist eine (abstrakte) Fläche unter einige Kurve, so ist es ein Allgemeines Ding als AUROC. Mit unbalancierte Klassen, kann es besser sein, zu finden, AUC für eine precision-recall-Kurve.
Sehen sklearn Quelle für
roc_auc_score
:Wie Sie sehen können, diese ruft zunächst eine roc-Kurve und ruft dann
auc()
um den Bereich.Ich denke mal dein problem ist die
predict_proba()
nennen. Für eine normalepredict()
die Ausgänge sind immer die gleichen:Wenn Sie die oben für diese, werden Sie manchmal erhalten unterschiedliche Ausgänge:
InformationsquelleAutor der Antwort oopcode
predict
gibt nur eine Klasse oder die anderen. Dann berechnest du ROC mit den Ergebnissen derpredict
auf einem Klassifikator, es gibt nur drei Schwellenwerte (trial alle eine Klasse, trivial, alle anderen in der Klasse, und in zwischen). Ihr ROC-Kurve sieht wie folgt aus:Mittlerweile
predict_proba()
gibt eine ganze Reihe von Wahrscheinlichkeiten, so können Sie jetzt mehr als drei Schwellenwerte auf Ihre Daten.Daher unterschiedliche Bereiche.
InformationsquelleAutor der Antwort Andreus
Wenn Sie die y_pred (class labels), die Sie bereits beschlossen
der Schwellenwert ist. Wenn Sie y_prob (positive Klasse Wahrscheinlichkeit)
Sie sind offen für die Schwelle, und die ROC-Kurve sollte helfen
Sie entscheiden sich für den Schwellenwert.
Für den ersten Fall nutzen Sie die Wahrscheinlichkeiten:
Wenn Sie das tun, werden Sie erwägen, die AUC 'vor' wobei
eine Entscheidung über die Schwelle, die Sie verwenden werden.
Im zweiten Fall nutzen Sie die Vorhersage (nicht der Wahrscheinlichkeiten),
verwenden Sie in diesem Fall 'Vorhersagen' statt 'predict_proba" für beide und Sie
sollte das gleiche Ergebnis erhalten.
InformationsquelleAutor der Antwort Dayvid Oliveira