Con la ayuda de los videos que compartieron los compañeros, hice el diagrama de árbol para verlo mas gráficamente, ademas de agregar los nombres de las variables que utilizo David.
Programación probabilística
Programación Probabilística: Fundamentos y Aplicaciones Prácticas
Probabilidad Condicional y Eventos Dependientes
Teorema de Bayes: Aplicaciones y Comprensión de Probabilidades
Teorema de Bayes: Intuición y Visualización Práctica
Cálculo de Probabilidad Condicional con Teorema de Bayes y Python
Aplicaciones Modernas del Teorema de Bayes
Mentiras estadísticas
Errores de Datos en Modelos Estadísticos y su Impacto
Detectar Manipulación en Gráficas Estadísticas
Correlación vs Causalidad: Evitando Errores de Razonamiento
Errores Comunes en el Muestreo Estadístico
Identificación y prevención de la falacia del francotirador
Detectar Manipulación de Datos con Porcentajes
Falacia de Regresión a la Media: Concepto y Ejemplos Prácticos
Introducción a Machine Learning
Historia y evolución del Machine Learning
Vectores Numéricos para Modelado en Machine Learning
Métricas de Distancia en Algoritmos de Machine Learning
Agrupamiento
Algoritmos de Agrupamiento: Clasificación y Aplicaciones Prácticas
Agrupamiento Jerárquico: Algoritmo y Visualización
Algoritmo K-means: Conceptos y Aplicación Práctica
Técnicas de Agrupamiento en Machine Learning
Clasificación
Técnicas de Clasificación en Aprendizaje Supervisado
Clasificación de Datos con Algoritmo K-Nearest Neighbors
Algoritmos de Clasificación en Machine Learning
Pensamiento Computacional: Fundamentos y Aplicaciones Prácticas
Crea una cuenta o inicia sesión
¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera
El teorema de Bayes es una herramienta matemática poderosa que permite realizar inferencias basadas en evidencia previa. En el contexto médico, este teorema puede ayudarnos a evaluar la probabilidad de que una persona tenga una enfermedad basándonos en los síntomas que presenta.
Comenzaremos utilizando una tabla que refleja:
Con estas proporciones, podemos calcular la probabilidad de tener la enfermedad dado que se presenta un síntoma, y viceversa.
Usaremos un lenguaje de programación, como Python, para implementar el teorema de Bayes y calcular estas probabilidades:
def calcular_bayes(prior, probabilidad_evidencia_dado_hipotesis, probabilidad_evidencia):
return (prior * probabilidad_evidencia_dado_hipotesis) / probabilidad_evidencia
Esta función calcula la probabilidad de una hipótesis (tener cáncer) dadas ciertas evidencias (presentación de síntomas).
En nuestro código, definimos los valores necesarios con base en los datos del problema:
Estos valores son paramétricamente necesarios para alimentar la función calcular_bayes
.
Una vez calculados los resultados iniciales, es esencial revisar la lógica y posibles errores de cálculo. Como se mostró en el ejemplo, un simple error (agregar un dígito de más) puede alterar drásticamente los resultados, interpretamos un resultado incorrecto del 50% de posibilidad frente a uno correcto del 9%.
# Corrección de un error potencial al fijar la base del cálculo
Con cada nueva evidencia (como resultados de exámenes médicos), las probabilidades iniciales se actualizan. Es una característica esencial del teorema de Bayes, permitiendo una adaptación recursiva y dinámica de la información.
El aprendizaje de calculo probabilístico potencia la capacidad de análisis y determinación de hipótesis, lo cual es aplicable en múltiples ámbitos y situaciones más allá de los problemas médicos, dando herramientas para una toma de decisiones más fundamentada y reduciendo la ansiedad provocada por la incertidumbre o los supuestos riesgos.
Aportes 91
Preguntas 15
Con la ayuda de los videos que compartieron los compañeros, hice el diagrama de árbol para verlo mas gráficamente, ademas de agregar los nombres de las variables que utilizo David.
La verdad este tema no me quedo tan claro, entonces busque un poco de información adicional y encontre este video donde en solo 5 minutos logre entender bien el teorema de Bayes, les comparto para el que le pueda servir también.
Saludos
Esta seria la solucion paso a paso:
No son los muy bellos apuntes de majo (disculpen el diseño no es mi mejor habilidad), pero ahí les va el Eikosograma para visualizarlo, les recomiendo también hacer a mano el ejercicio para entender
 \
+ (prob_sintoma_dado_no_cancer * prob_no_cancer)
Aporte
Probabilidad de tener el coronavirus si tiene sintomas en Villavicencio Meta, ya que solo una persona
tiene el virus
def calc_bayes(prior_A, prob_B_dado_A, prob_B):
return(prior_A * prob_B_dado_A) / prob_B
if __name__ == '__main__':
prob_tener_covid_colombia = 1/540000
prob_sintoma_dado_covid_colombia = 1
prob_sintoma_dado_no_covid_colombia = 10 / 540000
prob_no_tener_covid_colombia = 1 - prob_tener_covid_colombia
prob_sintoma = (prob_sintoma_dado_covid_colombia * prob_tener_covid_colombia) + (prob_sintoma_dado_no_covid_colombia * prob_no_tener_covid_colombia)
prob_tener_covid_dado_sintoma = calc_bayes(prob_tener_covid_colombia, prob_sintoma_dado_covid_colombia,prob_sintoma)
print(round(prob_tener_covid_dado_sintoma,10),'%')
Como tarea: Realizar la probabilidad de tener coronavirus si se tiene los sintomas.
A mi me ayudo mucho entender primero matemáticamente el teorema de Bayes, después trasladarlo a código es muy sencillo, les comparto este link donde explican este teorema.
https://www.youtube.com/watch?v=Fi6G48j0IZ4
Yo sí me asusté con ese 50% que le salió haha
El error de sintaxis en el minuto 07:56 fue que se utilizo “/” (slash) en lugar de “” (backslash).
probabilidadTenerSintoma=(probabilidadSintomaDadaEnfermedad*probabilidadEnfermedad)\
+(probabilidadSintomaDadoNoEnfermedad*probabilidadNoEnfermedad) # "\" es en Python lo que "..." es en Matlab
En la medicina que se enseña hoy en día en las estudiantes médicos cada vez es más frecuente que se aborden temas como Pensamiento Probabilístico, o incluso Computacional con respecto a la evaluación diagnóstica, el pronóstico y los posibles tratamientos que es posible administrar a los distintos pacientes
El Teorema de Bayes es un conocimiento pilar para la corriente que predomina hoy en día entre los médicos jóvenes: La Medicina Basada en Evidencias (Evidence Based Medicine)
Se los cuento de primera mano porque el semestre pasado nos acaban de atiborrar de conocimientos y pruebas de conocimientos sobre el tema y de hecho es una de las cosas que me inspiró siendo médico en formación a incursionar en el campo del Desarrollo de Software para dar solución a muchos de los problemas que hoy aquejan a la mayoría de los pacientes que veo n.n
Si quieren leer más del tema, les dejo uno de los mejores libros al respecto (aunque quizá esté algo especializado)
https://booksmedicos.org/evidence-based-physical-diagnosis/
Al igual que algunos comentarios de la comunidad, recomiendo primero vean videos de como se resuleve matematicamente, ya que verlo en codigo se vuelve un tanto confunso.
El divisor de linea en pyrhon es en reaidad '\'
Por si a alguien le interesa 😃 El error que le dio al profe en la primera ejecución es porque tenía un slash normal (/), y el truco que enseñó si funciona (continuar una línea de código muy larga debajo), sólo que se debe usar backslash (\).
¡Saludos!
Comparto mi código por si a alguien se le facilita mas verlo en términos de H y E, como es mi caso
def cal_bayes(prior_H, prob_E_given_H, prob_E):
return prior_H * prob_E_given_H / prob_E
if __name__ == '__main__':
prior_H = 1 / 100000
prob_not_H = 1 - prior_H
prob_E_given_H = 1 # todas las personas con cancer tienen síntomas osea: 100%
prob_E_given_not_H = 10 / 99999 # 10 de 99999 tienen síntomas y no cancer
prob_E = prior_H * prob_E_given_H + prob_not_H * prob_E_given_not_H # todos los casos de síntomas
print("La probabilidad de tener cancer dado síntomas es: \n", cal_bayes(prior_H, prob_E_given_H, prob_E))
mi profesora de probabilidad me mataría por no escribir de manera rigurosa jajajaj pero así me lo enseñaron en mi escuela y creo que queda mucho más claro
me inventé también otro ejemplo para comprobar
ahora lo hice en código como el profe Aroesti enseña, estos son los resultados
la probabilidad de tener cáncer dado un síntoma es 9.091%
la probabilidad de la palabra perro está en el email dado que sea spam es 8.333%
Hola
Les comparto el código con algunas modificaciones para comprenderlo mejor.
def calc_bayes(prior_A, prob_B_dado_A, prob_B):
# P(H) * P(E/H) / P(E)
return (prior_A * prob_B_dado_A) / prob_B
if __name__ == '__main__':
# P(E/H)
prob_cancer = 1 / 100000
# P(H)
prob_sintoma_dado_cancer = 1
# P(¬H)
prob_sintoma_dado_no_cancer = 10 / 99999
# P(E/¬H)
prob_no_cancer = 1 - prob_cancer
# P(E) = P(H) * P(E/H) + P(¬H) * P(E/¬H)
prob_sintoma = (prob_sintoma_dado_cancer * prob_cancer) + (prob_sintoma_dado_no_cancer * prob_no_cancer)
# P(H/E)
prob_cancer_dado_sintoma = calc_bayes(prob_cancer, prob_sintoma_dado_cancer, prob_sintoma)
print(f'La probabilidad de tener cáncer dado que tiene síntoma es de {prob_cancer_dado_sintoma * 100}%.')
Era necesario utilizar el cáncer como ejemplo? No podía ser resfrió? No podía utilizar otro ejemplo de la vida diario que no se enfermedad? Cuantos alumnos con cáncer o familiares con cáncer habrá en Platzi? Un desacierto enorme de este señor.
Calculé las probabilidades de que presentar sintomas de covid, sea efectivamente covid en la Ciudad Autónoma de Buenos Aires hoy 26 de mayo. Sin embargo los datos de prob_sintoma_dado_no_covid es pura inferencia.
Debo admitir q es un ejemplo poco feliz
Probabilidad de tener sintomas dado COVID19 en Oruro Bolivia tomando que se tiene 90 casos en el departamento y 538200 habitantes, y se tiene el dato que 80% de los casos son asintomaticos y que se hicieron 386 pruebas a los sintomaticos hasta la fecha:
Dando que la probabilidad en este departamento es de 4.6%
def calc_bayes(prior_A, prob_B_dado_A, prob_B):
return (prior_A * prob_B_dado_A) / prob_B
if __name__ == '__main__':
prob_covid19 = 90 / 538200
prob_sintoma_dado_covid19 = 18/90
prob_sintoma_dado_no_covid19 = 368 / (538200-90)
prob_no_covid19 = 1 - prob_covid19
prob_sintoma = (prob_sintoma_dado_covid19 * prob_covid19) + (prob_sintoma_dado_no_covid19 * prob_no_covid19)
prob_covid19_dado_sintoma = calc_bayes(prob_covid19, prob_sintoma_dado_covid19, prob_sintoma)
print(prob_covid19_dado_sintoma)```
Puede usar guiones bajos para separar los miles en python
100000 == 100_000
No se si ya hayan comentado esto, pero para hacer el salto de línea entre el código es con \ en lugar de /
El 50% de Platzi preocupado por esto.
maldita curva del aprendizaje…!!!
Hice un ejercicio calculando la probabilidad de tener covid en mi ciudad si tengo síntomas:
Hola
A mí me ayudó mucho este video también
En lo que vi la probabiliad del 50% dudé de mi existencia jaja… Es por esto que es importante entender lo que hacemos, encontrar sentido en nuestros resultados.
¿Esto se puede implementar en otro lenguaje como Javascript?
def calc_bayes(prior_A, prob_B_dado_A, prob_B):
return (prior_A*prob_B_dado_A)/prob_B
if name == ‘main’:
prob_cancer = 1/100000
prob_sintoma_dado_cancer = 1
prob_sintoma_dado_no_cancer = 10/99999
prob_no_cancer = 1 - prob_cancer
prob_sintoma = (prob_sintoma_dado_cancer * prob_cancer) \
+ (prob_sintoma_dado_no_cancer * prob_no_cancer)
prob_cancer_dado_sintoma = calc_bayes(prob_cancer, prob_sintoma_dado_cancer, prob_sintoma)
print(prob_cancer_dado_sintoma)
#teorema de bayes
def calc_bayes(prior_A,prob_B_dado_A,prob_B):
return(prior_A*prob_B_dado_A)/prob_B
if __name__=='__main__':
prob_cancer=1/100000
prob_sintoma_dado_cancer=1
prob_sintoma_dado_no_cancer=10/99999
prob_no_cancer=1-prob_cancer
prob_sintoma=(prob_sintoma_dado_cancer*prob_cancer) \
+(prob_sintoma_dado_no_cancer *prob_no_cancer)
prob_cancer_dado_sintoma=calc_bayes(prob_cancer,prob_sintoma_dado_cancer,prob_sintoma)
print(prob_cancer_dado_sintoma)
creo que hay un ligero error y es que el profesor escribió 999999
cuando la suma de los que no tienen cáncer es de 99999
por eso la probabilidad salió muy alta porque solo tenemos una muestra de 100000 personas
Llegue a entender el Teorema de Bayes ( recomiendo mucho el vídeo que dejaron en la clase pasada con el árbol) , lo que me pregunto es por qué simplemente no usar 1/11
Realmente es un 9%, dado que el examen (síntomas en el vídeo) sea positivo.
https://www.youtube.com/watch?v=D7KKlC0LOyw
3:46 --> La frase que dice David está al revés a como debería ser. En realidad, lo que la tabla nos dice es que todos los que tienen cáncer tienen síntomas.
no se pero a mi en mac me sale error en la linea 12 si pongo el /
Les paso mi apunte sobre la explicación de bayes, espero que les sirva 😃
Les dejo mi versión del código
# Implementamos la P(B) = P(A)P(A|B) + P(¬A)P(B|¬A)
def prob_b(prob_a, prob_b_dado_a, prob_b_complemento_a):
calculo = prob_a * prob_b_dado_a + (1-prob_a) * prob_b_complemento_a
return calculo
# Implementamos la P(A|B) = P(B|A)P(A) / P(B)
def cal_bayes(prob_a, prob_b_dado_a, prob_b_complemento_a):
prob_evento = prob_b(prob_a, prob_b_dado_a, prob_b_complemento_a)
calculo = (prob_b_dado_a * prob_a)/prob_evento
return calculo
if __name__ == "__main__":
prob_cancer = 1 / 100000
prob_sintoma_dado_cancer = 1
prob_sintoma_dado_no_cancer = 10 / 99999
resultado = cal_bayes(prob_cancer, prob_sintoma_dado_cancer, prob_sintoma_dado_no_cancer)
print(resultado)
Para evitar el error que obtuvo el profesor y ver todo el código en el editor siempre se puede activar la siguiente opción en VSC
"editor.wordWrap": "on"
JJAAJAAJ buenisimo el error intencional un poco malvado jaajja
Compañeros, me funciona mucho usar diagramas de arbol ayuda mucho al entendimiento de los problemas, comparto otro recurso para la clase.
Entrenar el pensamiento probabilístico, permite tomar mejor decisiones.
El teorema de bayes pone en jaque a los hipocondriacos :'V
este link es super [util para reforzar los conocimientos necesarios en todo el campo de las matemáticas:
https://matemovil.com/
y este otro link encuentras la guia de ejercicios del teorema de Bayes:
Descarga la guía de ejercicios: https://matemovil.com/?p=5488
Genial esta clase…
Siempre tomamos el prior, para basarnos en nuestro último resultado, para que luego en la siguiente prueba con nuevos datos, lo pogamos a prueba.
Si tienes un síntoma sin casi información, tus probabilidades, no se pueden ir al techo de una vez. No puede pensar lo peor.
Con el teorema de Bayes, podemos calcular, la probabilidad de que nuestros pacientes, tengan alguna enfermedad.
Aunque yo preferiría decir… La probabilidad de que dado un sintoma No tiene la enfermedad … 91% 😃 jejeje me suena mas positivo … De igualo manera que excelente explicación Gracias
1/11, es el resultado final, y tiene mucho sentido 😃
Sería muy interesante hacer este problema, pero con el cuadro general del covid, ya que hay personas asintomáticas y agregar toda la parte de resultados con las vacunas obtenidos, cual sería la probabilidad de que muriera el 30% de la población. Cosas así re locas.
jaja esta medio crudo con estos ejemplos, donde los demás utilizan maquinas defectuosas o peces de colores pero se entiende todo el teorema 😄
Excelente clase
Me tenté durante 15 minutos cuando le dio como resultado 50% de probabilidades de estar enfermo JAJAJA
Tuve un problema al ejecutar el código, porque no lo pude identar correctamente, me he frustado toda la mañana pensando que era algún problema con mi versión de python porque estoy haciendo este curso desde windows, pero NOO, bueno como sea, les quiero dejar este tutorial completito de python que encontré. lo puedes pasar al idioma que tu gustes.
Entendido
El divisor de linea en pyrhon es en reaidad ‘’
def calc_bayes(prior_A, prob_B_dado_A, prob_B):
return (prior_A * prob_B_dado_A) / prob_B
if __name__ == '__main__':
prob_cancer = 1 / 100000
prob_sintoma_dado_cancer = 1
prob_Sintoma_dado_no_cancer = 10/99999
prob_no_cancer = 1 - prob_cancer
prob_sintoma = (prob_sintoma_dado_cancer * prob_cancer) + (prob_Sintoma_dado_no_cancer*prob_no_cancer)
prob_cancer_dado_sintoma = calc_bayes(prob_cancer, prob_sintoma_dado_cancer, prob_sintoma)
print(prob_cancer_dado_sintoma)
jajajajajajajajajajajajajajajaj
Un código recursivo
def calc_bayes(prior_H, pro_E_dado_H, pro_E):
return (prior_H * pro_E_dado_H) / pro_E
if __name__ == '__main__':
prob_cancer = 1/100000
prob_sintoma_dado_cancer = 1
prob_sintoma_dado_no_cancer = 10 / 99999
for _ in range(11):
prob_no_cancer = 1 - prob_cancer
prob_sintoma = (prob_cancer * prob_sintoma_dado_cancer) + (prob_no_cancer * prob_sintoma_dado_no_cancer)
prob_cancer_dado_sintoma = calc_bayes(prob_cancer, prob_sintoma_dado_cancer, prob_sintoma)
print(f'{prob_cancer_dado_sintoma * 100}%')
prob_cancer = prob_cancer_dado_sintoma!```
[Captura.PNG](https://static.platzi.com/media/user_upload/Captura-911a61e2-d85b-4075-9507-e591065f507d.jpg)
P(A/B)/P(A)=P(B/A)/P(B) ahi se ve la proporcionalidad es mas entendible de esta manera creo yo que estar memorizando, ademas puedes hallarle sentido a la ecuacion con diagramas de veen por ejemplo
Muy buena implementación
Verlo ahora en código, a diferencia del montón de ejercicios hechos en la universidad, me da una visión nueva del asunto. Realmente es muy interesante conocer que detrás de la IA y el ML están las probabilidades y la estadística 😄
EJEMPLO DE TEOREMA DE BAYES: Excelente clase para recordar como se calcula este teorema
Lo que es indispensable en estas aplicaciones de conceptos estadísticos en un lenguaje de programación; es tener claro el funcionamiento de la formula y establecer los parámetros antes de proceder al código.
jajaa ese 50% si fue epico.
Buena clase, entendible perfectamente
Excelente clase, se me aclararón dudas.
Aca dejo mi aporte en GitHub:
https://github.com/francomanca93/Escuela-DataScience/tree/master/introduccion-al-pensamiento-probabilistico#Aplicando-Teorema-de-Bayes
muy buen implementación
def calc_symp(prior_a,p_b_dado_a, p_b):
return prior_a * p_b_dado_a / p_b
if __name__ == "__main__":
pro_cancer= 1/100000
pro_symp_dado_cancer= 1
pro_symp_dado_nocancer= 10/99999
pro_no_tener_cancer= 1 - pro_cancer
pro_symp= (pro_symp_dado_cancer* pro_cancer)+(pro_symp_dado_nocancer*pro_no_tener_cancer)
pro_cancer_dado_symp= calc_symp(pro_cancer,pro_symp_dado_cancer,pro_symp)
print(pro_cancer_dado_symp)
Les paso mi versión del código.
if __name__ == "__main__":
total = 100000
cancer_si = 1 / total
cancer_no = 1 - cancer_si
sintomas_si_cancer_si = 1
sintomas_si_cancer_no = 10 / (total - 1)
sintomas_si = ( cancer_si * sintomas_si_cancer_si ) + ( cancer_no * sintomas_si_cancer_no )
bayes = ( cancer_si * sintomas_si_cancer_si ) / sintomas_si
print(' ')
print('- Prob. de tener cancer y tener sintomas', bayes)
que susto con el primer calculo que salió jajaja 😃 😃
Explicación codigo
Para el error que viene en la línea 2, yo lo puse de esta manera:
prob_sintoma = ((prob_sintoma_dado_cancer * prob_cancer)
+ (prob_sintoma_dado_no_cancer * prob_no_cancer))
El paréntesis inicia en la línea 12 y termina en la 13.
Aprovecho el ejemplo de esta clase para volver a subir un ejemplo que puse en la clase anterior y me parece pertinente ponerlo aquí:
Adjunto también el código:
# -*- coding: utf-8 -*-
# Goal: Compute the probability of having cancer given a symptom
def bayes_theorem(prob_event_given_hypothesis, prob_hypothesis, prob_event):
return (prob_event_given_hypothesis*prob_hypothesis)/prob_event
def main():
# compute probability of having cancer given a symptom.
prob_cancer = 1 / 100000
prob_no_cancer = 1 - prob_cancer
prob_symptom_with_cancer = 1
prob_symptom_no_cancer = 10 / 99999
prob_symptom = prob_cancer * prob_symptom_with_cancer + prob_no_cancer * prob_symptom_no_cancer
print(bayes_theorem(prob_symptom_with_cancer, prob_cancer, prob_symptom))
if __name__ == '__main__':
main()
Para aquellos que no les quedó claro, el código que hice está un poco más detallado con comentarios
#aplicando el teorema de bayes
#ej. A=está nublado, B=Va a llover, Prob de que esté nublado debido a que va a llover
#Objetivo= calcular Prob de tener cancer dado que uno tiene los síntomas, P(A|B)
def calcular_teorema_Bayes(Evento_A, prob_B_dado_A,prob_hipotesis_B): #P(A), P(B|A), P(B)
return (Evento_A* prob_B_dado_A)/prob_hipotesis_B #P(A|B)= P(A) * P(B|A)/P(B)
if __name__=='__main__':
#todas las probabilidades siguientes se consultan en la tabla
prob_tener_cancer=1/100000 #1 de c/cienmil tienen cancer... P(A)
prob_tener_sintomas_dado_tiene_cancer= 1 #100% tener sintomas ya que si tienen cancer... P(B|A)
prob_tener_sintomas_dado_no_cancer=10/99999 #10 tienen sintomas pero no cancer... P(B|¬A)
prob_no_tener_cancer= 1- prob_tener_cancer #1-1/100000... P(¬A)
#Cálculo adicional... P(B)= P(A) * P(B|A) + P(¬A)*P(B|¬A)
prob_sintomas= (prob_tener_cancer * prob_tener_sintomas_dado_tiene_cancer) + (prob_no_tener_cancer*prob_tener_sintomas_dado_no_cancer)
#P(A|B)= P(A)*P(B|A)/P(B)... "TEOREMA DE BAYES"
prob_cancer_dado_tener_sintomas= calcular_teorema_Bayes(prob_tener_cancer, prob_tener_sintomas_dado_tiene_cancer, prob_sintomas)
print(f'Probabilidad de tener cancer dado a que tiene síntomas "P(A|B)=" {round(prob_cancer_dado_tener_sintomas*100, 2)} % ')
Les escribe un graduado de Ingeniería y les puedo afirmar:
.
Si bien dominé bastante todos estos conceptos de probabilidad, la verdad cada vez que introducía la fórmula de Bayes me tenía que parar a pensar y razonar cada operación que hacía. Es realmente utilizar la programación como Aliada para que únicamente nos enfoquemos en la “abstracción” de los valores que necesitamos y dejemos el resto de lado =)
Amigos les comparto el código con un formato presentable:
# prior_A = Probabilidad de que tenga cancer
# prob_B = Probabilidad de tener sintoma
# prob_B_dado_A = Probabilidad de tener un sintoma dado tener cancer
def calc_bayes(prior_A, prob_B_dado_A, prob_B):
return (prior_A * prob_B_dado_A ) / prob_B
if __name__ == '__main__':
prob_cancer = 1 / 100000
prob_sintoma_dado_cancer = 1
prob_sintoma_dado_no_cancer = 10 / 99999
prob_no_cancer = 1 - prob_cancer
prob_sintoma = (prob_sintoma_dado_cancer * prob_cancer) \
+ (prob_sintoma_dado_no_cancer * prob_no_cancer)
prob_cancer_dado_sintoma = calc_bayes(prob_cancer, prob_sintoma_dado_cancer, prob_sintoma)
print(f"\n{round(prob_cancer_dado_sintoma*100, 2)} %, de probabilidad de tener cancer \n")
Este es el resultado
9.09 %, de probabilidad de tener cáncer
Además creo que con la base de las formulas se puede hacer un programa base con la formula de Bayes, para después solo alimentar datos y obtener el resultado de probabilidad que buscamos, en algún rato libre pensare en el código de este, Saludos.
Notas 😄
Análisis de síntomas.
\
para partir dos líneas de código 😄 y así tu código se puede leer mejor. No es /
como se vio en la clase.def calc_bayes(prior_A, prob_B_dado_A, prob_B):
return (prior_A * prob_B_dado_A) / prob_B
if __name__ == '__main__':
prob_cancer = 1 / 100000
prob_sintoma_dado_cancer = 1
prob_sintoma_no_cancer = 10 / 99999
prob_no_cancer = 1 - prob_cancer
prob_sintoma = (prob_sintoma_dado_cancer) * prob_cancer \
+ (prob_sintoma_no_cancer) * prob_no_cancer
prob_cancer_dado_sintoma = calc_bayes(prob_cancer,
prob_sintoma_dado_cancer,
prob_sintoma)
print(prob_cancer_dado_sintoma)
Esto es lo mismo que una matriz de confusión, correcto?
La probabilidad de síntomas la calcule usando la fórmula pero se llega al mismo resultado.
<# Hipotesis: Tener Cancer
#Evidencia: Tener Sintomas
# P(H|E): probabilidad de tener cancer dado que tengo sintomas
# P(H): probabilidad de sintomas = 1/100000
# P(E|H): probabilidad de tener sintomas dado que cancer = 1/1 = 1
# P(¬H): Probabilidad de no tener cancer = 99999/100000
# P(E|¬H): Probabilidad de tener sintomas dado que no tengo cancer = 10/99999
def cancer_sintomas(prob_A, Prob_B_A, prob_B):
return (prob_A * Prob_B_A) / prob_B
if __name__ == '__main__':
prob_cancer = 1 / 100000
prob_sintomas_cancer = 1
prob_no_cancer = 99999/100000
prob_sintomas_no_cancer = 10/99999
prob_sintomas = (prob_cancer * prob_sintomas_cancer) + (prob_no_cancer * prob_sintomas_no_cancer)
prob_cancer_dado_sintoma = cancer_sintomas(prob_cancer, prob_sintomas_cancer, prob_sintomas)
print(prob_cancer_dado_sintoma)
>
def calc_bayes(prior_A, prob_B_dado_A, prob_B):
return (prior_A * prob_B_dado_A) / prob_B
if __name__ == '__main__':
prob_cancer = 1/100000
prob_sintoma_dado_cancer = 1
prob_sintoma_dado_no_cancer = 10 /99999
prob_no_cancer = 1 - prob_cancer
prob_sintoma = (prob_sintoma_dado_cancer * prob_cancer) + (prob_sintoma_dado_no_cancer * prob_no_cancer)
prob_cancer_dado_sintoma = calc_bayes(prob_cancer, prob_sintoma_dado_cancer, prob_sintoma)
percent = round(prob_cancer_dado_sintoma * 100, 2)
print(f'La probabilidad de que tenga cancer es de {percent}%')
La probabilidad de que tenga cancer es de 9.09%
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?