我正在用 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 概率有问题?