具有多项式观察分布的HMM

时间:2019-10-18 16:30:29

标签: python tensorflow tensorflow-probability

我正在用TensorFlow概率编写具有多项式观察的简单HMM,但是我无法正确获得最可能的隐藏状态序列。 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概率有问题?

0 个答案:

没有答案