PyMC3 变量依赖于另一个结果
PyMC3 variable dependent on result of another
我是第一次实施 MCMC 模拟,我有一个根据前一个变量的结果定义的变量。例如,如果我的伯努利变量 returns 为 0,则输入确定性变量的值将不同于 returns 为 1.
的值
with pm.Model() as model:
x = pm.Bernoulli('x', .5)
if x == 1:
y = 1
elif x == 0:
y = 2
z = pm.Deterministic('z', y * 1000)
我的问题是这些 if 语句都不会被输入,因为 x 不是整数,它是一个分布。有没有办法得到x的采样值?还是我只是想错了?
你是对的,你应该使用Theano的功能switch
with pm.Model() as model:
x = pm.Bernoulli('x', .5)
y = pm.math.switch(x, 1, 0)
z = pm.Deterministic('z', y * 1000)
或者更冗长一点
with pm.Model() as model:
x = pm.Bernoulli('x', .5)
y = pm.math.switch(pm.math.eq(x, 1), 1, 0)
z = pm.Deterministic('z', y * 1000)
switch
计算第一个参数,如果为真 returns 第二个参数,否则第三个。
如果你有两个以上的条件,你也可以使用多个switch
。
with pm.Model() as model:
x = pm.DiscreteUniform('x', 0, 2)
y_ = pm.math.switch(pm.math.eq(x, 1), 1, 0)
y = pm.math.switch(pm.math.eq(x, 2), 2, y_)
z = pm.Deterministic('z', y * 1000)
我是第一次实施 MCMC 模拟,我有一个根据前一个变量的结果定义的变量。例如,如果我的伯努利变量 returns 为 0,则输入确定性变量的值将不同于 returns 为 1.
的值with pm.Model() as model:
x = pm.Bernoulli('x', .5)
if x == 1:
y = 1
elif x == 0:
y = 2
z = pm.Deterministic('z', y * 1000)
我的问题是这些 if 语句都不会被输入,因为 x 不是整数,它是一个分布。有没有办法得到x的采样值?还是我只是想错了?
你是对的,你应该使用Theano的功能switch
with pm.Model() as model:
x = pm.Bernoulli('x', .5)
y = pm.math.switch(x, 1, 0)
z = pm.Deterministic('z', y * 1000)
或者更冗长一点
with pm.Model() as model:
x = pm.Bernoulli('x', .5)
y = pm.math.switch(pm.math.eq(x, 1), 1, 0)
z = pm.Deterministic('z', y * 1000)
switch
计算第一个参数,如果为真 returns 第二个参数,否则第三个。
如果你有两个以上的条件,你也可以使用多个switch
。
with pm.Model() as model:
x = pm.DiscreteUniform('x', 0, 2)
y_ = pm.math.switch(pm.math.eq(x, 1), 1, 0)
y = pm.math.switch(pm.math.eq(x, 2), 2, y_)
z = pm.Deterministic('z', y * 1000)