Herramientas de usuario

Herramientas del sitio


clase:iabd:pia:matematicas:probabilidad_metricas

Diferencias

Muestra las diferencias entre dos versiones de la página.


clase:iabd:pia:matematicas:probabilidad_metricas [2025/11/03 11:37] (actual) – creado - editor externo 127.0.0.1
Línea 1: Línea 1:
 +====== Probabilidad métricas ======
 +Vamos a explicar como calcular la probabilidad que da una red neuronal en función de la prevalencia y el resultado de la red.
 +
 +Para ello vamos a imaginar que la red neuronal, analiza una imágen para decirnos si tenemos cancer. El resultado puede ser positivo si tenemos cáncer y negativo si no tenemos cáncer.
 +  * Negativo=0
 +  * Positivo=1
 +
 +Para calcular las métricas tenemos 2 arrays:
 +  * $ Y_{real}= \{ y_{real} \in \mathbb{N} \mid y_{real} \in \{0,1\} \; \}    $ Array con los valores reales o verdaderos. 
 +  * $ Y_{predicho}=\{ y_{predicho} \in \mathbb{R} \mid y_{predicho}\in[0,1[  \; \} $ Array con los valores predichos por la red neuronal.
 +
 +y ahora los juntamos en un único conjunto
 + 
 +  * $ Y= \{ (y_{real},y_{predicho}) | y_{real} \in Y_{real} , y_{predicho} \in Y_{predicho} \} $ Parejas de datos reales y predichos.
 +
 +====== El umbral ======
 +Y vamos a suponer que el umbral para saber si es positivo o negativo es **0.5**
 +
 +
 +
 +$N=|\{(y_{real},y_{predicho}) \in Y | y_{real}=0 \}|$
 +
 +$P=|\{(y_{real},y_{predicho}) \in Y | y_{real}=1 \}|$
 +
 +$PN=|\{(y_{real},y_{predicho}) \in Y | y_{predicho} \in [0,0.5[ \}|$
 +
 +$PP=|\{(y_{real},y_{predicho}) \in Y | y_{predicho} \in [0.5,1[ \}|$
 +
 +$TN=|\{ (y_{real},y_{predicho}) \in Y | y_{real} = 0 \; \wedge \; y_{predicho} \in [0,0.5[ \}|$
 +
 +$FP=|\{ (y_{real},y_{predicho}) \in Y | y_{real} = 0 \; \wedge \; y_{predicho} \in [0.5,1[ \}|$
 +
 +$FN=|\{ (y_{real},y_{predicho}) \in Y | y_{real} = 1 \; \wedge \; y_{predicho} \in [0,0.5[ \}|$
 +
 +$TP=|\{ (y_{real},y_{predicho}) \in Y | y_{real} = 1 \; \wedge \; y_{predicho} \in [0.5,1[ \}|$
 +
 +La matriz de confusión es la siguiente:
 +
 +| ^^  Predicción  ^^
 +| ^^  PN,Negativo  ^  PP,Positivo  ^
 +^  Realidad  ^  N,Negativo  |  TN  |  FP  |
 +^ ::: ^  P,Positivo  |  FN  |  TP  |
 +
 +Sin embargo tanto la predicción como la realidad son números , por lo tanto se puede expresar así:
 +
 +| ^^  Predicción  ^^
 +| ^^  PN,$ y_{predicho} \in [0,0.5[$  ^  PP,$ y_{predicho}\in [0.5,1[$  ^
 +^  Realidad  ^  N,$y_{real}=0$  |  TN  |  FP  |
 +^ ::: ^  P,$y_{real}=1$  |  FN  |  TP  |
 +
 +
 +
 +Ahora mostremos las métricas
 +
 +
 +| ^^  Predicción  ^^  Métricas  ^^
 +| ^^  PN,$ y_{predicho} \in [0,0.5[$  ^  PP,$ y_{predicho}\in [0.5,1[$  ^  Predicho [0,0.5[  ^ Predicho [0.5,1[ ^
 +^  Realidad  ^  N,$y_{real}=0$  |  TN  |  FP  |  $TNR=\frac{TN}{N}$  |  $FPR=\frac{FP}{N}$  |
 +^ ::: ^  P,$y_{real}=1$  |  FN  |  TP  |  $FNR=\frac{FN}{P}$  |  $TPR=\frac{TP}{P}$  |
 +^ Métricas ^  Negativa  |  $NPV=\frac{TN}{PN}$  |  $FDR=\frac{FP}{PP}$  |    |    |
 +^ ::: ^  Positiva  |  $FOR=\frac{FN}{PN}$  |  $PPV=\frac{TP}{PP}$  |    |    |
 +
 +$$
 +\begin{array}
 +\\
 +P(Predicho \; negativo|Negativo)&=&\frac{TN}{N}&=&True \; Negative \; Rate (TNR) &=&Especificidad
 +\\
 +P(Predicho \; positivo|Negativo)&=&\frac{FP}{N}&=&False \; Positive \; Rate \; (FPR)&=&1-Especificidad
 +\\
 +\\
 +P(Predicho \; negativo|Positivo)&=&\frac{FN}{P}&=&False \; Negative \; Rate \; (FNR)&=&1-Sensibilidad
 +\\
 +P(Predicho \; positivo|Positivo)&=&\frac{TP}{P}&=&True \; Positive \; Rate (TPR) &=&Sensibilidad
 +\\
 +\end{array}
 +$$
 +\\
 +\\
 +$$
 +\begin{array}
 +\\
 +P(Negativo|Predicho \; negativo)&=&\frac{TN}{PN}&=&Negative \; Predictive \; Value \; (NPV)&&
 +\\
 +P(Positivo|Predicho \; negativo)&=&\frac{FP}{PN}&=&False \; Omission \; Rate \; (FOR)&=&1-NPV
 +\\
 +\\
 +P(Negativo|Predicho \; positivo)&=&\frac{FP}{PP}&=&False \; Discovery \; Rate \; (FDR)&=&1-Precisión
 +\\
 +P(Positivo|Predicho \; positivo)&=&\frac{TP}{PP}&=&Positive \; Predictive \; Value \; (PPV)&=&Precisión&
 +\\
 +\end{array}
 +$$
 +\\
 +\\
 +
 +$$
 +\begin{array}
 +\\
 +P(Positivo)&=&\frac{P}{P+N}&=&Prevalencia
 +\\
 +P(Negativo)&=&\frac{N}{P+N}&=&1-Prevalencia
 +\\
 +P(Predicho \; positivo)&=&\frac{PP}{P+N}
 +\\
 +P(Predicho \; negativo)&=&\frac{PN}{P+N}
 +\end{array}
 +$$
 +
 +
 +Pero usando Bayes podemos calcular los valores predictivos positivos y negativos usando la prevalencia que queramos:
 +
 +$$P(Positivo|Predicho \; positivo)=\frac{P(Predicho \; positivo|Positivo)*P(Positivo)}{P(Predicho \; positivo|Positivo)*P(Positivo)+P(Predicho \; positivo|Negativo)*P(Negativo)}  $$
 +
 +$$P(Positivo|Predicho \; negativo)=\frac{P(Predicho \; negativo|Positivo)*P(Positivo)}{P(Predicho \; negativo|Positivo)*P(Positivo)+P(Predicho \; negativo|Negativo)*P(Negativo)}  $$
 +
 +$$P(Negativo|Predicho \; negativo)=\frac{P(Predicho \; negativo|Negativo)*P(Negativo)}{P(Predicho \; negativo|Negativo)*P(Negativo)+P(Predicho \; negativo|Positivo)*P(Positivo)}  $$
 +
 +$$P(Negativo|Predicho \; positivo)=\frac{P(Predicho \; positivo|Negativo)*P(Negativo)}{P(Predicho \; positivo|Negativo)*P(Negativo)+P(Predicho \; positivo|Positivo)*P(Positivo)}  $$
 +
 +====== Simplificando las fórmulas ======
 +Ahora vamos a cambiar las fórmulas para en vez de poner por rangos de $[0,0.5[$ y $[0.5,1[$  usaremos un conjunto de rangos llamado $I$:
 +
 +
 +$I=\{ \;\; [0,0.5[\;,\;[0.5,1[\;\; \}$
 +
 +Por lo tanto ahora habrá menos fórmulas.
 +
 +$N=|\{(y_{real},y_{predicho}) \in Y | y_{real}=0 \}|$
 +
 +$P=|\{(y_{real},y_{predicho}) \in Y | y_{real}=1 \}|$
 +
 +$Pre_i=|\{(y_{real},y_{predicho}) \in Y | y_{predicho} \in I_i \}|$
 +
 +
 +
 +$N_i=|\{ (y_{real},y_{predicho}) \in Y | y_{real} = 0 \; \wedge \; y_{predicho} \in I_i \}|$
 +
 +
 +$P_i=|\{ (y_{real},y_{predicho}) \in Y | y_{real} = 1 \; \wedge \; y_{predicho} \in I_i \}|$
 +
 +
 +
 +| ^^  Predicción  ^^
 +| ^^  Pre<sub>0</sub>,$ y_{predicho} \in I_0$  ^  Pre<sub>1</sub>,$ y_{predicho}\in I_1$  ^
 +^  Realidad  ^  N,$y_{real}=0$  |  $N_0$  |  $N_1$  |
 +^ ::: ^  P,$y_{real}=1$  |  $P_0$  |  $P_1$  |
 +
 +
 +
 +
 +$$
 +\begin{array}
 +\\
 +P(Predicho_i|Negativo)&=&\frac{N_i}{N}
 +\\
 +P(Predicho_i|Positivo)&=&\frac{P_i}{P}
 +
 +\end{array}
 +$$
 +\\
 +\\
 +$$
 +\begin{array}
 +\\
 +P(Negativo|Predicho_i)&=&\frac{N_i}{Pre_i}
 +\\
 +P(Positivo|Predicho_i)&=&\frac{P_i}{Pre_i}
 +
 +\end{array}
 +$$
 +\\
 +\\
 +
 +$$
 +\begin{array}
 +\\
 +P(Positivo)&=&\frac{P}{P+N}&=&Prevalencia
 +\\
 +P(Negativo)&=&\frac{N}{P+N}&=&1-Prevalencia
 +\\
 +P(Predicho_i)&=&\frac{Pre_i}{P+N}
 +\end{array}
 +$$
 +
 +Ahora mostremos las métricas
 +
 +
 +| ^^  Predicción  ^^  Métricas  ^^
 +| ^^  Pre<sub>0</sub>,$ y_{predicho} \in I_0$  ^  Pre<sub>1</sub>,$ y_{predicho}\in I_1$  ^  Predicho<sub>0</sub>  ^  Predicho<sub>1</sub>  ^
 +^  Realidad  ^  N,$y_{real}=0$  |  $N_0$  |  $N_1$  |  $P(Predicho_0|Negativo)=\frac{N_0}{N}$  |  $P(Predicho_1|Negativo)=\frac{N_1}{N}$  |
 +^ ::: ^  P,$y_{real}=1$  |  $P_0$  |  $P_1$  |  $P(Predicho_0|Positivo)=\frac{P_0}{P}$  |  $P(Predicho_1|Positivo)=\frac{P_1}{P}$  |
 +^ Métricas ^  Negativa  |  $P(Negativo|Predicho_0)=\frac{N_0}{Pre_0}$  |  $P(Negativo|Predicho_1)=\frac{N_1}{Pre_1}$  |    |    |
 +^ ::: ^  Positiva  |  $P(Positivo|Predicho_0)=\frac{P_0}{Pre_0}$  |  $P(Positivo|Predicho_1)=\frac{P_1}{Pre_1}$  |    |    |
 +
 +
 +y ahora la tabla de confusión se podría simplificar aun más
 +
 +| ^^  Predicción  ^  Métricas  ^
 +| ^^  Pre<sub>i</sub>,$ y_{predicho} \in I_i$  ^  Predicho<sub>i</sub>  ^
 +^  Realidad  ^  N,$y_{real}=0$  |  $N_i$  |  $P(Predicho_i|Negativo)=\frac{N_i}{N}$  |
 +^ ::: ^  P,$y_{real}=1$  |  $P_i$  |  $P(Predicho_i|Positivo)=\frac{P_i}{P}$  |
 +^ Métricas ^  Negativa  |  $P(Negativo|Predicho_i)=\frac{N_i}{Pre_i}$  |    |
 +^ ::: ^  Positiva  |  $P(Positivo|Predicho_i)=\frac{P_i}{Pre_i}$  |    |
 +
 +Volvemos a usar Bayes para calcular la precisión usando la prevalencia que queramos:
 +
 +$$P(Positivo|Predicho_i)=\frac{P(Predicho_i|Positivo)*P(Positivo)}{P(Predicho_i|Positivo)*P(Positivo)+P(Predicho_i|Negativo)*P(Negativo)}  $$
 +\\
 +$$P(Negativo|Predicho_i)=\frac{P(Predicho_i|Negativo)*P(Negativo)}{P(Predicho_i|Negativo)*P(Negativo)+P(Predicho_i|Positivo)*P(Positivo)}=1-P(Positivo|Predicho_i)  $$
 +
 +====== Generalizando los intervalos ======
 +__**y ahora viene lo interesante, ¿que pasaría si en vez de haber un único umbral hubiera 10 umbrales?**__
 +
 +$I=\{ \;\;[0,0.1[\;,\;[0.1,0.2[\;,\;[0.2,0.3[\;,\;[0.3,0.4[\;,\;[0.4,0.5[\;,\;[0.5,0.6[\;,\;[0.6,0.7[\;,\;[0.7,0.8[\;,\;[0.8,0.9[\;,\;[0.9,1[ \;\;\}$
 +
 +En el siguiente código en Python se puede ver el resultado de usar las fórmulas:[[https://colab.research.google.com/drive/1uO1no11lYzlhj0OMJl7H6jdgTMsDerq-?usp=sharing|main.ipynb]]
 +
 +
 +====== Infinitos intervalos ======
 +¿Y si hubiera infinitos intervalos? Que podríamos sacar la probabilidad exacta para el resultado que nos ha dado.
 +
 +¿como sacarlo para infinitos intervalos? Pues calculando la función de densidad de probabilidad.
 +
 +Sabemos que la función de coste para las redes neuronales es $Binary \: Cross \: Entropy$:
 +
 +$$Binary \: Cross \: Entropy(y_{real},y_{predicho}) = - (y_{real} \cdot log(y_{predicho}) + (1-y_{real}) \cdot log(1-y_{predicho})) $$ 
 +
 +Los valores de $y_{real}$ son 0 o 1, mientras que los valores de $y_{predicho}$ es un número real entre 0 y 1
 +
 +Veamos ahora gráficamente como es la fórmula según si $y_{real}=0$ o $y_{real}=1$
 +
 +$$
 +Binary \: Cross \: Entropy(y_{real},y_{predicho}) =\left\{\begin{matrix}
 +-log(1-y_{predicho}) & si & y_{real}=0   \\
 +-log(y_{predicho}) & si & y_{real}=1   \\
 +\end{matrix}\right. 
 +$$
 +
 +{{:clase:iabd:pia:2eval:binary_crossentropy.png?nolink|}}
 +
 +====== Ejemplos ======
 +
 +  * Evolución de la red de "las imágenes de números " en 16 épocas:
 +{{ :clase:iabd:pia:experimentos:evolucion_red_digits.png?600 |}}
 +  * Evolución de la red de "cancer" en 16 épocas:
 +{{ :clase:iabd:pia:experimentos:evolucion_red_cancer.png?600 |}}