====== 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 ^^ | ^^ Pre0,$ y_{predicho} \in I_0$ ^ Pre1,$ 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 ^^ | ^^ Pre0,$ y_{predicho} \in I_0$ ^ Pre1,$ y_{predicho}\in I_1$ ^ Predicho0 ^ Predicho1 ^ ^ 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 ^ | ^^ Prei,$ y_{predicho} \in I_i$ ^ Predichoi ^ ^ 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?nolink&600 |}} * Evolución de la red de "cancer" en 16 épocas: {{ :clase:iabd:pia:experimentos:evolucion_red_cancer.png?nolink&600 |}}