Есть ли простой способ "наблюдать" свидетельство и выборку из совместного распределения с вероятностью тензора? Например, в 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 и произвести выборку сзади для оценки вероятностей.
(Очевидно, что можно использовать выборку отбраковки, сначала отбирая образцы без условий, а затем выбрасывая образцы, не согласующиеся с данными, но это будет довольно неэффективно.)