Buscar..


Introducción a ROC y AUC

Ejemplo de métrica de Característica operativa del receptor (ROC) para evaluar la calidad de salida del clasificador.

Las curvas ROC suelen presentar una tasa de verdaderos positivos en el eje Y, y una tasa de falsos positivos en el eje X. Esto significa que la esquina superior izquierda de la gráfica es el punto "ideal": una tasa de falsos positivos de cero y una verdadera tasa de positivos de uno. Esto no es muy realista, pero sí significa que un área más grande debajo de la curva (AUC) suele ser mejor.

La "inclinación" de las curvas ROC también es importante, ya que es ideal para maximizar la tasa de verdaderos positivos mientras minimiza la tasa de falsos positivos.

Un ejemplo simple:

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

Valores de y arbitrarios: en el caso real, estos son los valores de destino pronosticados ( model.predict(x_test) ):

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

Las puntuaciones son la precisión media en los datos de prueba y las etiquetas 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])

Calcula la curva ROC y la AUC:

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

Trazar

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

Salida:

introduzca la descripción de la imagen aquí

Nota: las fuentes fueron tomadas de estos link1 y link2

Puntaje ROC-AUC con invalidación y validación cruzada

Uno necesita las probabilidades pronosticadas para calcular la puntuación ROC-AUC (área bajo la curva). El cross_val_predict utiliza los métodos de predict de los clasificadores. Para poder obtener el puntaje ROC-AUC, uno puede simplemente subclasificar el clasificador, anulando el método de predict , para que actúe como 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)))

salida:

ROC-AUC score: 0.724972396025


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow