Как делать смешанную выборку в TensorFlow - PullRequest
0 голосов
/ 05 мая 2020

Я реализую сложный алгоритм выборки с использованием пакета MCM C TensorFlow Probability. Скажем, я использую выборку Гиббса для одного компонента, гамильтониан Монте-Карло для другого и, наконец, Random Walk Metropolis. Например, предположим, что у нас есть совместная вероятность:

p(X|a, b)p(b|c, d)p(c)p(d)p(a).

Моя пользовательская итерация выборки примерно равна:


def one_iteration():
   # Sampling `a`: 
   # part of joint density: p(X|a, b)p(a)
   # ...using some custom Gibbs sampler

   # Sampling `b`:
   # part of joint density: p(X|a, b)p(b|c, d)

   def log_prob(b):
      return p(X|a, b).log_prob() + p(b|c, d).log_prob(b)

   hmc = tfp.mcmc.HamiltonianMonteCarlo(
      log_prob, step_size=0.1, num_leapfrog_steps=3)
   samples, is_accepted = tfp.mcmc.sample_chain(
      num_results=1,
      num_burnin_steps=0,
      current_state=b,
      kernel=hmc)

   # Sampling `c`:
   # part of joint density: p(b|c, d)p(c)

   def log_prob(c):
      return p(b|c, d).log_prob() + p(c).log_prob(c)

   rwm = tfp.mcmc.RandomWalkMetropolis(log_prob)
   samples, is_accepted = tfp.mcmc.sample_chain(
      num_results=1,
      num_burnin_steps=0,
      current_state=c,
      kernel=rwm)

А затем запустить это с помощью:

for i in range(T):
   one_iteration()

Это правильный метод смешанной выборки? т.е. вызов sample_chain каждой итерации для каждого алгоритма выборки компонентов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...