Kursinhalt
Klassifikation mit Python
Klassifikation mit Python
Konfusionsmatrix
Wenn wir eine Vorhersage für ein binäres Klassifikationsproblem machen, gibt es nur vier mögliche Ergebnisse.
Hinweis
In dem obigen Bild sind die tatsächlichen Werte in absteigender Reihenfolge und die vorhergesagten Werte in aufsteigender Reihenfolge. Dies ist das Layout, das in Scikit-learn für die Konfusionsmatrix verwendet wird (später im Kapitel gelernt). Sie können in anderen Visualisierungen auf unterschiedliche Layouts stoßen, aber abgesehen von der Reihenfolge ändert sich nichts.
Wir nennen diese Ergebnisse True Positive(TP), True Negative(TN), False Positive(FP), False Negative(FN), wobei True/False dafür steht, ob die Vorhersage korrekt ist, und Positive/Negative dafür steht, was die vorhergesagte Klasse 1 oder 0 ist.
So können wir zwei Arten von Fehlern machen: False Positive und False Negative.
Der Fall einer False Positive-Vorhersage wird auch als Fehler 1. Art bezeichnet.
Und der Fall einer False Negative-Vorhersage – Fehler 2. Art.
Konfusionsmatrix
Der erste Weg, die Leistung des Modells zu betrachten, besteht darin, die Vorhersagen in einer Konfusionsmatrix wie dieser zu organisieren:
Sie können eine Konfusionsmatrix in Python mit confusion_matrix()
aus sklearn
erstellen.
Und für eine bessere Visualisierung können Sie die heatmap()
-Funktion von sns
(seaborn) verwenden.
Hier ist ein Beispiel für die Berechnung der Konfusionsmatrix für eine Random-Forest-Vorhersage auf dem Titanic-Datensatz:
import pandas as pd import seaborn as sns from sklearn.metrics import confusion_matrix from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split # Read the data and assign the variables df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/titanic.csv') X, y = df.drop('Survived', axis=1), df['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) # Build and train a Random Forest and predict target for a test set random_forest = RandomForestClassifier().fit(X_train, y_train) y_pred = random_forest.predict(X_test) # Build a confusion matrix conf_matrix = confusion_matrix(y_test, y_pred) sns.heatmap(conf_matrix, annot=True);
Wir können auch die Prozentsätze anstelle der Instanzenanzahl mit dem normalize
-Parameter plotten:
import pandas as pd import seaborn as sns from sklearn.metrics import confusion_matrix from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split # Read the data and assign the variables df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/titanic.csv') X, y = df.drop('Survived', axis=1), df['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) # Build and train a Random Forest and predict target for a test set random_forest = RandomForestClassifier().fit(X_train, y_train) y_pred = random_forest.predict(X_test) # Build a confusion matrix conf_matrix = confusion_matrix(y_test, y_pred, normalize='all') sns.heatmap(conf_matrix, annot=True);
Danke für Ihr Feedback!