Recherche…


Introduction à ROC et AUC

Exemple de mesure ROC (Receiver Operating Characteristic) pour évaluer la qualité de sortie du classificateur.

Les courbes ROC comportent généralement un taux de vrais positifs sur l'axe Y et un taux de faux positifs sur l'axe X. Cela signifie que le coin supérieur gauche de l'intrigue est le point «idéal» - un taux de faux positif de zéro et un taux positif réel de un. Ce n'est pas très réaliste, mais cela signifie qu'une plus grande surface sous la courbe (AUC) est généralement meilleure.

La «raideur» des courbes ROC est également importante, car il est idéal pour maximiser le taux positif réel tout en minimisant le taux de faux positifs.

Un exemple simple:

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

Valeurs y arbitraires - en réalité, il s'agit des valeurs cibles prévues ( model.predict(x_test) ):

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

Les scores sont la précision moyenne sur les données de test et les étiquettes données ( 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])

Calculez la courbe ROC et l'ASC:

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

Traçage:

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

Sortie:

entrer la description de l'image ici

Note: les sources ont été prises à partir de ces link1 et lien2

Score ROC-AUC avec validation et validation croisée

On a besoin des probabilités prévues pour calculer le score ROC-AUC (aire sous la courbe). cross_val_predict utilise les méthodes de predict des classificateurs. Pour pouvoir obtenir le score ROC-AUC, il suffit de sous-classer le classificateur, en écrasant la méthode predict , de manière à ce qu'il agisse comme 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)))

sortie:

ROC-AUC score: 0.724972396025


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow