Zoeken…


Inleiding tot ROC en AUC

Voorbeeld van ROC-statistiek (Receiver Operating Characteristic) om de uitvoerkwaliteit van de classificator te evalueren.

ROC-curves hebben meestal een echte positieve snelheid op de Y-as en een fout-positieve snelheid op de X-as. Dit betekent dat de linkerbovenhoek van de plot het "ideale" punt is - een vals positieve snelheid van nul en een echte positieve snelheid van één. Dit is niet erg realistisch, maar het betekent wel dat een groter gebied onder de curve (AUC) meestal beter is.

De "steilheid" van ROC-curven is ook belangrijk, omdat het ideaal is om de echte positieve snelheid te maximaliseren en tegelijkertijd de fout-positieve snelheid te minimaliseren.

Een eenvoudig voorbeeld:

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

Willekeurige y waarden - in het echte geval zijn dit de voorspelde doelwaarden ( model.predict(x_test) ):

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

Scores is de gemiddelde nauwkeurigheid op de gegeven testgegevens en 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])

Bereken de ROC-curve en de AUC:

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

Het in kaart brengen:

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()

Output:

voer hier de afbeeldingsbeschrijving in

Opmerking: de bronnen zijn afkomstig van deze link1 en link2

ROC-AUC-score met overschrijven en kruisvalidatie

Men heeft de voorspelde waarschijnlijkheden nodig om de ROC-AUC (gebied onder de curve) te berekenen. De cross_val_predict gebruikt de predict van classificaties. Om de ROC-AUC-score te kunnen krijgen, kan de classificator eenvoudigweg worden onderverdeeld, waarbij de predict wordt predict_proba , zodat deze zou werken als 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)))

output:

ROC-AUC score: 0.724972396025


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow