建议实现前 N 个可能状态序列的类维特比算法

数据挖掘 算法 图表 马尔科夫过程 顺序 图形模型
2021-10-12 20:00:43

传统的维特比算法(例如,对于隐马尔可夫模型)在给定观察序列的情况下提供最可能的隐藏状态序列。

可能有一种算法用于解码前 N 个可能的隐藏状态序列(k 最短路径等)。

但是在任何地方都有一个好的实现吗?

谢谢。

UPD(从评论复制粘贴):维特比算法解码给定观察+模型的最可能序列。即 argmax_x p(state_1,...,state_n|obs_1,...,obs_n)。我要的是一种实现如何在给定观察到的序列的情况下以可能略小的概率获得“下一个 argmax-es”。

1个回答

显然,我误解了你的问题。

有几种方法可以使用 Viterbi 算法的扩展版本找到 k 最佳路径。

我的第一个建议是在 SO 上查看与您的类似的这个问题,并且有一个很好的图解答案。

然后,我会向您推荐两篇公开的文章/论文,并且可以从中扩展他/她的研究。(免责声明:这些参考文献可能不是“最好的”参考文献,但我选择它们是因为它们是公开的,并且提供了大量参考资料以加深对该主题的研究)

  • 隐马尔可夫模型中的 k-best 路径。跨膜蛋白拓扑识别的算法和应用。戈洛德的论文,可在此处获得。(这样的论文提供了无数关于该主题的参考资料)

  • 使用 k 最佳路径解码 HMM:Brown 和 Dolog 的算法和应用程序,可在此处获得(您将在上述论文中找到的部分简短版本)


我之前的回答:

对于任何遇到这个问题的人来说,寻找一种计算 HMM 的一些典型状态序列的方法(正如我首先想到的那样),只要知道这种没有指定数据的最可能序列的概念并不是真正使用的东西据我所知,在任何关于 HMM 的理论中。但是,可以按照以下步骤操作:

作为第一次尝试,我会实现这样的事情:

获取时间状态 =0

绘制初始状态 s0 从初始状态概率质量函数 (pmf)

获取时间状态 +1

绘制新状态 s1 从定义的 pmf s0- 转移矩阵的第 行

根据需要多次重复此步骤以绘制状态 sñ

然后你可以重复整个过程 X 次以获得尽可能多的示例路径。

这是非常快速且易于实施的,它将为您提供您想要的。许多语言的许多科学库都有一个内置函数,用于从 pmf 中抽取随机样本。