Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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:.
|
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:.
|
76 |
-
return fig, f"P(B): {prob_B:.
|
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.")
|