hedtorresca commited on
Commit
dd8476a
verified
1 Parent(s): 41ec72f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +29 -26
app.py CHANGED
@@ -1,20 +1,16 @@
1
  import gradio as gr
2
  import numpy as np
3
  import matplotlib.pyplot as plt
4
- from matplotlib_venn import venn2
5
- from itertools import combinations
6
 
7
  # Funci贸n para calcular el teorema de Bayes con dos eventos
8
  def bayes_two_events(prior_A, prob_B_given_A, prob_B_given_notA):
9
- # Calculamos P(B) usando la regla de la probabilidad total
10
- prob_B = prob_B_given_A * prior_A + prob_B_given_notA * (1 - prior_A)
11
- # Calculamos P(A|B) usando el teorema de Bayes
12
- posterior_A_given_B = (prob_B_given_A * prior_A) / prob_B
13
  return posterior_A_given_B, prob_B
14
 
15
  # Funci贸n para crear el diagrama de Venn para dos eventos
16
  def plot_venn(prior_A, prob_B_given_A, prob_B_given_notA):
17
- # Calculamos las 谩reas relativas del diagrama de Venn
18
  area_A = prior_A
19
  area_B = prob_B_given_A * prior_A + prob_B_given_notA * (1 - prior_A)
20
  area_AB = prob_B_given_A * prior_A
@@ -31,35 +27,42 @@ def plot_venn(prior_A, prob_B_given_A, prob_B_given_notA):
31
  def bayes_app_two_events(prior_A, prob_B_given_A, prob_B_given_notA):
32
  posterior_A_given_B, prob_B = bayes_two_events(prior_A, prob_B_given_A, prob_B_given_notA)
33
  fig_venn = plot_venn(prior_A, prob_B_given_A, prob_B_given_notA)
34
-
35
- # Retornar el diagrama de Venn y los resultados
36
  return fig_venn, f"P(B): {prob_B:.4f}", f"P(A|B): {posterior_A_given_B:.4f}"
37
 
38
  # Funci贸n para m煤ltiples eventos
39
  def bayes_multiple_events(priors, likelihoods):
40
  priors = np.array(priors)
41
  likelihoods = np.array(likelihoods)
42
-
43
- # Calculamos P(B) usando la regla de la probabilidad total
44
- prob_B = np.sum(priors * likelihoods)
45
-
46
- # Calculamos las probabilidades posteriores P(Ai|B) para cada evento Ai
47
- posteriors = (priors * likelihoods) / prob_B
48
  return posteriors, prob_B
49
 
50
- # Funci贸n para crear gr谩ficos de particiones de conjuntos para m煤ltiples eventos
51
  def plot_sets_multiple_events(priors, likelihoods, posteriors):
52
- events = [f'A{i+1}' for i in range(len(priors))]
53
 
54
- fig, ax = plt.subplots(figsize=(6, 4))
55
- for i, (prior, likelihood, posterior) in enumerate(zip(priors, likelihoods, posteriors)):
56
- ax.barh(events[i], width=posterior, color='purple', alpha=0.6, label=f'P(A{i+1}|B) = {posterior:.2f}')
57
- ax.text(posterior, i, f'P(A{i+1}|B) = {posterior:.2f}', va='center')
58
-
59
- ax.set_xlabel('Probabilidad Posterior')
60
- ax.set_title('Resultados del Teorema de Bayes para M煤ltiples Eventos')
61
- ax.legend(loc='upper right')
62
- return fig
 
 
 
 
 
 
 
 
 
 
 
 
 
63
 
64
  # Funci贸n principal para m煤ltiples eventos
65
  def bayes_app_multiple_events(priors, likelihoods):
 
1
  import gradio as gr
2
  import numpy as np
3
  import matplotlib.pyplot as plt
4
+ from matplotlib_venn import venn2, venn3
 
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):
8
+ prob_B = prob_B_given_A * prior_A + prob_B_given_notA * (1 - prior_A) # Calculamos P(B)
9
+ posterior_A_given_B = (prob_B_given_A * prior_A) / prob_B # Calculamos P(A|B)
 
 
10
  return posterior_A_given_B, prob_B
11
 
12
  # Funci贸n para crear el diagrama de Venn para dos eventos
13
  def plot_venn(prior_A, prob_B_given_A, prob_B_given_notA):
 
14
  area_A = prior_A
15
  area_B = prob_B_given_A * prior_A + prob_B_given_notA * (1 - prior_A)
16
  area_AB = prob_B_given_A * prior_A
 
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):
34
  priors = np.array(priors)
35
  likelihoods = np.array(likelihoods)
36
+ prob_B = np.sum(priors * likelihoods) # Calculamos P(B)
37
+ posteriors = (priors * likelihoods) / prob_B # Calculamos las probabilidades posteriores P(Ai|B) para cada evento Ai
 
 
 
 
38
  return posteriors, prob_B
39
 
40
+ # Funci贸n para crear diagramas de Venn o gr谩ficos de partici贸n para m煤ltiples eventos
41
  def plot_sets_multiple_events(priors, likelihoods, posteriors):
42
+ num_events = len(priors)
43
 
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
+
58
+ else:
59
+ # Gr谩fico de partici贸n para m谩s de 3 eventos
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
66
 
67
  # Funci贸n principal para m煤ltiples eventos
68
  def bayes_app_multiple_events(priors, likelihoods):