Maison  >  Article  >  développement back-end  >  Python dessine la courbe ROC et calcule la valeur AUC

Python dessine la courbe ROC et calcule la valeur AUC

高洛峰
高洛峰original
2017-02-24 16:12:232716parcourir

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 :

Python dessine la courbe ROC et calcule la valeur AUC

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 !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn