Ricerca…


Introduzione a ROC e AUC

Esempio di metrica Receiver Operating Characteristic (ROC) per valutare la qualità di uscita del classificatore.

Le curve ROC presentano tipicamente una velocità positiva reale sull'asse Y e una percentuale di falsi positivi sull'asse X. Ciò significa che l'angolo in alto a sinistra della trama è il punto "ideale" - un tasso di falsi positivi pari a zero e un vero tasso positivo di uno. Questo non è molto realistico, ma significa che un'area più ampia sotto la curva (AUC) di solito è migliore.

Anche la "pendenza" delle curve ROC è importante, poiché è ideale per massimizzare il tasso positivo reale riducendo al minimo il tasso di falsi positivi.

Un semplice esempio:

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

Valori arbitrari y : in questo caso i valori target previsti ( model.predict(x_test) ):

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

Il punteggio è l'accuratezza media dei dati di test e delle etichette 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])

Calcola la curva ROC e l'AUC:

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

Tracciare:

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

Produzione:

inserisci la descrizione dell'immagine qui

Nota: le fonti sono state prese da questi link1 e link2

Punteggio ROC-AUC con override e cross validation

Uno ha bisogno delle probabilità previste per calcolare il punteggio ROC-AUC (area sotto la curva). cross_val_predict utilizza i metodi di predict dei classificatori. Per poter ottenere il punteggio ROC-AUC, si può semplicemente sottoclasse il classificatore, sovrascrivendo il metodo di predict , in modo che si predict_proba come 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)))

produzione:

ROC-AUC score: 0.724972396025


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow