scikit-learn
Característica de funcionamiento del receptor (ROC)
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:
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