Heim  >  Artikel  >  Backend-Entwicklung  >  Python zeichnet eine ROC-Kurve und berechnet den AUC-Wert

Python zeichnet eine ROC-Kurve und berechnet den AUC-Wert

高洛峰
高洛峰Original
2017-02-24 16:12:232716Durchsuche

Vorwort

ROC-Kurve (Receiver Operating Characteristic) und AUC werden häufig zur Bewertung der Qualität eines binären Klassifikators verwendet. In diesem Artikel werden ROC und AUC zunächst kurz vorgestellt und anschließend anhand von Beispielen gezeigt, wie ROC-Kurven erstellt und AUC in Python berechnet werden.

AUC-Einführung

AUC (Area Under Curve) ist ein sehr häufig verwendeter Bewertungsindex in binären Klassifizierungsmodellen für maschinelles Lernen Da F1-Score eine größere Toleranz gegenüber Projektungleichgewichten aufweist, integrieren derzeit gängige Bibliotheken für maschinelles Lernen (z. B. Scikit-Learn) im Allgemeinen die Berechnung dieses Indikators, aber manchmal ist das Modell zu diesem Zeitpunkt separat oder für sich selbst geschrieben Wenn Sie die Qualität des Trainingsmodells bewerten möchten, müssen Sie selbst ein AUC-Berechnungsmodul erstellen. Bei der Suche nach Informationen habe ich festgestellt, dass libsvm-tools über eine sehr leicht verständliche AUC-Berechnung verfügt, daher habe ich es für die Zukunft ausgewählt verwenden.

AUC-Berechnung

Die Berechnung der AUC gliedert sich in die folgenden drei Schritte:

1. Wenn während des Modelltrainings nur ein Trainingssatz vorhanden ist, wird im Allgemeinen eine Kreuzvalidierung zur Berechnung verwendet. Wenn ein Bewertungssatz vorhanden ist, kann dieser normalerweise direkt berechnet werden Erfordert im Allgemeinen die Vorhersagebewertung und ihre Zielkategorie (Hinweis: Es handelt sich um die Zielkategorie, nicht um die vorhergesagte Kategorie)

2. Ermitteln Sie die horizontale (X: Falsch-Positiv-Rate) und die vertikale (Y: Richtig-Positiv-Rate). Bewerten Sie Punkte gemäß der Schwellenwertteilung

3. Berechnen Sie nach dem Verbinden der Koordinatenpunkte zu einer Kurve die Fläche unter der Kurve, die den Wert von AUC darstellt

Geben Sie direkt den Python-Code ein

#! -*- 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

Der Eingabedatensatz kann sich auf das SVM-Vorhersageergebnis beziehen

Das Format ist:

nonclk \t clk \t score

Unter ihnen:
1. nonclick: nicht angeklickte Daten, die als Anzahl der negativen Proben

2 angesehen werden können, clk: die Anzahl der Klicks, die als Anzahl der positiven Proben

3. Punktzahl: vorhergesagte Punktzahl. Die Verwendung dieser Punktzahl als Gruppe zur Durchführung von Vorstatistiken positiver und negativer Proben kann den Umfang der AUC-Berechnung reduzieren


Das Ergebnis des Laufens ist:

Python zeichnet eine ROC-Kurve und berechnet den AUC-Wert

Wenn pylab nicht auf diesem Computer installiert ist, können Sie die Abhängigkeiten und den Zeichnungsteil direkt mit Anmerkungen versehen


Hinweis

Der oben gepostete Code:


1. Es können nur die Ergebnisse der beiden Kategorien berechnet werden (wie bei den beiden Kategorien können Tags nach Belieben verarbeitet werden)


2. Jede Punktzahl im obigen Code ist tatsächlich recht gering. Die Stichprobe kann bei der Berechnung der horizontalen Achsenkoordinaten abgetastet oder aufgeteilt werden

Weitere Artikel zum Zeichnen der ROC-Kurve in Python und zur Berechnung des AUC-Werts finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn