Nächstes Kapitel: Repräsentierung und Visualisierung von Daten
Metriken zu Evaluation¶
Einführung¶

Nicht nur beim maschinellen Lernen, sondern auch im allgemeinen Leben, insbesondere im Geschäftsleben, werden Sie Fragen wie "Wie genau ist Ihr Produkt?" oder "Wie präzise ist Ihre Maschine?" hören. Wenn Leute Antworten wie "Dies ist das genaueste Produkt auf seinem Gebiet!" oder "Diese Maschine hat die höchste vorstellbare Präzision!" erhalten, fühlen sich beide Antworten gut an. Sollten sie nicht? Wenn Sie beide Antworten gleichzeitig erhalten ja, aber jeweils eine alleine könnte problematisch sein. In der Tat werden die Begriffe "genau" und "präzise" sehr oft synonym verwendet. Wir werden später im Text genaue Definitionen geben, aber kurz gesagt können wir sagen: Genauigkeit ist ein Maß für die Nähe einiger Messungen zu einem bestimmten Wert, während Präzision die Nähe der Messungen zueinander ist.
Diese Begriffe sind auch beim maschinellen Lernen von äußerster Wichtigkeit. Wir brauchen sie zur Bewertung von ML-Algorithmen oder besser zu ihren Ergebnissen.
In diesem Kapitel unseres Python-Lernprogramms für maschinelles Lernen werden vier wichtige Metriken vorgestellt. Diese Metriken werden verwendet, um die Ergebnisse von Klassifizierungen auszuwerten.
Die Metriken sind:
- Genauigkeit (engl. Accuracy)
- Präzision (engl. precision)
- Recall
- F-Maß (englisch F1-score)
Wir werden jede dieser Metriken vorstellen und ihre Vor- und Nachteile diskutieren. Jede Metrik misst andere Aspekte der Leistung eines Klassifikators. Die Metriken sind für alle Kapitel unseres Tutorials zum maschinellen Lernen von größter Bedeutung.
Genauigkeit gegenüber Präzision¶
Die Genauigkeit ist ein Maß für die Nähe von Messungen zu einem bestimmten Wert (dem gewünschten Wert), während die Präzision ein Maß für die Nähe der Messungen zueinander ist, d.h. also nicht notwendig zu einem tatsächlichen oder gewünschten Wert. Mit anderen Worten: Wenn wir einen Satz von Datenpunkten aus wiederholten Messungen derselben Größe haben, wird der Satz als genau bezeichnet, wenn ihr Durchschnitt nahe am tatsächlichen Wert liegt. Andererseits nennen wir die Menge präzise, wenn die Messwerte nahe beieinander liegen, aber möglicherweise entfernt vom tatsächlichen Wert. Die beiden Konzepte sind unabhängig voneinander, was bedeutet, dass der Datensatz genau, präzise, präzise und genau oder keins von beides sein kann. Wir zeigen dies im folgenden Diagramm:

Wahrheitsmatrix¶
Bevor wir mit dem Begriff "Genauigkeit" fortfahren, möchten wir sicherstellen, dass Sie verstehen, worum es in einer Wahrheitsmatrix, auch Konfusionsmatrix (englisch confusion matrix) genannt, geht.
Eine Konfusionsmatrix wird verwendet, um die Leistung eines Klassifikators zu visualisieren.
Die Spalten der Matrix repräsentieren die Instanzen der vorhergesagten Klassen und die Zeilen repräsentieren die Instanzen der tatsächlichen Klassen. (Hinweis: Es kann auch umgekehrt sein.)
Bei der binären Klassifizierung hat die Tabelle 2 Zeilen und 2 Spalten.
Wir wollen dieses Konzept mit einem Beispiel erläutern.
Beispiel:
| Konfusionsmatrix |
Prognostizierte Klassen |
||
|---|---|---|---|
| Katze | Hund |
||
|
Tatsächliche Klassen |
Katze | 42 | 8 |
| Hund | 18 | 32 | |
Dies bedeutet, dass der Klassifikator eine Katze in 42 Fällen korrekt vorhergesagt hat und 8 Katzeninstanzen fälschlicherweise als Hund vorhergesagt hat. Es wurden 32 Fälle als Hund korrekt vorhergesagt. 18 Fälle wurden fälschlicherweise als Katze statt als Hund vorhergesagt.
Genauigkeit bei der Klassifizierung¶
Wir interessieren uns für maschinelles Lernen und Genauigkeit wird auch als statistische Messgröße verwendet.
Die Genauigkeit ist ein statistisches Maß, das als Quotient korrekter Vorhersagen (sowohl True Positives (TP) als auch True Negatives (TN)) eines Klassifikators geteilt durch die Summe aller vom Klassifikator gemachten Vorhersagen, einschließlich falsch Positive (FP) und falsch Negative (FN) definiert wird. Daher lautet die Formel zur Quantifizierung der binären Genauigkeit :
$$ Genauigkeit = {{TP + TN} \over {TP + TN + FP + FN}} $$
wobei gilt: TP = True positive; FP = False positive; TN = True negative; FN = False negative
Die dazugehörige Konfusionsmatrix sieht wie folgt aus:
| Confusion Matrix |
Vorhergesagte Klassen |
||
|---|---|---|---|
| negativ | positiv |
||
|
Tatsächliche Klassen |
negativ | TN | FP |
| positiv | FN | TP | |
Wir werden nun die Genauigkeit für die Ergebnisse der Katzen- und Hundeklassifizierung berechnen. Anstelle von "richtig" und "falsch" sehen wir hier "Katze" und "Hund". Wir können die Genauigkeit so berechnen :
TP = 42
TN = 32
FP = 8
FN = 18
genauigkeit = (TP + TN)/(TP + TN + FP + FN)
print(genauigkeit)
Nehmen wir an, dass eir einen Klassifikator hätten, der immer "Hund" vorhersagt.
| Konfusionsmtrix |
Vorhergesagte Klassen |
||
|---|---|---|---|
| Katze | Hund |
||
|
Actual classes |
Katze | 0 | 50 |
| Hund | 0 | 50 | |
In diesem Fall haben wir eine Genauigkeit von 0.5:
TP, TN, FP, FN = 0, 50, 50, 0
genauigkeit = (TP + TN)/(TP + TN + FP + FN)
print(genauigkeit)
Genauigkeitsparadoxon¶
Wir werden das sogenannte Genauigkeitsparadoxon demonstrieren.
Ein Spam-Erkennungsklassifizierer wird durch die folgende Konfusionsmatrix beschrieben. Dabei steht "spam" für die Spam-Emails und "ham" für die guten Emails/p>
| Konfusionsmatrix |
Vorhergesagte Klassen |
||
|---|---|---|---|
| spam | ham |
||
|
Tatsächliche Klassen |
spam | 4 | 1 |
| ham | 4 | 91 | |
TP, TN, FP, FN = 4, 91, 4, 1
accuracy = (TP + TN) / (TP + TN + FP + FN)
print(accuracy)
Der folgende Klassifikator sagt immer nur "ham" voraus und hat die gleich Genauigkeit.
| Konfusionsmatrix |
Vorhergesagte Klassen |
||
|---|---|---|---|
| spam | ham |
||
|
Tatsächliche Klassen |
spam | 0 | 5 |
| ham | 0 | 95 | |
TP, TN, FP, FN = 0, 95, 0, 5
accuracy = (TP + TN) / (TP + TN + FP + FN)
print(accuracy)
Die Genauigkeit dieses Klassifikators beträgt 95%, obwohl er überhaupt keinen Spam erkennen kann.
Präzision und Recall¶
Ab jetzt betrachten wir Spam als positive Klasse. Damit gilt:
TP: Spam wurde korrekt als Spam erkannt.FP: Eine Ham-Nachricht wurde fälschlich als Spam markiert.FN: Spam wurde fälschlich als Ham eingestuft.TN: Ham wurde korrekt als Ham erkannt.
Die Präzision (Precision) beantwortet die Frage: Welcher Anteil der als positiv vorhergesagten Fälle ist tatsächlich positiv?
$$\mathrm{Precision} = \frac{TP}{TP + FP}$$
Der Recall (Sensitivität) beantwortet: Welcher Anteil der tatsächlich positiven Fälle wurde gefunden?
$$\mathrm{Recall} = \frac{TP}{TP + FN}$$
| Konfusionsmatrix |
Vorhergesagte Klassen |
||
|---|---|---|---|
| spam | ham |
||
|
Tatsächliche Klassen |
spam | 12 | 14 |
| ham | 0 | 114 | |
In der obigen Matrix stehen 12 korrekt erkannte Spam-Nachrichten (TP), 14 übersehene Spam-Nachrichten (FN), keine fälschlich als Spam markierte Ham-Nachricht (FP) und 114 korrekt erkannte Ham-Nachrichten (TN).
TP, TN, FP, FN = 12, 114, 0, 14
precision = TP / (TP + FP)
recall = TP / (TP + FN)
print(f"Precision: {precision:.3f}")
print(f"Recall: {recall:.3f}")
Die Präzision ist hier 1.0: Alles, was der Filter als Spam bezeichnet, ist tatsächlich Spam. Der Recall ist dagegen deutlich kleiner als 1.0, weil 14 Spam-Nachrichten nicht erkannt wurden.
Welche Fehlerart schwerer wiegt, hängt von der Anwendung ab. Bei einem Spamfilter können False Positives besonders problematisch sein, weil erwünschte Nachrichten im Spamordner landen oder sogar automatisch verworfen werden. In anderen Anwendungen – etwa bei bestimmten medizinischen Screenings – können False Negatives schwerer wiegen. Deshalb sollte die Wahl einer Metrik immer die Kosten der jeweiligen Fehler berücksichtigen.
from sklearn.metrics import precision_score, recall_score
y_true = [1] * (TP + FN) + [0] * (FP + TN)
y_pred = [1] * TP + [0] * FN + [1] * FP + [0] * TN
print(f"Precision (sklearn): {precision_score(y_true, y_pred):.3f}")
print(f"Recall (sklearn): {recall_score(y_true, y_pred):.3f}")
F1-Score¶
Der F1-Score ist das harmonische Mittel aus Precision und Recall:
$$F_1 = 2 \cdot \frac{\mathrm{Precision}\cdot\mathrm{Recall}}{\mathrm{Precision}+\mathrm{Recall}}$$
Er ist besonders nützlich, wenn beide Größen berücksichtigt werden sollen. Er ersetzt aber keine fachliche Entscheidung darüber, ob False Positives oder False Negatives unterschiedlich teuer sind.
from sklearn.metrics import accuracy_score, f1_score
print(f"Accuracy: {accuracy_score(y_true, y_pred):.3f}")
print(f"Precision: {precision_score(y_true, y_pred):.3f}")
print(f"Recall: {recall_score(y_true, y_pred):.3f}")
print(f"F1: {f1_score(y_true, y_pred):.3f}")
Accuracy, Precision, Recall und F1 betrachten unterschiedliche Aspekte eines Klassifikators. Bei unausgeglichenen Klassen kann eine hohe Accuracy beispielsweise wenig aussagekräftig sein. Für eine vollständige Beurteilung sind deshalb häufig mehrere Metriken sowie die Konfusionsmatrix sinnvoll.
