Szukaj…


Wprowadzenie do ROC i AUC

Przykład metryki charakterystyki odbiornika (ROC) do oceny jakości wyjściowej klasyfikatora.

Krzywe ROC zazwyczaj mają prawdziwie dodatnią częstość na osi Y i fałszywie dodatnią częstość na osi X. Oznacza to, że lewy górny róg wykresu jest punktem „idealnym” - fałszywie dodatnim współczynnikiem zerowym i prawdziwym dodatnim współczynnikiem równym jeden. Nie jest to zbyt realistyczne, ale oznacza to, że większy obszar pod krzywą (AUC) jest zwykle lepszy.

Ważna jest również „stromość” krzywych ROC, ponieważ idealnie jest zmaksymalizować rzeczywistą dodatnią częstość przy jednoczesnym zminimalizowaniu częstości fałszywie dodatniej.

Prosty przykład:

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

Arbitralne wartości y - w rzeczywistości są to przewidywane wartości docelowe ( model.predict(x_test) ):

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

Wyniki to średnia dokładność danych testowych i etykiet ( 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])

Oblicz krzywą ROC i AUC:

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

Konspiratorstwo:

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

Wynik:

wprowadź opis zdjęcia tutaj

Uwaga: źródła zostały zaczerpnięte z tych linków1 i linku2

Wynik ROC-AUC z nadpisywaniem i weryfikacją krzyżową

Potrzebne są przewidywane prawdopodobieństwa, aby obliczyć wynik ROC-AUC (pole pod krzywą). cross_val_predict używa metod predict klasyfikatorów. Aby uzyskać wynik ROC-AUC, można po prostu podklasować klasyfikator, zastępując metodę predict , aby działała ona jak 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)))

wynik:

ROC-AUC score: 0.724972396025


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow