scikit-learn
Caractéristique d'exploitation du récepteur (ROC)
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:
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