Madhav commited on
Commit
38b7e74
·
1 Parent(s): 5230808

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +42 -48
app.py CHANGED
@@ -7,6 +7,7 @@ from numpyro.infer import MCMC, NUTS
7
  from sklearn.datasets import make_regression
8
  from jax import random
9
  import streamlit as st
 
10
 
11
 
12
  # Define the model
@@ -22,7 +23,7 @@ def run_linear_regression(X, y, alpha_prior, beta_prior, sigma_prior):
22
  # Run MCMC
23
  rng_key = random.PRNGKey(0)
24
  nuts_kernel = NUTS(linear_regression)
25
- mcmc = MCMC(nuts_kernel, num_warmup=100, num_samples=600)
26
  mcmc.run(rng_key, jnp.array(X), jnp.array(y), alpha_prior=alpha_prior, beta_prior=beta_prior, sigma_prior=sigma_prior)
27
 
28
  mcmc.print_summary()
@@ -42,56 +43,49 @@ def run_linear_regression(X, y, alpha_prior, beta_prior, sigma_prior):
42
  ax.legend(loc='upper left')
43
  st.pyplot(fig)
44
 
45
-
46
  # User Input
47
- st.write("# Bayesian Linear Regression with numpyro")
48
- alpha_prior_option = st.selectbox("Choose an option for alpha prior:", ["Normal", "Laplace", "Cauchy"])
49
- beta_prior_option = st.selectbox("Choose an option for beta prior:", ["Normal", "Laplace", "Cauchy"])
50
- sigma_prior_option = st.selectbox("Choose an option for sigma prior:", ["HalfNormal", "HalfCauchy"])
51
 
52
- if st.button("Run Regression"):
53
- alpha_prior = None
54
- beta_prior = None
55
- sigma_prior = None
56
-
57
- if alpha_prior_option == "Normal":
58
- alpha_loc = st.slider("Select a mean value for alpha", -10.0, 10.0, 0.0, 0.1)
59
- alpha_scale = st.slider("Select a standard deviation value for alpha", 0.0, 10.0, 1.0, 0.1)
60
- alpha_prior = dist.Normal(alpha_loc, alpha_scale)
61
- elif alpha_prior_option == "Laplace":
62
- alpha_loc = st.slider("Select a mean value for alpha", -10.0, 10.0, 0.0, 0.1)
63
- alpha_scale = st.slider("Select a scale value for alpha", 0.0, 10.0, 1.0, 0.1)
64
- alpha_prior = dist.Laplace(alpha_loc, alpha_scale)
65
- elif alpha_prior_option == "Cauchy":
66
- alpha_loc = st.slider("Select a location value for alpha", -10.0, 10.0, 0.0, 0.1)
67
- alpha_scale = st.slider("Select a scale value for alpha", 0.0, 10.0, 1.0, 0.1)
68
- alpha_prior = dist.Cauchy(alpha_loc, alpha_scale)
69
 
70
- if beta_prior_option == "Normal":
71
- beta_loc = st.slider("Select a mean value for beta", -10.0, 10.0, 0.0, 0.1)
72
- beta_scale = st.slider("Select a standard deviation value for beta", 0.0, 10.0, 1.0, 0.1)
73
- beta_prior = dist.Normal(beta_loc, beta_scale)
74
- elif beta_prior_option == "Laplace":
75
- beta_loc = st.slider("Select a mean value for beta", -10.0, 10.0, 0.0, 0.1)
76
- beta_scale = st.slider("Select a scale value for beta", 0.0, 10.0, 1.0, 0.1)
77
- beta_prior = dist.Laplace(beta_loc, beta_scale)
78
- elif beta_prior_option == "Cauchy":
79
- beta_loc = st.slider("Select a location value for beta", -10.0, 10.0, 0.0, 0.1)
80
- beta_scale = st.slider("Select a scale value for beta", 0.0, 10.0, 1.0, 0.1)
81
- beta_prior = dist.Cauchy(beta_loc, beta_scale)
 
82
 
83
- if sigma_prior_option == "HalfNormal":
84
- sigma_scale = st.slider("Select a scale value for sigma", 0.0, 10.0, 1.0, 0.1)
85
- sigma_prior = dist.HalfNormal(sigma_scale)
86
- elif sigma_prior_option == "HalfCauchy":
87
- sigma_scale = st.slider("Select a scale value for sigma", 0.0, 10.0, 1.0, 0.1)
88
- sigma_prior = dist.HalfCauchy(sigma_scale)
 
89
 
90
- # Generate data
91
- rng_key = random.PRNGKey(0)
92
- X, y = make_regression(n_samples=25, n_features=1, noise=10.0, random_state=0)
93
- X = X.reshape(25)
94
 
95
- # Run the regression
96
- run_linear_regression(X, y, alpha_prior, beta_prior, sigma_prior)
97
-
 
7
  from sklearn.datasets import make_regression
8
  from jax import random
9
  import streamlit as st
10
+ import sympy as sp
11
 
12
 
13
  # Define the model
 
23
  # Run MCMC
24
  rng_key = random.PRNGKey(0)
25
  nuts_kernel = NUTS(linear_regression)
26
+ mcmc = MCMC(nuts_kernel, num_warmup=50, num_samples=1000)
27
  mcmc.run(rng_key, jnp.array(X), jnp.array(y), alpha_prior=alpha_prior, beta_prior=beta_prior, sigma_prior=sigma_prior)
28
 
29
  mcmc.print_summary()
 
43
  ax.legend(loc='upper left')
44
  st.pyplot(fig)
45
 
 
46
  # User Input
47
+ st.write("# Bayesian Linear Regression")
 
 
 
48
 
49
+ st.write(f"### Y = \u03B1 + \u03B2X + \u03C3")
50
+ alpha_prior_option = st.selectbox("Choose an option for alpha prior:", ["Normal", "Laplace", "Cauchy"])
51
+ if alpha_prior_option == "Normal":
52
+ alpha_loc = st.slider("Select a mean value for alpha", -10.0, 10.0, 0.0, 0.1)
53
+ alpha_scale = st.slider("Select a standard deviation value for alpha", 0.0, 10.0, 1.0, 0.1)
54
+ alpha_prior = dist.Normal(alpha_loc, alpha_scale)
55
+ elif alpha_prior_option == "Laplace":
56
+ alpha_loc = st.slider("Select a mean value for alpha", -10.0, 10.0, 0.0, 0.1)
57
+ alpha_scale = st.slider("Select a scale value for alpha", 0.0, 10.0, 1.0, 0.1)
58
+ alpha_prior = dist.Laplace(alpha_loc, alpha_scale)
59
+ elif alpha_prior_option == "Cauchy":
60
+ alpha_loc = st.slider("Select a location value for alpha", -10.0, 10.0, 0.0, 0.1)
61
+ alpha_scale = st.slider("Select a scale value for alpha", 0.0, 10.0, 1.0, 0.1)
62
+ alpha_prior = dist.Cauchy(alpha_loc, alpha_scale)
 
 
 
63
 
64
+ beta_prior_option = st.selectbox("Choose an option for beta prior:", ["Normal", "Laplace", "Cauchy"])
65
+ if beta_prior_option == "Normal":
66
+ beta_loc = st.slider("Select a mean value for beta", -10.0, 10.0, 0.0, 0.1)
67
+ beta_scale = st.slider("Select a standard deviation value for beta", 0.0, 10.0, 1.0, 0.1)
68
+ beta_prior = dist.Normal(beta_loc, beta_scale)
69
+ elif beta_prior_option == "Laplace":
70
+ beta_loc = st.slider("Select a mean value for beta", -10.0, 10.0, 0.0, 0.1)
71
+ beta_scale = st.slider("Select a scale value for beta", 0.0, 10.0, 1.0, 0.1)
72
+ beta_prior = dist.Laplace(beta_loc, beta_scale)
73
+ elif beta_prior_option == "Cauchy":
74
+ beta_loc = st.slider("Select a location value for beta", -10.0, 10.0, 0.0, 0.1)
75
+ beta_scale = st.slider("Select a scale value for beta", 0.0, 10.0, 1.0, 0.1)
76
+ beta_prior = dist.Cauchy(beta_loc, beta_scale)
77
 
78
+ sigma_prior_option = st.selectbox("Choose an option for sigma prior:", ["HalfNormal", "HalfCauchy"])
79
+ if sigma_prior_option == "HalfNormal":
80
+ sigma_scale = st.slider("Select a scale value for sigma", 0.0, 10.0, 1.0, 0.1)
81
+ sigma_prior = dist.HalfNormal(sigma_scale)
82
+ elif sigma_prior_option == "HalfCauchy":
83
+ sigma_scale = st.slider("Select a scale value for sigma", 0.0, 10.0, 1.0, 0.1)
84
+ sigma_prior = dist.HalfCauchy(sigma_scale)
85
 
86
+ rng_key = random.PRNGKey(0)
87
+ X, y = make_regression(n_samples=50, n_features=1, noise=10.0, random_state=0)
88
+ X = X.reshape(50)
 
89
 
90
+ if alpha_prior and beta_prior and sigma_prior:
91
+ run_linear_regression(X, y, alpha_prior, beta_prior, sigma_prior)