hedtorresca commited on
Commit
138423f
·
verified ·
1 Parent(s): 18601d9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +69 -21
app.py CHANGED
@@ -2,8 +2,8 @@ import gradio as gr
2
  import numpy as np
3
  import matplotlib.pyplot as plt
4
 
5
- # Función para calcular el teorema de Bayes
6
- def bayes(prior_A, prob_B_given_A, prob_B_given_notA):
7
  # Calculamos P(B) usando la regla de la probabilidad total
8
  prob_B = prob_B_given_A * prior_A + prob_B_given_notA * (1 - prior_A)
9
  # Calculamos P(A|B) usando el teorema de Bayes
@@ -11,7 +11,7 @@ def bayes(prior_A, prob_B_given_A, prob_B_given_notA):
11
  return posterior_A_given_B, prob_B
12
 
13
  # Función para crear el gráfico de barras
14
- def plot_results(prior_A, prob_B_given_A, prob_B_given_notA, posterior_A_given_B):
15
  # Crear un gráfico de barras para las probabilidades
16
  labels = ['P(A)', 'P(B|A)', 'P(B|¬A)', 'P(A|B)']
17
  values = [prior_A, prob_B_given_A, prob_B_given_notA, posterior_A_given_B]
@@ -23,25 +23,73 @@ def plot_results(prior_A, prob_B_given_A, prob_B_given_notA, posterior_A_given_B
23
 
24
  return fig
25
 
26
- # Función principal que se utilizará en la aplicación de Gradio
27
- def bayes_app(prior_A: float, prob_B_given_A: float, prob_B_given_notA: float):
28
- posterior_A_given_B, prob_B = bayes(prior_A, prob_B_given_A, prob_B_given_notA)
29
- fig = plot_results(prior_A, prob_B_given_A, prob_B_given_notA, posterior_A_given_B)
30
 
31
- # Guardar la figura como una imagen y devolver la tabla de resultados
32
  return fig, f"P(B): {prob_B:.4f}", f"P(A|B): {posterior_A_given_B:.4f}"
33
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  # Crear la interfaz de Gradio
35
- inputs = [
36
- gr.inputs.Slider(0, 1, step=0.01, label="P(A) (Prior de A)"),
37
- gr.inputs.Slider(0, 1, step=0.01, label="P(B|A)"),
38
- gr.inputs.Slider(0, 1, step=0.01, label="P(B|¬A)")
39
- ]
40
-
41
- outputs = [
42
- gr.outputs.Plot(label="Gráfico de Resultados"),
43
- gr.outputs.Textbox(label="P(B)"),
44
- gr.outputs.Textbox(label="P(A|B)")
45
- ]
46
-
47
- gr.Interface(fn=bayes_app, inputs=inputs, outputs=outputs, title="Calculadora del Teorema de Bayes", description="Calcula P(A|B) usando el Teorema de Bayes con probabilidades ingresadas.").launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  import numpy as np
3
  import matplotlib.pyplot as plt
4
 
5
+ # Función para calcular el teorema de Bayes con dos eventos
6
+ def bayes_two_events(prior_A, prob_B_given_A, prob_B_given_notA):
7
  # Calculamos P(B) usando la regla de la probabilidad total
8
  prob_B = prob_B_given_A * prior_A + prob_B_given_notA * (1 - prior_A)
9
  # Calculamos P(A|B) usando el teorema de Bayes
 
11
  return posterior_A_given_B, prob_B
12
 
13
  # Función para crear el gráfico de barras
14
+ def plot_results_two_events(prior_A, prob_B_given_A, prob_B_given_notA, posterior_A_given_B):
15
  # Crear un gráfico de barras para las probabilidades
16
  labels = ['P(A)', 'P(B|A)', 'P(B|¬A)', 'P(A|B)']
17
  values = [prior_A, prob_B_given_A, prob_B_given_notA, posterior_A_given_B]
 
23
 
24
  return fig
25
 
26
+ # Función principal para dos eventos
27
+ def bayes_app_two_events(prior_A, prob_B_given_A, prob_B_given_notA):
28
+ posterior_A_given_B, prob_B = bayes_two_events(prior_A, prob_B_given_A, prob_B_given_notA)
29
+ fig = plot_results_two_events(prior_A, prob_B_given_A, prob_B_given_notA, posterior_A_given_B)
30
 
31
+ # Retornar la figura y los resultados
32
  return fig, f"P(B): {prob_B:.4f}", f"P(A|B): {posterior_A_given_B:.4f}"
33
 
34
+ # Función para múltiples eventos
35
+ def bayes_multiple_events(priors, likelihoods):
36
+ priors = np.array(priors)
37
+ likelihoods = np.array(likelihoods)
38
+
39
+ # Calculamos P(B) usando la regla de la probabilidad total
40
+ prob_B = np.sum(priors * likelihoods)
41
+
42
+ # Calculamos las probabilidades posteriores P(Ai|B) para cada evento Ai
43
+ posteriors = (priors * likelihoods) / prob_B
44
+ return posteriors, prob_B
45
+
46
+ # Función para crear gráficos para múltiples eventos
47
+ def plot_results_multiple_events(priors, likelihoods, posteriors):
48
+ events = [f'A{i+1}' for i in range(len(priors))]
49
+
50
+ fig, ax = plt.subplots()
51
+ ax.bar(events, posteriors, color='purple')
52
+ ax.set_ylabel('Probabilidad Posterior')
53
+ ax.set_title('Resultados del Teorema de Bayes para Múltiples Eventos')
54
+
55
+ return fig
56
+
57
+ # Función principal para múltiples eventos
58
+ def bayes_app_multiple_events(priors, likelihoods):
59
+ priors = list(map(float, priors.split(',')))
60
+ likelihoods = list(map(float, likelihoods.split(',')))
61
+
62
+ posteriors, prob_B = bayes_multiple_events(priors, likelihoods)
63
+ fig = plot_results_multiple_events(priors, likelihoods, posteriors)
64
+
65
+ resultados = "\n".join([f"P(A{i+1}|B): {posterior:.4f}" for i, posterior in enumerate(posteriors)])
66
+ return fig, f"P(B): {prob_B:.4f}", resultados
67
+
68
  # Crear la interfaz de Gradio
69
+ with gr.Blocks() as demo:
70
+ with gr.Tab("Dos Eventos"):
71
+ gr.Markdown("### Calculadora del Teorema de Bayes para Dos Eventos")
72
+ prior_A = gr.Slider(0, 1, step=0.01, label="P(A) (Prior de A)")
73
+ prob_B_given_A = gr.Slider(0, 1, step=0.01, label="P(B|A)")
74
+ prob_B_given_notA = gr.Slider(0, 1, step=0.01, label="P(B|¬A)")
75
+
76
+ plot = gr.Plot()
77
+ prob_B = gr.Textbox(label="P(B)")
78
+ prob_A_given_B = gr.Textbox(label="P(A|B)")
79
+
80
+ btn = gr.Button("Calcular")
81
+ btn.click(fn=bayes_app_two_events, inputs=[prior_A, prob_B_given_A, prob_B_given_notA], outputs=[plot, prob_B, prob_A_given_B])
82
+
83
+ with gr.Tab("Múltiples Eventos"):
84
+ gr.Markdown("### Calculadora del Teorema de Bayes para Múltiples Eventos")
85
+ priors_input = gr.Textbox(label="Priors (separados por comas)")
86
+ likelihoods_input = gr.Textbox(label="Likelihoods (separados por comas)")
87
+
88
+ plot_multi = gr.Plot()
89
+ prob_B_multi = gr.Textbox(label="P(B)")
90
+ posteriors = gr.Textbox(label="Posteriors")
91
+
92
+ btn_multi = gr.Button("Calcular")
93
+ btn_multi.click(fn=bayes_app_multiple_events, inputs=[priors_input, likelihoods_input], outputs=[plot_multi, prob_B_multi, posteriors])
94
+
95
+ demo.launch()