Matrice de Confusion
Lors de la réalisation d'une prédiction pour un problème de classification binaire, il n'existe que quatre issues possibles :
Dans l'image ci-dessus, les valeurs réelles (étiquettes vraies) sont ordonnées de haut en bas par ordre décroissant, tandis que les valeurs prédites sont ordonnées de gauche à droite par ordre croissant. Il s'agit de la disposition par défaut utilisée par scikit-learn lors de l'affichage des matrices de confusion.
Différentes bibliothèques ou visualisations peuvent utiliser une disposition différente - par exemple, placer les valeurs réelles sur l'axe des x et les valeurs prédites sur l'axe des y. Cependant, seule la disposition change ; les valeurs de la matrice restent identiques.
Ces résultats sont appelés vrai positif (VP), vrai négatif (VN), faux positif (FP) et faux négatif (FN). "vrai" ou "faux" indique si la prédiction est correcte, tandis que "positif" ou "négatif" fait référence à la classe prédite, 1 ou 0.
Cela signifie qu'il existe deux types d'erreurs possibles : les faux positifs et les faux négatifs. Une prédiction fausse positive est également appelée erreur de type 1, tandis qu'une prédiction fausse négative est appelée erreur de type 2.
Matrice de confusion
La première façon d'évaluer la performance du modèle consiste à organiser les prédictions dans une matrice de confusion comme ceci :
Vous pouvez construire une matrice de confusion en Python à l'aide de la fonction confusion_matrix() de sklearn :
from sklearn.metrics import confusion_matrix
conf_matrix = confusion_matrix(y_true, y_pred)
Pour une meilleure visualisation, vous pouvez utiliser la fonction heatmap() de seaborn :
sns.heatmap(conf_matrix)
Voici un exemple de calcul de la matrice de confusion pour une prédiction Random Forest sur le jeu de données Titanic :
12345678910111213141516import 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);
Il est également possible de représenter les pourcentages au lieu du nombre d'occurrences en utilisant le paramètre normalize :
conf_matrix = confusion_matrix(y_true, y_pred, normalize='all')
12345678910111213141516import 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 !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Awesome!
Completion rate improved to 4.17
Matrice de Confusion
Glissez pour afficher le menu
Lors de la réalisation d'une prédiction pour un problème de classification binaire, il n'existe que quatre issues possibles :
Dans l'image ci-dessus, les valeurs réelles (étiquettes vraies) sont ordonnées de haut en bas par ordre décroissant, tandis que les valeurs prédites sont ordonnées de gauche à droite par ordre croissant. Il s'agit de la disposition par défaut utilisée par scikit-learn lors de l'affichage des matrices de confusion.
Différentes bibliothèques ou visualisations peuvent utiliser une disposition différente - par exemple, placer les valeurs réelles sur l'axe des x et les valeurs prédites sur l'axe des y. Cependant, seule la disposition change ; les valeurs de la matrice restent identiques.
Ces résultats sont appelés vrai positif (VP), vrai négatif (VN), faux positif (FP) et faux négatif (FN). "vrai" ou "faux" indique si la prédiction est correcte, tandis que "positif" ou "négatif" fait référence à la classe prédite, 1 ou 0.
Cela signifie qu'il existe deux types d'erreurs possibles : les faux positifs et les faux négatifs. Une prédiction fausse positive est également appelée erreur de type 1, tandis qu'une prédiction fausse négative est appelée erreur de type 2.
Matrice de confusion
La première façon d'évaluer la performance du modèle consiste à organiser les prédictions dans une matrice de confusion comme ceci :
Vous pouvez construire une matrice de confusion en Python à l'aide de la fonction confusion_matrix() de sklearn :
from sklearn.metrics import confusion_matrix
conf_matrix = confusion_matrix(y_true, y_pred)
Pour une meilleure visualisation, vous pouvez utiliser la fonction heatmap() de seaborn :
sns.heatmap(conf_matrix)
Voici un exemple de calcul de la matrice de confusion pour une prédiction Random Forest sur le jeu de données Titanic :
12345678910111213141516import 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);
Il est également possible de représenter les pourcentages au lieu du nombre d'occurrences en utilisant le paramètre normalize :
conf_matrix = confusion_matrix(y_true, y_pred, normalize='all')
12345678910111213141516import 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 !