La matrice de confusion
Fait partie de la section Apprentissage supervisé du Journey Machine Learning de Coddy. Leçon 21 sur 58.
La précision compte les erreurs, mais pas leur nature. Pour un test de dépistage de la grippe, renvoyer chez lui un patient malade est bien pire qu’une fausse alerte. Une confusion_matrix compte chaque type d’erreur :
La grippe est la classe positive, 1. Les erreurs se trouvent hors de la diagonale : les faux positifs (fausses alertes) et les faux négatifs (cas manqués).
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
cm = confusion_matrix(y_test, pred) # valeurs réelles en premier
print(cm)
print(cm[1, 0]) # ligne 1 : a la grippe, colonne 0 : prédit en bonne santé
ConfusionMatrixDisplay.from_predictions(y_test, pred, display_labels=["healthy", "flu"],
ax=ax, colorbar=False) # pas de barre de couleurs : les effectifs parlent d’eux-mêmesCela affiche :
[[50 3]
[ 5 42]]
5Ce chapitre porte sur la réduction de cette cellule des cas manqués. Il se termine par un test de dépistage qui ne laisse passer presque personne.
Défi
MoyenLes maîtres-nageurs reçoivent une alerte le matin lorsqu’un courant d’arrachement risque de se former. Le code de départ entraîne le modèle d’alerte et remplit pred pour les matinées de test (1 signifie qu’il y a un courant d’arrachement).
- Crée la matrice de confusion et affiche les quatre nombres comme ci-dessous.
- Trace-la sur
ax, avec les étiquettescalmetrip, puis affiche-la.
Pour un autre modèle :
Rips caught: 30
Rips missed: 2
False alarms: 9
Calm days cleared: 59Coddy décrit ton graphique. Il devrait ressembler à celui-ci, qui concerne une alerte de fuite dans une canalisation :
Essayez vous-même
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
# Une ligne par matinée sur une plage de surf : 1 dans rip signifie qu’un courant d’arrachement s’est formé ce jour-là
beach = pd.read_csv("rips.csv")
features = ["wave_height_m", "wave_period_s", "wind_kmh", "tide_change_m"]
X = beach[features]
y = beach["rip"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
# L’alerte aux courants d’arrachement des sauveteurs
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
pred = model.predict(X_test)
fig, ax = plt.subplots()
ax.set_title("Rip Current Alerts")
# Écrivez votre code ci-dessous
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Apprentissage supervisé
1Votre premier modèle
Apprendre à partir d’exemplesJeux d’entraînement et de testAjuster et prédireÉvaluer un modèleRécapitulatif : trieur de graines4Régression logistique
Prédictions oui ou nonLe seuil de décisionLes poids comme indicesPlusieurs classesRécapitulatif : filtre anti-spam2Plus proches voisins
Comment k-NN prend ses décisionsChoisir kFrontières de décisionMettre les voisins à l’échelleRécapitulatif : voisins et vin5Évaluer les classificateurs
La matrice de confusionPrécision et rappelLe score F1Classes déséquilibréesCourbes ROCRécapitulatif : test de dépistage8Validation croisée
Validation K-foldComparer les modèles équitablementRecherche par grilleRécapitulatif : réparations de skateboard11Projet : espèces de manchots
À la rencontre des manchotsPréparer les donnéesChoisir un modèleOptimiser le modèle gagnantDéployer le modèle3Régression linéaire
Prédire des nombresPlusieurs caractéristiquesMesurer les erreursGraphiques des résidusRécapitulatif : locations de vélos6Arbres de décision
Les arbres posent des questionsLire un arbreProfondeur de l’arbreImportance des caractéristiquesRécapitulatif : décisions de prêtEntraînez-vous par vous-même : Compilateur Python en ligne