0

hmmlearn在给定开始概率、转移概率和发射概率的情况下,我正在尝试从隐马尔可夫模型中获取最可能的隐藏状态序列。

我有两个隐藏状态和四个可能的发射值,所以我这样做:

num_states = 2
num_observations = 4
start_probs = np.array([0.2, 0.8])
trans_probs = np.array([[0.75, 0.25], [0.1, 0.9]])
emission_probs = np.array([[0.3, 0.2, 0.2, 0.3], [0.3, 0.3, 0.3, 0.1]])

model = hmm.MultinomialHMM(n_components=num_states)
model.startprob_ = start_probs
model.transmat_ = trans_probs
model.emissionprob_ = emission_probs

seq = np.array([[3, 3, 2, 2]]).T

model.fit(seq)
log_prob, state_seq = model.decode(seq)

我的堆栈跟踪指向decode调用并抛出此错误:

ValueError: too many values to unpack (expected 2)

我认为decode(查看文档)返回对数概率和状态序列,所以我很困惑。

任何想法?

谢谢!

4

1 回答 1

1

调用model.fit(seq)需要seq是列表列表,因为您正确设置它是这样的。但是,model.decode(seq)要求 seq 只是一个列表,而不是列表的列表。因此,

model.fit([[3, 3, 2, 2]])
log_prob, state_seq = model.decode([3, 3, 2, 2])

应该可以正常工作而不会引发错误。另请参见此处

该错误ValueError: too many values to unpack (expected 2)是从由函数调用的函数调用的函数引发的decode。因此,错误并不意味着返回的对象数量decode错误,而是framelogprob.shape来自base.py. 更有意义的错误消息会让这里的生活更轻松。我有同样的问题,它让我发疯。希望我的帖子对某人有所帮助。

于 2018-11-12T12:23:31.497 回答