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
Wenn pylab nicht auf diesem Computer installiert ist, können Sie die Abhängigkeiten und den Zeichnungsteil direkt mit Anmerkungen versehen
Hinweis
Weitere Artikel zum Zeichnen der ROC-Kurve in Python und zur Berechnung des AUC-Werts finden Sie auf der chinesischen PHP-Website!