我正在尝试使用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 (查看文档)返回一个对数概率和状态序列,所以我很困惑。
有什么想法吗?
谢谢!
发布于 2018-11-12 20:23:31
call 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返回的错误。更有意义的错误消息会让这里的工作更轻松。我也有同样的问题,这让我抓狂。希望我的帖子能帮助到一些人。
https://stackoverflow.com/questions/49991892
复制相似问题