scikit-learn
Receiver Operating Characteristic (ROC)
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:
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