有没有一种简单的方法可以从张量流概率的联合分布中“观察”证据和样本?例如,在 PyMC3 中,Distribution
该类observed
在其构造函数中具有参数,因此可以轻松地以证据为条件(并运行 MCMC 以获取后验样本)。
有一些与爱德华有关的文档,但对于简单的情况,我无法弄清楚,例如:
import tensorflow_probability.python.distributions as tfd
import tensorflow as tf
jdn = tfd.JointDistributionNamed(dict(
dist_x=tfd.Categorical([0.2, 0.8], validate_args=True),
dist_y=lambda dist_x: tfd.Categorical(probs=tf.gather([[0.1, 0.9],
[0.5, 0.5]], indices=dist_x))
))
# sample from joint
print(jdn.sample(100, seed=1234))
# now "observe" some variables
observed_variable = jdn.model.get('dist_x')
assert isinstance(observed_variable, tfd.Distribution)
observed_variable.?
这可能是具有两个二元变量 X 和 Y 的最简单的贝叶斯网络。目标是为 X 或 Y 设置证据并从后验中采样以估计概率。
(显然,可以通过先无条件抽样然后丢弃与证据不一致的样本来使用拒绝抽样,但这会相当低效。)