本文的内容大多来自李航的《统计学习方法》
点击此处下载书籍
这篇文章就是想以通俗易懂的方式解析维特比算法,最后用python代码实现。

算法原理



原理显而易见是求动态规划问题:

  • 找出每个时刻概率最大的路径
  • 将路径上的每个结点连接起来得到最优路径
  • 根据观测求出每个时刻最有可能的状态

算法思路

  1. 初始化:t = 1时刻分别求出N个状态下产生观测变量1的概率。
  2. 递推:当t和i不变时j = 1,2,3,…,N是分别求出t - 1时刻所有可能的状态,转移到t时刻状态i的概率。max是求最大值,就是在t-1时刻各个状态转移到t时刻状态 i 的最大概率,最后乘以观测概率就是t状态 i 最有可能产生观测变量 t 的概率。argmax是求在t-1时刻的状态最有可能转移到 t 时刻的状态 i 。如果想求出t - 1时刻的所有可能状态转移到 t 时刻所有可能状态的最大概率,则在(2)的式子最外层再增加一个循环i = 1,2,3,…,N。如果想求出各个时刻最有可能的状态,则在(2)的式子最外层增加一个循环t = 2,3,4,…,T。
  3. 终止
  4. 最优路径回溯:根据t = T时刻最有可能的状态反向推出t = T - 1, t = T - 1,…,2,1时刻最有可能的状态。

实现

#@author: James_Bobo
#date: 2019/10/18
'''
Input:A = mat([[0.5, 0.2, 0.3],[0.3, 0.5, 0.2],[0.2, 0.3, 0.5]])B = mat([[0.5, 0.5],[0.4, 0.6],[0.7, 0.3]])PI = mat([[0.2],[0.4],[0.4]])O = mat([[0],[1],[0]])
'''
import numpy as np
from numpy import *
import mathdef viterbi(A, B, PI, O):N = shape(A)[0]I = mat(zeros((N, 1)))T = Nsigma = mat(zeros((N, N)))omiga = mat(ones((N, N)))index = 0for i in range(N):if(O[0, 0] == 0):index = 0else:index = 1sigma[0, i] = PI[i, 0] * B[i, index]t = 1while(t < T):for i in range(N):sigma_temp = mat(zeros((N, 1)))for j in range(N):sigma_temp[j, 0] = sigma[t - 1, j] * A[j, i]max_value = sigma_temp.max(axis = 0)if(O[t, 0] == 0):index = 0else:index = 1sigma[t, i] = max_value[0, 0] * B[i, index]omiga[t, i] = sigma_temp.argmax() + 1t += 1P = sigma[N - 1, :].max()I[T -1, 0] = sigma[N - 1, :].argmax() + 1t = T - 2print(omiga)while(t >= 0):index = int(I[t + 1, 0] - 1)I[t, 0] = omiga[t + 1, index]t -= 1return Iif __name__ == "__main__":A = mat([[0.5, 0.2, 0.3],[0.3, 0.5, 0.2],[0.2, 0.3, 0.5]])B = mat([[0.5, 0.5],[0.4, 0.6],[0.7, 0.3]])PI = mat([[0.2],[0.4],[0.4]])O = mat([[0],[1],[0]])I = viterbi(A, B, PI, O)print("I",I)


维特比算法( viterbi)相关推荐

  1. HMM——维特比算法(Viterbi algorithm)

    1. 前言 维特比算法针对HMM第三个问题,即解码或者预测问题,寻找最可能的隐藏状态序列: 对于一个特殊的隐马尔可夫模型(HMM)及一个相应的观察序列,找到生成此序列最可能的隐藏状态序列. 也就是说给 ...

  2. 语音识别学习日志 2019-7-17 语音识别基础知识准备6 {维特比算法(Viterbi Algorithm)}

    HMM 维特比算法(Viterbi Algorithm)详细解释参考:http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorith ...

  3. 维特比算法(Viterbi)

    维特比算法 (Viterbi algorithm) 是机器学习中应用非常广泛的动态规划算法,在求解隐马尔科夫.条件随机场的预测以及seq2seq模型概率计算等问题中均用到了该算法.实际上,维特比算法不 ...

  4. 维特比算法(viterbi)原理以及简单实现

    维特比算法 看一下维基百科的解释,维特比算法(Viterbi algorithm)是一种动态规划算法.它用于寻找最有可能产生观测事件序列的维特比路径--隐含状态序列,特别是在马尔可夫信息源上下文和隐马 ...

  5. C语言维特比算法,viterbi维特比算法

    维特比算法:使用动态规划,找出最短路径 以下以图的形式来解释: 图的节点按列组织,每列的节点数量可以不一样,每一列的节点只能和相邻列的节点相连,不能跨列相连,节点之间有着不同的距离,距离的值就不在图上 ...

  6. 维特比算法Viterbi Algorithm

     1.简介 维特比算法是一个特殊但应用最广的动态规划算法,它是针对篱笆网络的有向图(Lattice)的最短路径问题而提出的.凡是使用隐含马尔可夫模型描述的问题都可以用维特比算法来解码,包括今天的数 ...

  7. 机器学习:维特比算法(Viterbi Algorithm)

    一.维特比算法(Viterbi Algorithm)讲解方式01:篱笆网络(Lattice)的最短路径问题 已知下图的篱笆网络,每个节点之间的数字表示相邻节点之间的距离,举个例子来说,如果我走,这个距 ...

  8. em算法怎么对应原有分类_[PRML]序列数据 HMM维特比算法及扩展

    序列数据相关文章:1.马尔可夫模型2.隐马尔可夫模型简介3.HMM最大似然4.HMM前向后向算法5.HMM和积算法与尺度因子 1 维特比算法 在隐马尔可夫模型的许多应用中,潜变量有一些有意义的解释,因 ...

  9. NLP-基础任务-中文分词算法(2)-基于词典:基于N-gram语言模型的分词算法【基于词典的分词方法】【利用维特比算法求解最优路径】【比机械分词精度高】【OOV:基于现有词典,不能进行新词发现处理】

    例子:"经常有意见分歧" 词典:["经常","有","意见","意","见",& ...

  10. 维特比算法 python_HMM-维特比算法理解与实现(python)

    解码问题 给定观测序列 \(O=O_1O_2...O_T\),模型 \(\lambda (A,B,\pi)\),找到最可能的状态序列 \(I^∗=\{i^∗_1,i^∗_2,...i^∗_T\}\) ...

最新文章

  1. N-Case 律师事务所管理系统安装与卸载说明
  2. e.printStackTrace()会导致锁死?这仅仅是打印,怎么可能?
  3. 数据库跟尾过多的错误,能够的原因阐发及处置惩罚设备
  4. 使用js实现放大镜效果
  5. 关于unix下使用tar的一些常用技巧
  6. 吐槽今年一级计算机,吐槽大会#辽宁省考#当一个没有情感的计算机器
  7. 机器学习:Multinoulli分布与多项式分布
  8. vue读取服务器文件跨域,新版vue-cli模板下本地开发环境使用node服务器跨域的方法...
  9. 计算机网络—一个自治系统有5个局域网,其连接图如图所示。LAN2至LAN5上的主机数分别为:91,150,3,15。该自治系统分配到的IP地址块为30.138.118/23。试给出每一个局域网的地址块
  10. 冬小麦病虫害的高光谱识别方法研究
  11. 使用Typora上传博客到博客园
  12. 电路板的信号完整性问题及原因
  13. 如何让C/S应用支持多端(PC、Android、iOS)同时登录?
  14. 自制麦克纳姆轮遥控小车
  15. 基于深度学习的图像文字识别技术
  16. java m个苹果n个篮子_m个苹果放在n个筐里,每个筐至少一个,所有的筐都一样,有多少种放法...
  17. 那些年,我们关注过的放大电路设计要点
  18. attributeerror: module 'numpy.random' has no attribute 'randon'
  19. 第四周项目3单链表应用(2)
  20. 零和博弈(Zero-Sum Games)与非零和博弈(Non-Zero-Sum Games)

热门文章

  1. 从0开始学习C#第二天
  2. SQL server 数据导入导出BCP工具使用详解
  3. 一个简单的二层系统分析全程
  4. zend studio 本地调试php,Zend Studio调试php教程
  5. java实践体会,java实践心得体会范文3篇
  6. java 状态常量_Java 变量和常量
  7. 网站开发用什么语言好_兰州网站开发哪家策划效果好
  8. lua搭建ui_LTUI, 一个基于 lua 的跨平台字符终端 UI 界面库
  9. linux脚本中sed -i,Linux Shell 脚本之sed命令详解
  10. 深圳php程序培训班,深圳php编程培训班哪几个好