【问题标题】:HMMLearn: Too Many Values to UnpackHMMLearn:太多的值无法解包
【发布时间】:2018-11-12 20:23:31
【问题描述】:

在给定开始概率、转移概率和发射概率的情况下,我正在尝试使用 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(查看文档)返回对数概率和状态序列,所以我很困惑。

有什么想法吗?

谢谢!

【问题讨论】:

    标签: python hmmlearn


    【解决方案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的返回对象数量有误,而是来自framelogprob.shapebase.py内部的某个地方。更有意义的错误消息会让这里的生活更轻松。 我有同样的问题,它让我发疯。希望我的帖子对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 2021-02-10
      • 2017-08-09
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多