HMM с полиномиальным распределением наблюдений - PullRequest
0 голосов
/ 18 октября 2019

Я пишу простой HMM с полиномиальными наблюдениями в TensorFlow-вероятность, но я не смог правильно получить наиболее вероятную последовательность скрытых состояний. posterior_mode всегда возвращает первое состояние (состояние 0) независимо от модели.

Приведенный ниже код иллюстрирует то, что я имею в виду, в тривиальном случае:

import numpy as np
import tensorflow as tf
import tensorflow_probability as tfp

tf.enable_eager_execution()
tfd = tfp.distributions

prior = tfd.Categorical(probs=[0.0, 0.0, 1.0])
transition = tfd.Categorical(probs=[[1.0, 0.0, 0.0],\
                                    [0.0, 1.0, 0.0],\
                                    [0.0, 0.0, 1.0]])
emission = tfd.Multinomial(total_count=[1,1,1],\
                            probs=[[1.0, 0.0, 0.0],\
                                   [0.0, 1.0, 0.0],\
                                   [0.0, 0.0, 1.0]])

trueModel = tfd.HiddenMarkovModel(initial_distribution=prior,
                                  transition_distribution=transition,
                                  observation_distribution=emission,
                                  num_steps=4)

sample=trueModel.sample().numpy()

print("SAMPLE:\n", sample)

print("\nMOST PROBABLE STATES:\n", trueModel.posterior_mode(sample).numpy())

Но этот код возвращает:

SAMPLE:
 [[0. 0. 1.]
 [0. 0. 1.]
 [0. 0. 1.]
 [0. 0. 1.]]

MOST PROBABLE STATES:
 [0 0 0 0]

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

Я что-то здесь упускаю или есть проблема с TF-вероятностью?

...