深入浅出Viterbi算法与python实现
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实现相关推荐
- viterbi 算法与python实现
Viterbi算法 (部分内容转自知乎:<如何通俗地讲解 viterbi 算法?>) 1.问题描述 如下如所示,如何快速找到从 S 到 E 的最短路径? 一:遍历穷举法,可行,但速度太慢: ...
- viterbi算法实例及python实现
Python中hmmlearn给出了三种HMM模型:MultiomialHMM,GaussianHMM,GMMHMM.本文以MultiomialHMM为例,使用<从机器学习到深度学习>中第 ...
- 隐马尔科夫模型 Viterbi算法 Python实现
已知初始状态概率向量 pi,状态转移概率矩阵 P,发射概率矩阵 B,求观察序列为 O 的条件下状态序列为 Q 的概率.代码如下: def HMM_ProCond(pi, P, B, Q, O):Q, ...
- 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 如何求解归 ...
- 隐马尔可夫HMM中viterbi算法
引言 viterbi算法简化最有可能的天气序列的运算过程,forward算法简化该该观察值的概率. 问题描述 你在中国,你朋友F在美国,F的作息有walk, shop, clean,但这选择跟天气有关 ...
- 隐马尔可夫模型中的Viterbi算法zz
隐马尔可夫模型中的Viterbi算法zz 这篇文章简单描述一下Viterbi算法--一年之前我听过它的名字,直到两周之前才花了一点时间研究了个皮毛,在这里做个简单检讨.先用一句话来简单描述一下:给出一 ...
- 隐马尔可夫模型(HMM)及Viterbi算法
HMM简介 对于算法爱好者来说,隐马尔可夫模型的大名那是如雷贯耳.那么,这个模型到底长什么样?具体的原理又是什么呢?有什么具体的应用场景呢?本文将会解答这些疑惑. 本文将通过具体形象的例子来引入该模型 ...
- 【机器学习】隐马尔可夫模型及其三个基本问题(四)状态序列预测算法及python实现
[机器学习]隐马尔可夫模型及其三个基本问题(四)状态序列预测算法及python实现 一.维特比算法 二.python实现 参考资料 隐马尔可夫模型状态序列预测问题是指给定模型 λ=[A,B,∏]\la ...
- 基于Hmm模型和Viterbi算法的中文分词和词性标注
使用 python 实现基于Hmm模型和Viterbi算法的中文分词及词性标注:使用 最大概率算法 进行优化.最终效果:人民日报语料:分词(F1:96.189%):词性标注(F1:97.934%) 完 ...
最新文章
- 沃森世界研讨会前瞻:AI服务 了解客户情绪
- 谢尔盖.布林的早期思想_谷歌联合创始人谢尔盖·布林(Sergey Brin)谈人工智能与自动化...
- 如何看待179所高校新增 AI 本科专业,研究生扩招也瞄准 AI?
- 【恋爱通告】高清完整版迅雷下载! 首发
- 【Java】Java 语言的初步认识及工作应用范围
- pytorch的梯度计算以及backward方法
- 【深度学习】实战深度学习检测疟疾
- C#发送邮件的实现实例解析
- 【Linux】一步一步学Linux——unzip命令(68)
- 如何安装使用MQCache缓存服务器(适用X300型或者X500型)
- 四部门联合发文推动数学科学发展,释放支持高校建设基础数学中心信号!
- 区间数值计数(洛谷P1980题题解,Java语言描述)
- 数据结构之外部排序:失败树
- python玩转android_怎样用python玩安卓版跳一跳
- 计网学习第一章:概述
- a*算法的优缺点_垃圾回收的常见算法
- python性能分析工具模块_关于Python Profilers性能分析器
- android widget ViewFlipper
- 数据结构:最大子列和问题
- 第四届中国金融风云榜9月在深圳盛大揭晓