is_observed=True) labels = EmpiricalVariable(output_labels, indices=minibatch_indices, name="labels", is_observed=True) weights = NormalVariable(np.zeros((1, number_regressors)), 0.5 * np.ones( (1, number_regressors)), "weights") logit_p = BF.matmul(weights, x) k = BinomialVariable(1, logit_p=logit_p, name="k") model = ProbabilisticModel([k]) #samples = model._get_sample(300) #model.calculate_log_probability(samples) # Observations k.observe(labels) #observed_model = inference.get_observed_model(model) #observed_samples = observed_model._get_sample(number_samples=1, observed=True) # Variational Model Qweights = NormalVariable(np.zeros((1, number_regressors)), np.ones((1, number_regressors)), "weights", learnable=True) model.set_posterior_model(ProbabilisticModel([Qweights])) # Inference inference.perform_inference(model, number_iterations=200, number_samples=100,
from brancher.standard_variables import BetaVariable, BinomialVariable from brancher import inference from brancher.visualizations import plot_posterior # betaNormal/Binomial model number_tosses = 1 p = BetaVariable(1., 1., "p") k = BinomialVariable(number_tosses, probs=p, name="k") model = ProbabilisticModel([k, p]) # Generate data p_real = 0.8 data = model.get_sample(number_samples=30, input_values={p: p_real}) # Observe data k.observe(data) # Inference inference.perform_inference(model, number_iterations=1000, number_samples=500, lr=0.1, optimizer='SGD') loss_list = model.diagnostics["loss curve"] #Plot loss plt.plot(loss_list) plt.title("Loss (negative ELBO)") plt.show() #Plot posterior
#Real model number_samples = 1 p_real = 0.8 k_real = BinomialVariable(number_samples, probs=p_real, name="k") # betaNormal/Binomial model p = BetaVariable(1., 1., "p") k = BinomialVariable(number_samples, probs=p, name="k") model = ProbabilisticModel([k]) # Generate data data = k_real._get_sample(number_samples=50) # Observe data k.observe(data[k_real][:, 0, :]) # Variational distribution Qp = BetaVariable(1., 1., "p", learnable=True) model.set_posterior_model(ProbabilisticModel([Qp])) # Inference inference.perform_inference(model, number_iterations=3000, number_samples=100, lr=0.01, optimizer='Adam') loss_list = model.diagnostics["loss curve"] # Statistics p_posterior_samples = model._get_posterior_sample(