Edite las muestras (clase real y confianza) o elija un escenario predefinido para visualizar la matriz de confusión, la curva P-S y el valor de mAP en tiempo real.
| Umbral | Prec. | P.mono | Sensib. |
|---|
En esta actividad, evaluará un clasificador binario (p. ej., detección de deforestación en imágenes de satélite, ver dgi.inpe.br) mediante la curva Precisión‑Sensibilidad y la métrica mAP (Mean Average Precision). El mAP es estándar en competencias como COCO (Common Objects in Context) y PASCAL VOC (Visual Object Classes) y de los modelos YOLO (You Only Look Once).
En la EP01_02 vio que la elección del umbral altera significativamente la Precisión y la Sensibilidad. El mAP (Mean Average Precision) resuelve esto: evalúa el modelo en varios umbrales (cada umbral debe generar una matriz de confusión diferente) y resume el desempeño mediante el área bajo la curva Precisión‑Sensibilidad (P‑S).
Mientras que el F1‑Score observa un único punto de equilibrio, el mAP considera la curva completa. Cuanto más cercano a 1,0, mejor es el detector en todos los umbrales y clases (p. ej., monedas de 25, 50 y 1 real).
| Métrica | Qué resume | Limitación |
|---|---|---|
| F1‑Score | Equilibrio P × S en un único umbral | Depende del umbral elegido |
| AP | Área bajo la curva P‑S de una clase | Válida solo para una clase |
| mAP | Promedio de las APs sobre todas las clases | Más complejo de implementar |
Referencias: Roboflow — mAP · Vídeo explicativo
Umbrales fijos (use siempre esta lista):
umbrales = [0.00, 0.09, 0.21, 0.31, 0.39, 0.52, 0.60, 0.71, 0.81, 0.89, 1.00]Para cada umbral (t), clasifique las muestras: predicho = 1 si confianza ≥ t, sino 0.
Calcule VP, FP, FN, VN y obtenga Precisión((t)) y Sensibilidad((t)).
Construya la curva P‑S: pares (Sensibilidad((t)), Precisión((t))), ordenados por Sensibilidad creciente.
Monotonice la Precisión:
\[P_{\text{mono}}[i] = \max_{j \ge i} P[j]\]
Calcule la AP (área bajo la curva monotónica) usando la regla del trapecio (aproximación más precisa que la simple suma 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 = promedio de las APs de todas las clases. En este EP hay solo 1 clase, por lo tanto mAP = AP.
📐 Diferencia resumida:
La suma de Riemann aproxima el área mediante rectángulos, pudiendo subestimar o sobrestimar. La regla del trapecio usa trapecios, reduciendo el error al considerar el promedio entre los valores en los extremos del intervalo, siendo generalmente más precisa para funciones suaves por partes, como la curva Precisión‑Sensibilidad.
Lea un entero n (cantidad de muestras). Luego lea n líneas, cada una con: verdad (0 o 1) y confianza (float 0.0–1.0).
Calcule e imprima, para el umbral 0.85 (índice 9 de la lista):
A continuación, para todos los umbrales, imprima:
,| Entrada | Salida Esperada |
|---|---|
| 7 0 0.94 1 0.80 1 0.69 0 0.67 1 0.30 1 0.15 1 0.15 |
# MÉTRICAS PARA EL UMBRAL 0.85 # Matriz de Confusión: VP = 0, FN = 5 FP = 1, VN = 1 Métricas de Evaluación: Exactitud: 0.14 Precisión: 0.00 Sensibilidad: 0.00 F1-Score: 0.00 # MÉTRICAS PARA TODOS LOS UMBRALES # Precisiones: 0.00, 0.00, 0.00, 0.50, 0.50, 0.50, 0.50, 0.50, 0.60, 0.71, 0.71 Precisiones mon.: 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71 Sensibilidades: 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, confianzas, umbrales):
m = len(umbrales)
precisiones = [0.0] * m
sensibilidades = [0.0] * m
for i in range(m):
p, s = calcular_metricas(verdades, confianzas, umbrales[i])
precisiones[m-1-i] = p
sensibilidades[m-1-i] = s
prec_mono = precisiones.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):
# Regla del trapecio: promedio de las alturas por la base
area_trapecio = (prec_mono[i-1] + prec_mono[i]) / 2.0
AP += area_trapecio * (sensibilidades[i] - sensibilidades[i-1])
return precisiones, prec_mono, sensibilidades, APEdite las muestras (clase real y confianza) o elija un escenario predefinido para visualizar la matriz de confusión, la curva P-S y el valor de mAP en tiempo real.
| Umbral | Prec. | P.mono | Sensib. |
|---|
%%writefile EP01_03.cpp
// your solutionOverwriting EP01_03.cpp
TestSuite("EP01_03.cpp").run()✔️ EP01_03.cases ya existe en casos/
📋 5 caso(s) cargado(s) de casos/EP01_03.cases
🔍 Probando C++: EP01_03.cpp
⚠️ EP01_03.cpp: archivo vacío (menos de 3 líneas). Pruebas omitidas.