Esempio n. 1
0
# Probabilistic model
T = 2.
N = 100
dt = T/float(N)
time_range = np.linspace(0., T, N)
a = BetaVariable(1., 1., name="a")
b = BetaVariable(1., 1., name="b")
c = NormalVariable(0., 0.1, name="c")
d = NormalVariable(0., 0.1, name="d")
xi = LogNormalVariable(0.1, 0.1, name="xi")
chi = LogNormalVariable(0.1, 0.1, name="chi")
x_series = [NormalVariable(0., 1., name="x_0")]
y_series = [NormalVariable(0., 1., name="y_0")]
for n, t in enumerate(time_range):
    x_new_mean = (1-dt*a)*x_series[-1] + dt*c*y_series[-1]
    y_new_mean = (1-dt*b)*y_series[-1] + dt*d*x_series[-1]
    x_series += [NormalVariable(x_new_mean, np.sqrt(dt)*xi, name="x_{}".format(n+1))]
    y_series += [NormalVariable(x_new_mean, np.sqrt(dt)*chi, name="y_{}".format(n+1))]
dynamic_causal_model = ProbabilisticModel([x_series[-1], y_series[-1]])

# Run dynamics
sample = dynamic_causal_model.get_sample(number_samples=3)

# Observe
observable_data = sample[[x.name for x in x_series] + [y.name for y in y_series]]
dynamic_causal_model.observe(observable_data)

# Variational model

Esempio n. 2
0
assignment_matrix = [[1], [1], [1], [1], [1]]
people_means = [
    Normal(sum([l * m for l, m in zip(assignment_list, group_means)]), 0.1,
           "person_{}".format(m))
    for m, assignment_list in enumerate(assignment_matrix)
]
scores = [
    Normal(people_means[m], 0.1, "score_{}_{}".format(m, z))
    for m in range(N_people) for z in range(N_scores)
]
model = ProbabilisticModel(scores)

# Observations
sample = model.get_sample(1)
data = sample.filter(regex="^score").filter(regex="^((?!scale).)*$")
model.observe(data)

# Variational model
Qgroup_means = [
    Normal(0., 4., "group_mean_{}".format(n), learnable=True)
    for n in range(N_groups)
]
Qpeople_means = [
    Normal(0., 0.1, "person_{}".format(m), learnable=True)
    for m, assignment_list in enumerate(assignment_matrix)
]
model.set_posterior_model(ProbabilisticModel(Qpeople_means + Qgroup_means))

# Inference #
N_itr = 300
N_smpl = 50
                              dim=1,
                              keepdim=True),
                       dim=2,
                       keepdim=True)  #TODO; not very intuitive
response = NormalVariable(mean_response, nu, name="response")
model = ProbabilisticModel([response, experimental_input])

# Generate data and observe the model
sample = model.get_sample(15,
                          input_values={
                              mu_x: 1.,
                              mu_y: 2.,
                              v: 0.3,
                              nu: 0.1
                          })[["x", "y", "w1", "w2", "b", "response"]]
model.observe(sample)

# Variational model
Qmu_x = NormalVariable(0., 1., name="mu_x", learnable=True)
Qmu_y = NormalVariable(0., 1., name="mu_y", learnable=True)
Qv = LogNormalVariable(0., 0.1, name="v", learnable=True)
Qnu = LogNormalVariable(-1, 0.01, name="nu", learnable=True)
variational_posterior = ProbabilisticModel([Qmu_x, Qmu_y, Qv, Qnu])
model.set_posterior_model(variational_posterior)

# Inference #
inference.perform_inference(model,
                            number_iterations=1500,
                            number_samples=50,
                            optimizer='Adam',
                            lr=0.01)