Viterbi动态规划算法

参考文章https://www.zhihu.com/question/20136144


  我们以上图为例讲解从阶段1到阶段3的最短路径。首先如果按照贪婪算法,我们一共需要计算3×3×3=273\times3\times3=273×3×3=27次,而使用Viterbi动态规划算法,我们只需要计算3×3×2=183\times3\times2=183×3×2=18次
  Viterbi的最主要核心点为计算并仅保留到达当前节点的最短路径,只要理解这个理论,维特比动态规划算法就一点都不难了。以A2A_2A2​为例,当我们处在A2A_2A2​时,可以到达A2A_2A2​的路径一共有3条:[A1−A2,B1−A2,C1−A2][A_1-A_2,B_1-A_2,C_1-A_2][A1​−A2​,B1​−A2​,C1​−A2​],当我们第三层中的路径经过A2A_2A2​时,最短的路径一定是到达A2A_2A2​的最短路径,因此可以不用计算到达A2A_2A2​的其他路径,因此大大的减少了计算量。
根据上述理论,我们可以用python写一个demo:

import numpy as npdef viterbi(nodes):# loglikelihoodpaths = {'A': np.log(nodes[0]['A']), 'B':np.log(nodes[0]['B']), 'C':np.log(nodes[0]['C'])}for l in range(1, len(nodes)):# 拷贝当前路径paths_ = paths.copy()paths = {}for i in nodes[l].keys():nows = {}# 计算到达节点i的所有路径for j in paths_.keys():nows[j+i] = paths_[j]+np.log(nodes[l][i])# 对节点i选择最优路径k = np.argmax(list(nows.values()))# 保存到达节点i的最优路径paths[list(nows.keys())[k]] = list(nows.values())[k]return list(paths.keys())[np.argmax(list(paths.values()))], np.max(list(paths.values()))nodes = [{'A':0.1, 'B':0.3, 'C':0.6}, {'A':0.2, 'B':0.4, 'C':0.4}, {'A':0.6, 'B':0.2, 'C':0.2}]
print(viterbi(nodes))

最终的输出结果为CBA

深入浅出Viterbi算法与python实现相关推荐

  1. viterbi 算法与python实现

    Viterbi算法 (部分内容转自知乎:<如何通俗地讲解 viterbi 算法?>) 1.问题描述 如下如所示,如何快速找到从 S 到 E 的最短路径? 一:遍历穷举法,可行,但速度太慢: ...

  2. viterbi算法实例及python实现

    Python中hmmlearn给出了三种HMM模型:MultiomialHMM,GaussianHMM,GMMHMM.本文以MultiomialHMM为例,使用<从机器学习到深度学习>中第 ...

  3. 隐马尔科夫模型 Viterbi算法 Python实现

    已知初始状态概率向量 pi,状态转移概率矩阵 P,发射概率矩阵 B,求观察序列为 O 的条件下状态序列为 Q 的概率.代码如下: def HMM_ProCond(pi, P, B, Q, O):Q, ...

  4. BiLSTM, CRF,BiLSTM+CRF原理讲解以及viterbi算法python实现

    目录 1 训练数据 2 模型结构 2.1 BiLSTM 2.1.1 结构 2.1.2 预测 2.1.3 缺点 2.2 CRF 2.2.1 基础概念 2.2.2 如何计算特征函数 2.2.3 如何求解归 ...

  5. 隐马尔可夫HMM中viterbi算法

    引言 viterbi算法简化最有可能的天气序列的运算过程,forward算法简化该该观察值的概率. 问题描述 你在中国,你朋友F在美国,F的作息有walk, shop, clean,但这选择跟天气有关 ...

  6. 隐马尔可夫模型中的Viterbi算法zz

    隐马尔可夫模型中的Viterbi算法zz 这篇文章简单描述一下Viterbi算法--一年之前我听过它的名字,直到两周之前才花了一点时间研究了个皮毛,在这里做个简单检讨.先用一句话来简单描述一下:给出一 ...

  7. 隐马尔可夫模型(HMM)及Viterbi算法

    HMM简介 对于算法爱好者来说,隐马尔可夫模型的大名那是如雷贯耳.那么,这个模型到底长什么样?具体的原理又是什么呢?有什么具体的应用场景呢?本文将会解答这些疑惑. 本文将通过具体形象的例子来引入该模型 ...

  8. 【机器学习】隐马尔可夫模型及其三个基本问题(四)状态序列预测算法及python实现

    [机器学习]隐马尔可夫模型及其三个基本问题(四)状态序列预测算法及python实现 一.维特比算法 二.python实现 参考资料 隐马尔可夫模型状态序列预测问题是指给定模型 λ=[A,B,∏]\la ...

  9. 基于Hmm模型和Viterbi算法的中文分词和词性标注

    使用 python 实现基于Hmm模型和Viterbi算法的中文分词及词性标注:使用 最大概率算法 进行优化.最终效果:人民日报语料:分词(F1:96.189%):词性标注(F1:97.934%) 完 ...

最新文章

  1. 沃森世界研讨会前瞻:AI服务 了解客户情绪
  2. 谢尔盖.布林的早期思想_谷歌联合创始人谢尔盖·布林(Sergey Brin)谈人工智能与自动化...
  3. 如何看待179所高校新增 AI 本科专业,研究生扩招也瞄准 AI?
  4. 【恋爱通告】高清完整版迅雷下载! 首发
  5. 【Java】Java 语言的初步认识及工作应用范围
  6. pytorch的梯度计算以及backward方法
  7. 【深度学习】实战深度学习检测疟疾
  8. C#发送邮件的实现实例解析
  9. 【Linux】一步一步学Linux——unzip命令(68)
  10. 如何安装使用MQCache缓存服务器(适用X300型或者X500型)
  11. 四部门联合发文推动数学科学发展,释放支持高校建设基础数学中心信号!
  12. 区间数值计数(洛谷P1980题题解,Java语言描述)
  13. 数据结构之外部排序:失败树
  14. python玩转android_怎样用python玩安卓版跳一跳
  15. 计网学习第一章:概述
  16. a*算法的优缺点_垃圾回收的常见算法
  17. python性能分析工具模块_关于Python Profilers性能分析器
  18. android widget ViewFlipper
  19. 数据结构:最大子列和问题
  20. 第四届中国金融风云榜9月在深圳盛大揭晓

热门文章

  1. php网站后台登录背景,wordpress后台登录页面logo/链接/背景修改(自定义)
  2. 数理逻辑习题集(7)
  3. 用Python分析许嵩的歌,带你追忆青春时的懵懂
  4. 尚硅谷Java入门视频教程导读及第一章
  5. java开发之SSM开发框架
  6. c# 条码打印—电子监管码打印
  7. RTMP、HTTP-FLV、HLS三大直播协议
  8. 没有最好只有更好,本届云栖大会的无线网络如何创造奇迹?
  9. Objective-C中强项和弱项之间的差异
  10. Hyperledger Fabric区块链供应链金融实战1