考虑到开始概率,转移概率和发射概率,我试图使用 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
(查看文档)返回日志概率和状态序列,所以我很困惑 .
任何的想法?
谢谢!
1 回答
调用
model.fit(seq)
需要seq
作为列表列表,正如您正确设置它一样 . 但是,model.decode(seq)
要求seq只是一个列表,而不是列表列表 . 从而,应该工作而不会抛出错误 . 另见here .
错误
ValueError: too many values to unpack (expected 2)
是由函数调用的函数抛出的函数...在decode
内 . 因此,错误并不意味着返回的decode
对象的数量是错误的,而是来自base.py
内某处的framelogprob.shape
. 更有意义的错误消息将使这里的生活更轻松 . 我有同样的问题,它让我发疯 . 希望我的帖子可以帮助别人 .