hedtorresca commited on
Commit
fd5d540
·
verified ·
1 Parent(s): dd8476a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -5
app.py CHANGED
@@ -27,7 +27,7 @@ def plot_venn(prior_A, prob_B_given_A, prob_B_given_notA):
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
- return fig_venn, f"P(B): {prob_B:.4f}", f"P(A|B): {posterior_A_given_B:.4f}"
31
 
32
  # Función para múltiples eventos
33
  def bayes_multiple_events(priors, likelihoods):
@@ -44,14 +44,24 @@ def plot_sets_multiple_events(priors, likelihoods, posteriors):
44
  if num_events == 2:
45
  # Diagrama de Venn para 2 eventos
46
  fig, ax = plt.subplots()
47
- venn = venn2(subsets=(priors[0], priors[1], likelihoods[0] * priors[0]), set_labels=('A1', 'A2'), ax=ax)
 
 
 
48
  ax.set_title('Diagrama de Venn para 2 Eventos')
49
  return fig
50
 
51
  elif num_events == 3:
52
  # Diagrama de Venn para 3 eventos
53
  fig, ax = plt.subplots()
54
- venn = venn3(subsets=(priors[0], priors[1], likelihoods[0] * priors[0], priors[2], likelihoods[1] * priors[1], likelihoods[2] * priors[2], likelihoods[0] * likelihoods[1] * priors[0]), set_labels=('A1', 'A2', 'A3'), ax=ax)
 
 
 
 
 
 
 
55
  ax.set_title('Diagrama de Venn para 3 Eventos')
56
  return fig
57
 
@@ -60,6 +70,8 @@ def plot_sets_multiple_events(priors, likelihoods, posteriors):
60
  events = [f'A{i+1}' for i in range(num_events)]
61
  fig, ax = plt.subplots()
62
  ax.bar(events, posteriors, color='purple')
 
 
63
  ax.set_ylabel('Probabilidad Posterior')
64
  ax.set_title('Resultados del Teorema de Bayes para Múltiples Eventos')
65
  return fig
@@ -72,8 +84,8 @@ def bayes_app_multiple_events(priors, likelihoods):
72
  posteriors, prob_B = bayes_multiple_events(priors, likelihoods)
73
  fig = plot_sets_multiple_events(priors, likelihoods, posteriors)
74
 
75
- resultados = "\n".join([f"P(A{i+1}|B): {posterior:.4f}" for i, posterior in enumerate(posteriors)])
76
- return fig, f"P(B): {prob_B:.4f}", resultados
77
 
78
  # Crear la interfaz de Gradio con dos pestañas
79
  with gr.Blocks() as demo:
@@ -92,6 +104,7 @@ with gr.Blocks() as demo:
92
  btn = gr.Button("Calcular")
93
  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])
94
 
 
95
  with gr.Tab("Múltiples Eventos"):
96
  gr.Markdown("## Calculadora del Teorema de Bayes para Múltiples Eventos")
97
  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.")
 
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
+ return fig_venn, f"P(B): {prob_B:.2f}", f"P(A|B): {posterior_A_given_B:.2f}"
31
 
32
  # Función para múltiples eventos
33
  def bayes_multiple_events(priors, likelihoods):
 
44
  if num_events == 2:
45
  # Diagrama de Venn para 2 eventos
46
  fig, ax = plt.subplots()
47
+ venn = venn2(subsets=(priors[0], priors[1], likelihoods[0] * priors[0]), set_labels=('Evento A1', 'Evento A2'), ax=ax)
48
+ venn.get_label_by_id('10').set_text(f'P(A1) = {priors[0]:.2f}')
49
+ venn.get_label_by_id('01').set_text(f'P(A2) = {priors[1]:.2f}')
50
+ venn.get_label_by_id('11').set_text(f'P(B|A1) = {likelihoods[0]:.2f}')
51
  ax.set_title('Diagrama de Venn para 2 Eventos')
52
  return fig
53
 
54
  elif num_events == 3:
55
  # Diagrama de Venn para 3 eventos
56
  fig, ax = plt.subplots()
57
+ venn = venn3(subsets=(priors[0], priors[1], likelihoods[0] * priors[0], priors[2], likelihoods[1] * priors[1], likelihoods[2] * priors[2], likelihoods[0] * likelihoods[1] * priors[0]), set_labels=('Evento A1', 'Evento A2', 'Evento A3'), ax=ax)
58
+ venn.get_label_by_id('100').set_text(f'P(A1) = {priors[0]:.2f}')
59
+ venn.get_label_by_id('010').set_text(f'P(A2) = {priors[1]:.2f}')
60
+ venn.get_label_by_id('001').set_text(f'P(A3) = {priors[2]:.2f}')
61
+ venn.get_label_by_id('110').set_text(f'P(B|A1 ∩ A2) = {likelihoods[0] * likelihoods[1]:.2f}')
62
+ venn.get_label_by_id('011').set_text(f'P(B|A2 ∩ A3) = {likelihoods[1] * likelihoods[2]:.2f}')
63
+ venn.get_label_by_id('101').set_text(f'P(B|A1 ∩ A3) = {likelihoods[0] * likelihoods[2]:.2f}')
64
+ venn.get_label_by_id('111').set_text(f'P(B|A1 ∩ A2 ∩ A3) = {likelihoods[0] * likelihoods[1] * likelihoods[2]:.2f}')
65
  ax.set_title('Diagrama de Venn para 3 Eventos')
66
  return fig
67
 
 
70
  events = [f'A{i+1}' for i in range(num_events)]
71
  fig, ax = plt.subplots()
72
  ax.bar(events, posteriors, color='purple')
73
+ for i, posterior in enumerate(posteriors):
74
+ ax.text(i, posterior / 2, f'P(A{i+1}|B) = {posterior:.2f}', ha='center', va='center', color='white')
75
  ax.set_ylabel('Probabilidad Posterior')
76
  ax.set_title('Resultados del Teorema de Bayes para Múltiples Eventos')
77
  return fig
 
84
  posteriors, prob_B = bayes_multiple_events(priors, likelihoods)
85
  fig = plot_sets_multiple_events(priors, likelihoods, posteriors)
86
 
87
+ resultados = "\n".join([f"P(A{i+1}|B): {posterior:.2f}" for i, posterior in enumerate(posteriors)])
88
+ return fig, f"P(B): {prob_B:.2f}", resultados
89
 
90
  # Crear la interfaz de Gradio con dos pestañas
91
  with gr.Blocks() as demo:
 
104
  btn = gr.Button("Calcular")
105
  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])
106
 
107
+
108
  with gr.Tab("Múltiples Eventos"):
109
  gr.Markdown("## Calculadora del Teorema de Bayes para Múltiples Eventos")
110
  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.")