CNTK - Klassifizierungsmodell

In diesem Kapitel erfahren Sie, wie Sie die Leistung des Klassifizierungsmodells in CNTK messen. Beginnen wir mit der Verwirrungsmatrix.

Verwirrung Matrix

Verwirrungsmatrix - Eine Tabelle mit der vorhergesagten Ausgabe gegenüber der erwarteten Ausgabe ist der einfachste Weg, um die Leistung eines Klassifizierungsproblems zu messen, bei dem die Ausgabe aus zwei oder mehr Arten von Klassen bestehen kann.

Um zu verstehen, wie es funktioniert, erstellen wir eine Verwirrungsmatrix für ein binäres Klassifizierungsmodell, das vorhersagt, ob eine Kreditkartentransaktion normal oder ein Betrug war. Es wird wie folgt gezeigt -

Tatsächlicher Betrug Eigentlich normal

Predicted fraud

Richtig positiv

Falsch positiv

Predicted normal

Falsch negativ

Richtig negativ

Wie wir sehen können, enthält die obige Beispielverwirrungsmatrix zwei Spalten, eine für Klassenbetrug und eine für Klassennormal. Auf die gleiche Weise haben wir 2 Zeilen, eine wird für Klassenbetrug und eine andere für Klassennormal hinzugefügt. Es folgt die Erläuterung der mit der Verwirrungsmatrix verbundenen Begriffe:

  • True Positives - Wenn sowohl die tatsächliche Klasse als auch die vorhergesagte Klasse des Datenpunkts 1 ist.

  • True Negatives - Wenn sowohl die tatsächliche Klasse als auch die vorhergesagte Klasse des Datenpunkts 0 ist.

  • False Positives - Wenn die tatsächliche Datenpunktklasse 0 ist und die vorhergesagte Datenpunktklasse 1 ist.

  • False Negatives - Wenn die tatsächliche Datenpunktklasse 1 ist und die vorhergesagte Datenpunktklasse 0 ist.

Mal sehen, wie wir aus der Verwirrungsmatrix die Anzahl verschiedener Dinge berechnen können -

  • Accuracy- Dies ist die Anzahl der korrekten Vorhersagen, die von unserem ML-Klassifizierungsmodell gemacht wurden. Sie kann mit Hilfe der folgenden Formel berechnet werden:

  • Precision- Es sagt uns, wie viele Proben von allen Proben, die wir vorhergesagt haben, korrekt vorhergesagt wurden. Sie kann mit Hilfe der folgenden Formel berechnet werden:

  • Recall or Sensitivity- Rückruf ist die Anzahl der von unserem ML-Klassifizierungsmodell zurückgegebenen Positiven. Mit anderen Worten, es gibt Auskunft darüber, wie viele Betrugsfälle im Datensatz tatsächlich vom Modell erkannt wurden. Sie kann mit Hilfe der folgenden Formel berechnet werden:

  • Specificity- Im Gegensatz zum Rückruf gibt es die Anzahl der von unserem ML-Klassifizierungsmodell zurückgegebenen Negative an. Sie kann mit Hilfe der folgenden Formel berechnet werden:

F-Maß

Wir können F-Measure als Alternative zur Verwirrungsmatrix verwenden. Der Hauptgrund dafür ist, dass wir Rückruf und Präzision nicht gleichzeitig maximieren können. Zwischen diesen Metriken besteht eine sehr starke Beziehung, die anhand des folgenden Beispiels verstanden werden kann:

Angenommen, wir möchten ein DL-Modell verwenden, um Zellproben als krebsartig oder normal zu klassifizieren. Um maximale Präzision zu erreichen, müssen wir die Anzahl der Vorhersagen auf 1 reduzieren. Dies kann zwar zu einer Genauigkeit von etwa 100 Prozent führen, aber der Rückruf wird sehr gering.

Wenn wir andererseits einen maximalen Rückruf erreichen möchten, müssen wir so viele Vorhersagen wie möglich treffen. Dies kann zwar zu einem Rückruf von rund 100 Prozent führen, aber die Präzision wird sehr gering.

In der Praxis müssen wir einen Weg finden, um Präzision und Rückruf auszugleichen. Die F-Maß-Metrik ermöglicht dies, da sie einen harmonischen Durchschnitt zwischen Präzision und Rückruf ausdrückt.

Diese Formel wird als F1-Maß bezeichnet, wobei der zusätzliche Term mit der Bezeichnung B auf 1 gesetzt wird, um ein gleiches Verhältnis von Präzision und Rückruf zu erhalten. Um den Rückruf hervorzuheben, können wir den Faktor B auf 2 setzen. Um die Genauigkeit zu betonen, können wir den Faktor B auf 0,5 setzen.

Verwendung von CNTK zur Messung der Klassifizierungsleistung

Im vorherigen Abschnitt haben wir ein Klassifizierungsmodell unter Verwendung des Irisblumendatensatzes erstellt. Hier messen wir die Leistung mithilfe der Verwirrungsmatrix und der F-Messmetrik.

Verwirrungsmatrix erstellen

Wir haben das Modell bereits erstellt, damit wir den Validierungsprozess starten können, einschließlich confusion matrix, auf demselben. Zunächst erstellen wir mit Hilfe der eine Verwirrungsmatrixconfusion_matrix Funktion von scikit-learn. Dazu benötigen wir die realen Etiketten für unsere Testmuster und die vorhergesagten Etiketten für dieselben Testmuster.

Berechnen wir die Verwirrungsmatrix mit dem folgenden Python-Code:

from sklearn.metrics import confusion_matrix
y_true = np.argmax(y_test, axis=1)
y_pred = np.argmax(z(X_test), axis=1)
matrix = confusion_matrix(y_true=y_true, y_pred=y_pred)
print(matrix)

Ausgabe

[[10 0 0]
[ 0 1 9]
[ 0 0 10]]

Wir können die Heatmap-Funktion auch verwenden, um eine Verwirrungsmatrix wie folgt zu visualisieren:

import seaborn as sns
import matplotlib.pyplot as plt
g = sns.heatmap(matrix,
     annot=True,
     xticklabels=label_encoder.classes_.tolist(),
     yticklabels=label_encoder.classes_.tolist(),
     cmap='Blues')
g.set_yticklabels(g.get_yticklabels(), rotation=0)
plt.show()

Wir sollten auch eine einzige Leistungsnummer haben, mit der wir das Modell vergleichen können. Dazu müssen wir den Klassifizierungsfehler mit berechnenclassification_error Funktion aus dem Metrikpaket in CNTK, wie beim Erstellen des Klassifizierungsmodells ausgeführt.

Um nun den Klassifizierungsfehler zu berechnen, führen Sie die Testmethode für die Verlustfunktion mit einem Datensatz aus. Danach nimmt CNTK die von uns bereitgestellten Stichproben als Eingabe für diese Funktion und erstellt eine Vorhersage basierend auf den Eingabemerkmalen X_test.

loss.test([X_test, y_test])

Ausgabe

{'metric': 0.36666666666, 'samples': 30}

Implementierung von F-Maßnahmen

Für die Implementierung von F-Maßnahmen enthält CNTK auch eine Funktion namens fmeasures. Wir können diese Funktion verwenden, während wir den NN trainieren, indem wir die Zelle ersetzencntk.metrics.classification_errormit einem Anruf bei cntk.losses.fmeasure bei der Definition des Kriteriums Fabrikfunktion wie folgt -

import cntk
@cntk.Function
def criterion_factory(output, target):
   loss = cntk.losses.cross_entropy_with_softmax(output, target)
metric = cntk.losses.fmeasure(output, target)
   return loss, metric

Nach Verwendung der Funktion cntk.losses.fmeasure erhalten wir unterschiedliche Ausgaben für die loss.test Methodenaufruf wie folgt angegeben -

loss.test([X_test, y_test])

Ausgabe

{'metric': 0.83101488749, 'samples': 30}