Contenu du cours
Classification Avec Python
Classification Avec Python
Matrice de Confusion
Lorsque nous faisons une prédiction pour un problème de classification binaire, il n'y a que quatre résultats possibles.
Remarque
Dans l'image ci-dessus, les valeurs réelles sont en ordre décroissant, et les valeurs prédites sont en ordre croissant. C'est la disposition utilisée dans Scikit-learn pour la matrice de confusion (apprise plus tard dans le chapitre). Vous pouvez rencontrer différentes dispositions dans d'autres visualisations, mais rien à part l'ordre ne change.
Nous appelons ces résultats Vrai Positif (VP), Vrai Négatif (VN), Faux Positif (FP), Faux Négatif (FN), où Vrai/Faux indique si la prédiction est correcte et Positif/Négatif indique quelle est la classe prédite 1 ou 0.
Ainsi, nous pouvons faire deux types d'erreurs : Faux Positif et Faux Négatif.
Le cas d'une prédiction Faux Positif est également appelé une Erreur de Type 1.
Et le cas d'une prédiction Faux Négatif – Erreur de Type 2.
Matrice de Confusion
La première façon d'examiner la performance du modèle est d'organiser les prédictions dans une matrice de confusion comme ceci :
Vous pouvez construire une matrice de confusion en Python en utilisant confusion_matrix()
de sklearn
.
Et, pour une meilleure visualisation, vous pouvez utiliser la fonction heatmap()
de sns
(seaborn).
Voici un exemple de calcul de la matrice de confusion pour une prédiction de Random Forest sur le jeu de données Titanic :
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);
Nous pouvons également tracer les pourcentages au lieu du nombre d'instances en utilisant le paramètre normalize
:
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);
Merci pour vos commentaires !