假设我们有抛硬币实验的观察结果。在实验过程中,硬币在不知不觉中被改变了,我们想知道它是否真的被改变了。在这种情况下,隐马尔可夫模型的发射概率会告诉我们。玩具数据生成如下。
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]]
我想知道如何做到这一点。如果有人知道,请给我一些线索。谢谢,