Читать книгу Praxiseinstieg Machine Learning mit Scikit-Learn, Keras und TensorFlow - Aurélien Géron - Страница 96
Konfusionsmatrix
ОглавлениеEine weitaus bessere Möglichkeit zum Auswerten der Vorhersageleistung eines Klassifikators ist das Betrachten einer Konfusionsmatrix. Die Idee dabei ist, die Datenpunkte auszuzählen, bei denen Kategorie A als Kategorie B klassifiziert wird. Um zum Beispiel zu sehen, wie oft der Klassifikator das Bild einer 5 für eine 3 gehalten hat, würden Sie in der 5. Zeile und der 3. Spalte der Konfusionsmatrix nachschauen.
Um eine Konfusionsmatrix zu berechnen, benötigen Sie einen Satz Vorhersagen, die sich dann mit den korrekten Zielwerten vergleichen lassen. Sie könnten auch auf dem Testdatensatz Vorhersagen treffen, wir lassen das aber im Moment beiseite (denken Sie daran, dass Sie die Testdaten erst ganz am Ende Ihres Projekts verwenden sollten, sobald Sie einen einsatzbereiten Klassifikator haben). Stattdessen können Sie die Funktion cross_val_predict() einsetzen:
from sklearn.model_selection import cross_val_predict
y_train_pred = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3)
Wie die Funktion cross_val_score() führt auch cross_val_predict() eine k-fache Kreuzvalidierung durch, aber anstatt Genauigkeiten zurückzugeben, liefert sie die für jeden Test-Fold berechneten Vorhersagen. Damit erhalten Sie für jeden Datenpunkt im Trainingsdatensatz eine saubere Vorhersage (»sauber« bedeutet, dass das zur Vorhersage eingesetzte Modell diese Daten beim Trainieren nicht gesehen hat).
Nun sind wir bereit, die Konfusionsmatrix mit der Funktion confusion_matrix() zu berechnen. Wir übergeben dieser einfach die Zielkategorien (y_train_5) und die vorhergesagten Kategorien (y_train_pred):
>>> from sklearn.metrics import confusion_matrix
>>> confusion_matrix(y_train_5, y_train_pred)
array([[53057, 1522],
[ 1325, 4096]])
Jede Zeile in einer Konfusionsmatrix steht für eine tatsächliche Kategorie, während jede Spalte eine vorhergesagte Kategorie darstellt. Die erste Zeile dieser Matrix beinhaltet Nicht-5-Bilder (die negative Kategorie): 53.057 davon wurden korrekt als Nicht-5en klassifiziert (man nennt diese richtig Negative), die übrigen 1.522 wurden fälschlicherweise als 5en klassifiziert (falsch Positive). Die zweite Zeile betrachtet die Bilder mit 5en (die positive Kategorie): 1.325 Bilder wurden fälschlicherweise als Nicht-5en vorhergesagt (falsch Negative), die restlichen 4.096 wurden korrekt als 5en vorhergesagt (richtig Positive). Ein perfekter Klassifikator würde lediglich richtig Positive und richtig Negative produzieren, sodass die Konfusionsmatrix nur auf der Hauptdiagonalen (von links oben nach rechts unten) Werte ungleich null enthielte:
>>> y_train_perfect_predictions = y_train_5 # als ob wir perfekt wären
>>> confusion_matrix(y_train_5, y_train_perfect_predictions)
array([[54579, 0],
[ 0, 5421]])
Die Konfusionsmatrix gibt uns eine Menge an Informationen, aber manchmal wünscht man sich ein etwas kompakteres Qualitätsmaß. Ein interessantes Maß ist die Genauigkeit der positiven Vorhersagen; dies nennt man auch die Relevanz (engl. Precision) des Klassifikators (siehe Formel 3-1).