0

假设我们有抛硬币实验的观察结果。在实验过程中,硬币在不知不觉中被改变了,我们想知道它是否真的被改变了。在这种情况下,隐马尔可夫模型的发射概率会告诉我们。玩具数据生成如下。

X = np.empty((0,1), int)
for i in range(0, 50):
    X = np.append(X, np.array([[np.random.binomial(1, p=0.7)]]), axis=0)

for i in range(0, 50):
    X = np.append(X, np.array([[np.random.binomial(1, p=0.0)]]), axis=0)

我可以从 hmmlearn 获得发射概率,如下所示。

from hmmlearn import hmm
model = hmm.MultinomialHMM(n_components=2) # 2: Coin might be changed once. Assume we know that.
model.fit(X)
L,Z = model.decode(X)
print(model.emissionprob_)

>[[9.99999951e-01 4.94722457e-08]
 [1.87402740e-01 8.12597260e-01]]

显然,我们可以看到这个排放概率改变了机会。我想在石榴中通过 HiddenMarkovModel 做同样的事情。我试图知道得到它,如下所示,但返回的排放概率是 nan。

from pomegranate import *
model = HiddenMarkovModel.from_samples(NormalDistribution, n_components=2, X=X)
trans, ems = model.forward_backward(X)
print(ems)
>[[nan nan]
 [nan nan]
   : hundreds of them
 [nan nan]
 [nan nan]]

我想知道如何做到这一点。如果有人知道,请给我一些线索。谢谢,

4

0 回答 0