Modifiez les échantillons (classe réelle et confiance) ou choisissez un scénario prédéfini pour visualiser la matrice de confusion, la courbe P-S et la valeur mAP en temps réel.
| Seuil | Préc. | P.mono | Sensib. |
|---|
Dans cette activité, vous évaluerez un classificateur binaire (ex. : détection de déforestation dans des images satellites, voir dgi.inpe.br) à travers la courbe Précision‑Sensibilité et la métrique mAP (Mean Average Precision). Le mAP est standard dans des compétitions comme COCO (Common Objects in Context) et PASCAL VOC (Visual Object Classes) et des modèles YOLO (You Only Look Once).
Dans l’EP01_02, vous avez vu que le choix du seuil modifie significativement la Précision et la Sensibilité. Le mAP (Mean Average Precision) résout cela : il évalue le modèle à plusieurs seuils (chaque seuil doit générer une matrice de confusion différente) et résume la performance par l’aire sous la courbe Précision‑Sensibilité (P‑S).
Alors que le F1‑Score examine un unique point d’équilibre, le mAP considère la courbe entière. Plus il est proche de 1,0, meilleur est le détecteur à tous les seuils et classes (ex. : pièces de 25, 50 et 1 réal).
| Métrique | Ce qu’elle résume | Limitation |
|---|---|---|
| F1‑Score | Équilibre P × S à un seuil unique | Dépend du seuil choisi |
| AP | Aire sous la courbe P‑S d’une clase | Valide uniquement pour une classe |
| mAP | Moyenne des AP sur toutes les classes | Plus complexe à implémenter |
Références : Roboflow — mAP · Vidéo explicative
Seuils fixes (utilisez toujours cette liste) :
limiares = [0.00, 0.09, 0.21, 0.31, 0.39, 0.52, 0.60, 0.71, 0.81, 0.89, 1.00]Pour chaque seuil (t), classez les échantillons : predito = 1 se confiança ≥ t, senão 0.
Calculez VP, FP, FN, VN et obtenez Précision((t)) et Sensibilité((t)).
Construisez la courbe P‑S : paires (Sensibilité((t)), Précision((t))), triées par Sensibilité croissante.
Monotonisez la Précision :
\[P_{\text{mono}}[i] = \max_{j \ge i} P[j]\]
Calculez l’AP (aire sous la courbe monotone) en utilisant la règle du trapèze (approximation plus précise que la simple somme de Riemann) :
\[AP = \sum_{i=1}^{m-1} \frac{P_{\text{mono}}[i-1] + P_{\text{mono}}[i]}{2} \cdot (S[i] - S[i-1])\]
mAP = moyenne des AP de toutes les classes. Dans cet EP, il n’y a qu’1 classe, donc mAP = AP.
📐 Différence résumée :
La somme de Riemann approxime l’aire par des rectangles, pouvant sous‑estimer ou surestimer. La règle du trapèze utilise des trapèzes, réduisant l’erreur en considérant la moyenne entre les valeurs aux extrémités de l’intervalle, étant généralement plus précise pour des fonctions lisses par morceaux, comme la courbe Précision‑Sensibilité.
Lisez un entier n (quantité d’échantillons). Ensuite, lisez n lignes, chacune avec : verdade (0 ou 1) et confiança (float 0.0–1.0).
Calculez et imprimez, pour le seuil 0.85 (index 9 de la liste) :
Ensuite, pour tous les seuils, imprimez :
,| Entrée | Sortie Attendue |
|---|---|
| 7 0 0.94 1 0.80 1 0.69 0 0.67 1 0.30 1 0.15 1 0.15 |
# MÉTRIQUES POUR LE SEUIL 0.85 # Matrice de Confusion : VP = 0, FN = 5 FP = 1, VN = 1 Métriques d’Évaluation : Acurácia : 0.14 Précision : 0.00 Sensibilité : 0.00 F1-Score : 0.00 # MÉTRIQUES POUR TOUS LES SEUILS # Précisions : 0.00, 0.00, 0.00, 0.50, 0.50, 0.50, 0.50, 0.50, 0.60, 0.71, 0.71 Précisions mon. : 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71 Sensibilités : 0.00, 0.00, 0.00, 0.20, 0.40, 0.40, 0.40, 0.40, 0.60, 1.00, 1.00 mAP : 0.71 |
def calcular_AP(verdades, confiancas, limiares):
m = len(limiares)
precisoes = [0.0] * m
sensibilidades = [0.0] * m
for i in range(m):
p, s = calcular_metricas(verdades, confiancas, limiares[i])
precisoes[m-1-i] = p
sensibilidades[m-1-i] = s
prec_mono = precisoes.copy()
for i in range(m-2, -1, -1):
if prec_mono[i] < prec_mono[i+1]:
prec_mono[i] = prec_mono[i+1]
AP = 0.0
for i in range(1, m):
# Règle du trapèze : moyenne des hauteurs multipliée par la base
area_trapezio = (prec_mono[i-1] + prec_mono[i]) / 2.0
AP += area_trapezio * (sensibilidades[i] - sensibilidades[i-1])
return precisoes, prec_mono, sensibilidades, APModifiez les échantillons (classe réelle et confiance) ou choisissez un scénario prédéfini pour visualiser la matrice de confusion, la courbe P-S et la valeur mAP en temps réel.
| Seuil | Préc. | P.mono | Sensib. |
|---|
%%writefile EP01_03.cpp
// your solutionOverwriting EP01_03.cpp
TestSuite("EP01_03.cpp").run()✔️ EP01_03.cases existe déjà dans casos/
📋 5 cas chargé(s) depuis casos/EP01_03.cases
🔍 Test de C++ : EP01_03.cpp
⚠️ EP01_03.cpp : fichier vide (moins de 3 lignes). Tests ignorés.