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

Python dessine la courbe ROC et calcule la valeur AUC (avec code)

烟雨青岚
烟雨青岚avant
2020-06-19 13:01:546946parcourir

Python dessine la courbe ROC et calcule la valeur AUC (avec code)

Avant-propos

Courbe ROC (Receiver Operating Characteristic) et AUC sont souvent utilisés 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 indicateur d'évaluation très couramment utilisé dans les modèles de classification binaire d'apprentissage automatique. Par rapport au F1-Score, il a actuellement une plus grande tolérance aux déséquilibres des projets. Les bibliothèques courantes de machine learning (comme scikit-learn) intègrent généralement le calcul de cet indicateur, mais parfois le modèle est séparé ou écrit par vous-même. Dans ce cas, si vous souhaitez évaluer la qualité du modèle de formation, vous devez le faire. un module de calcul de l'AUC. Lors de la recherche d'informations, cet article a révélé que libsvm-tools avait un calcul de l'AUC très facile à comprendre, je l'ai donc choisi pour une utilisation future.

Calcul de l'AUC

Le calcul de l'AUC est divisé en trois étapes suivantes :

1. Préparation des données de calcul, qui sont généralement utilisées s'il n'y en a que. un ensemble d'entraînement lors de l'entraînement du modèle. Calculé par validation croisée, s'il existe un ensemble d'évaluation (évaluer), il peut généralement être calculé directement. Le format des données nécessite généralement le score prédit et sa catégorie cible (notez que c'est le cas). la catégorie cible, pas la catégorie prédite)
2. Selon la division du seuil, les points horizontaux (X : taux de faux positifs) et verticaux (Y : taux de vrais positifs) sont obtenus
3. Après avoir connecté les coordonnées points dans une courbe, calculez l'aire sous la courbe, qui est la valeur de l'AUC

Allez directement au 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 = 0for 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

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

Si pylab n'est pas installé sur votre machine, vous pouvez directement annoter les dépendances et les parties du dessin
Faites attention au code posté ci-dessus : 1. Seuls les résultats des deux les catégories peuvent être calculées (comme pour les étiquettes des deux catégories, vous pouvez les manipuler avec désinvolture)
2. Chaque score dans le code ci-dessus a un seuil En fait, cette efficacité est assez faible. Calculez des parties égales lors du calcul des coordonnées de l'axe horizontal
Merci beaucoup d'avoir lu
Quand j'étais à l'université, j'ai choisi d'apprendre le python par moi-même. Quand j'ai commencé à travailler, j'ai découvert que je souffrais d'une mauvaise base informatique. Je ne pourrais rien faire si je n'avais pas de bonnes qualifications académiques. Je peux rattraper après-demain, alors j'ai lancé ma propre contre-attaque en dehors du codage, j'ai continué à apprendre les connaissances de base de Python et j'ai étudié les bases. connaissances informatiques approfondies. Après l'avoir trié, je l'ai publié sur notre compte public WeChat "Programmer Academy". Si vous ne voulez pas être médiocre, alors rejoignez-moi et continuez à grandir en dehors du codage !

En fait, il n'y a pas que des technologies ici, mais aussi des choses autres que la technologie. Par exemple, comment être un programmeur exquis au lieu d'un "diaos". Le programmeur lui-même est une existence noble, ce n'est pas le cas. il? ? [Cliquez pour rejoindre] Si vous voulez être vous-même et devenir une personne noble, allez !

Merci à tous d'avoir lu, j'espère que vous en bénéficierez beaucoup.

Cet article est reproduit à partir de : https://blog.csdn.net/adrrry/article/details/106796288

Tutoriel recommandé : "

Tutoriel python

"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer