Avant-propos
La courbe ROC (Receiver Operating Characteristic) et l'AUC sont souvent utilisées pour évaluer la qualité d'un classificateur binaire. Cet article présentera d'abord brièvement le ROC et l'AUC, puis utilisera des exemples pour démontrer comment créer des courbes ROC et calculer l'AUC en python.
Introduction à l'AUC
AUC (Area Under Curve) est un indice d'évaluation très couramment utilisé dans les modèles de classification binaire d'apprentissage automatique comparés. Étant donné que F1-Score a une plus grande tolérance aux déséquilibres des projets, les bibliothèques d'apprentissage automatique actuellement courantes (telles que scikit-learn) intègrent généralement le calcul de cet indicateur, mais parfois les modèles sont séparés ou écrits par eux-mêmes, à l'heure actuelle, si vous le souhaitez. Si vous souhaitez évaluer la qualité du modèle de formation, vous devez créer vous-même un module de calcul de l'AUC. Lors de la recherche d'informations, cet article a révélé que libsvm-tools dispose d'un calcul de l'AUC très facile à comprendre, je l'ai donc choisi pour l'avenir. utiliser.
Calcul de l'AUC
Le calcul de l'AUC est divisé en trois étapes suivantes :
1. Préparation des données de calcul. S'il n'y a qu'un ensemble de formation lors de la formation du modèle, la validation croisée est généralement utilisée pour le calculer. S'il existe un ensemble d'évaluation (évaluer), il peut généralement être calculé directement. nécessite généralement le score de prédiction et sa catégorie cible (remarque : il s'agit de la catégorie cible, pas de la catégorie prédite)
2. Obtenez l'horizontale (X : taux de faux positifs) et la verticale (Y : vrais positifs Rate) points selon la division seuil
3, après avoir connecté les points de coordonnées dans une courbe, calculez l'aire sous la courbe, qui est la valeur de l'AUC
Entrez directement le code python
#! -*- coding=utf-8 -*- import pylab as pl from math import log,exp,sqrt evaluate_result="you file path" db = [] #[score,nonclk,clk] pos, neg = 0, 0 with open(evaluate_result,'r') as fs: for line in fs: nonclk,clk,score = line.strip().split('\t') nonclk = int(nonclk) clk = int(clk) score = float(score) db.append([score,nonclk,clk]) pos += clk neg += nonclk db = sorted(db, key=lambda x:x[0], reverse=True) #计算ROC坐标点 xy_arr = [] tp, fp = 0., 0. for i in range(len(db)): tp += db[i][2] fp += db[i][1] xy_arr.append([fp/neg,tp/pos]) #计算曲线下面积 auc = 0. prev_x = 0 for x,y in xy_arr: if x != prev_x: auc += (x - prev_x) * y prev_x = x print "the auc is %s."%auc x = [_v[0] for _v in xy_arr] y = [_v[1] for _v in xy_arr] pl.title("ROC curve of %s (AUC = %.4f)" % ('svm',auc)) pl.xlabel("False Positive Rate") pl.ylabel("True Positive Rate") pl.plot(x, y)# use pylab to plot x and y pl.show()# show the plot on the screen
L'ensemble de données d'entrée peut faire référence au résultat de la prédiction svm
Le format est :
nonclk \t clk \t score
Parmi eux :
1. nonclick : données non cliquées, qui peuvent être considérées comme le nombre d'échantillons négatifs
2 , clk : le nombre de clics, qui peuvent être considérées comme le nombre d'échantillons positifs
3. score : score prédit, utiliser ce score en tant que groupe pour effectuer des pré-statistiques d'échantillons positifs et négatifs peut réduire la quantité de calcul de l'AUC
Le résultat de l'opération est :
Si pylab n'est pas installé sur la machine, vous pouvez directement annoter les dépendances et la partie dessin
Remarque
Le code posté ci-dessus :
1. Seuls les résultats de deux catégories peuvent être calculés (comme pour les deux catégories Les tags peuvent être traités à votre guise )
2. Chaque score dans le code ci-dessus est seuillé. En fait, cette efficacité est assez faible. L'échantillon peut être échantillonné ou divisé en parties égales lors du calcul des coordonnées de l'axe horizontal. >
Pour plus d'articles sur le dessin de la courbe ROC par Python et le calcul de la valeur AUC, veuillez faire attention au site Web PHP chinois !