hedtorresca commited on
Commit
2568eea
verified
1 Parent(s): c21e3c0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -67
app.py CHANGED
@@ -1,6 +1,7 @@
1
  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 con dos eventos
6
  def bayes_two_events(prior_A, prob_B_given_A, prob_B_given_notA):
@@ -10,90 +11,41 @@ def bayes_two_events(prior_A, prob_B_given_A, prob_B_given_notA):
10
  posterior_A_given_B = (prob_B_given_A * prior_A) / prob_B
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]
18
-
19
- fig, ax = plt.subplots()
20
- ax.bar(labels, values, color=['skyblue', 'orange', 'lightgreen', 'pink'])
21
- ax.set_ylabel('Probabilidad')
22
- ax.set_title('Resultados del Teorema de Bayes')
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 Simple del Teorema de Bayes para Dos Eventos")
72
  gr.Markdown("Ajusta los valores de probabilidad para calcular la probabilidad de A dado B (P(A|B)).")
73
-
74
  prior_A = gr.Slider(0, 1, step=0.01, label="Probabilidad Inicial de A (P(A))", value=0.5)
75
  prob_B_given_A = gr.Slider(0, 1, step=0.01, label="Probabilidad de B dado A (P(B|A))", value=0.7)
76
  prob_B_given_notA = gr.Slider(0, 1, step=0.01, label="Probabilidad de B dado que no ocurre A (P(B|卢A))", value=0.2)
77
-
78
- plot = gr.Plot()
79
  prob_B = gr.Textbox(label="Probabilidad de B (P(B))")
80
  prob_A_given_B = gr.Textbox(label="Probabilidad de A dado B (P(A|B))")
81
-
82
- btn = gr.Button("Calcular")
83
- 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])
84
 
85
- with gr.Tab("M煤ltiples Eventos"):
86
- gr.Markdown("## Calculadora del Teorema de Bayes para M煤ltiples Eventos")
87
- gr.Markdown("Introduce las probabilidades de los eventos iniciales (Priors) y las probabilidades condicionales de B dado cada evento (Likelihoods) separadas por comas. Ejemplo: '0.2, 0.3, 0.5' para tres eventos.")
88
-
89
- priors_input = gr.Textbox(label="Priors (Probabilidades Iniciales)", placeholder="Ejemplo: 0.2, 0.3, 0.5")
90
- likelihoods_input = gr.Textbox(label="Likelihoods (Probabilidades Condicionales de B dado cada evento)", placeholder="Ejemplo: 0.6, 0.7, 0.4")
91
-
92
- plot_multi = gr.Plot()
93
- prob_B_multi = gr.Textbox(label="Probabilidad de B (P(B))")
94
- posteriors = gr.Textbox(label="Probabilidades Posteriores")
95
-
96
- btn_multi = gr.Button("Calcular")
97
- btn_multi.click(fn=bayes_app_multiple_events, inputs=[priors_input, likelihoods_input], outputs=[plot_multi, prob_B_multi, posteriors])
98
 
99
  demo.launch()
 
1
  import gradio as gr
2
  import numpy as np
3
  import matplotlib.pyplot as plt
4
+ from matplotlib_venn import venn2
5
 
6
  # Funci贸n para calcular el teorema de Bayes con dos eventos
7
  def bayes_two_events(prior_A, prob_B_given_A, prob_B_given_notA):
 
11
  posterior_A_given_B = (prob_B_given_A * prior_A) / prob_B
12
  return posterior_A_given_B, prob_B
13
 
14
+ # Funci贸n para crear el diagrama de Venn
15
+ def plot_venn(prior_A, prob_B_given_A, prob_B_given_notA):
16
+ # Calculamos las 谩reas relativas del diagrama de Venn
17
+ area_A = prior_A
18
+ area_B = prob_B_given_A * prior_A + prob_B_given_notA * (1 - prior_A)
19
+ area_AB = prob_B_given_A * prior_A
 
 
 
 
20
 
21
+ fig, ax = plt.subplots()
22
+ venn = venn2(subsets=(area_A, area_B - area_AB, area_AB), set_labels=('A', 'B'), ax=ax)
23
+ ax.set_title('Diagrama de Venn de Eventos A y B')
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_venn = plot_venn(prior_A, prob_B_given_A, prob_B_given_notA)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
 
31
+ # Retornar el diagrama de Venn y los resultados
32
+ return fig_venn, f"P(B): {prob_B:.4f}", f"P(A|B): {posterior_A_given_B:.4f}"
33
 
34
  # Crear la interfaz de Gradio
35
  with gr.Blocks() as demo:
36
  with gr.Tab("Dos Eventos"):
37
+ gr.Markdown("## Calculadora del Teorema de Bayes con Diagrama de Venn")
38
  gr.Markdown("Ajusta los valores de probabilidad para calcular la probabilidad de A dado B (P(A|B)).")
39
+
40
  prior_A = gr.Slider(0, 1, step=0.01, label="Probabilidad Inicial de A (P(A))", value=0.5)
41
  prob_B_given_A = gr.Slider(0, 1, step=0.01, label="Probabilidad de B dado A (P(B|A))", value=0.7)
42
  prob_B_given_notA = gr.Slider(0, 1, step=0.01, label="Probabilidad de B dado que no ocurre A (P(B|卢A))", value=0.2)
43
+
44
+ venn_plot = gr.Plot()
45
  prob_B = gr.Textbox(label="Probabilidad de B (P(B))")
46
  prob_A_given_B = gr.Textbox(label="Probabilidad de A dado B (P(A|B))")
 
 
 
47
 
48
+ btn = gr.Button("Calcular")
49
+ btn.click(fn=bayes_app_two_events, inputs=[prior_A, prob_B_given_A, prob_B_given_notA], outputs=[venn_plot, prob_B, prob_A_given_B])
 
 
 
 
 
 
 
 
 
 
 
50
 
51
  demo.launch()