首页 文章

HMMLearn:解压缩的值过多

提问于
浏览
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 (查看文档)返回日志概率和状态序列,所以我很困惑 .

任何的想法?

谢谢!

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])
    

    应该工作而不会抛出错误 . 另见here .

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

相关问题