Suche…


Einführung in ROC und AUC

Beispiel einer Receiver Operating Characteristic (ROC) -Metrik zur Bewertung der Klassifizierer-Ausgabequalität.

ROC-Kurven weisen normalerweise eine echte positive Rate auf der Y-Achse und eine falsche positive Rate auf der X-Achse auf. Dies bedeutet, dass die obere linke Ecke des Diagramms der "ideale" Punkt ist - eine falsch positive Rate von Null und eine echte positive Rate von Eins. Dies ist nicht sehr realistisch, bedeutet jedoch, dass eine größere Fläche unter der Kurve (AUC) normalerweise besser ist.

Die "Steilheit" der ROC-Kurven ist ebenfalls wichtig, da sie ideal ist, um die wahre positive Rate zu maximieren und gleichzeitig die falsch positive Rate zu minimieren.

Ein einfaches Beispiel:

import numpy as np
from sklearn import metrics
import matplotlib.pyplot as plt

Beliebige y Werte - im realen Fall sind dies die vorhergesagten Zielwerte ( model.predict(x_test) ):

y = np.array([1,1,2,2,3,3,4,4,2,3])

Scores ist die mittlere Genauigkeit der angegebenen Testdaten und Labels ( model.score(X,Y) ):

scores = np.array([0.3, 0.4, 0.95,0.78,0.8,0.64,0.86,0.81,0.9, 0.8])

Berechnen Sie die ROC-Kurve und die AUC:

fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
roc_auc = metrics.auc(fpr, tpr)

Plotten:

plt.figure()
plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()

Ausgabe:

Geben Sie hier die Bildbeschreibung ein

Hinweis: Die Quellen wurden diesen Links1 und Link2 entnommen

ROC-AUC-Bewertung mit Überschreibung und Kreuzvalidierung

Man benötigt die vorhergesagten Wahrscheinlichkeiten, um den ROC-AUC-Wert (Bereich unter der Kurve) zu berechnen. Das cross_val_predict verwendet die predict der Klassifizierer. Um den ROC-AUC-Score erhalten zu können, kann man den Klassifizierer einfach subklassieren und die predict Methode überschreiben, so dass er wie predict_proba .

from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.cross_validation import cross_val_predict
from sklearn.metrics import roc_auc_score

class LogisticRegressionWrapper(LogisticRegression):
    def predict(self, X):
        return super(LogisticRegressionWrapper, self).predict_proba(X)

X, y = make_classification(n_samples = 1000, n_features=10, n_classes = 2, flip_y = 0.5)

log_reg_clf = LogisticRegressionWrapper(C=0.1, class_weight=None, dual=False,
             fit_intercept=True)

y_hat = cross_val_predict(log_reg_clf, X, y)[:,1]

print("ROC-AUC score: {}".format(roc_auc_score(y, y_hat)))

Ausgabe:

ROC-AUC score: 0.724972396025


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow