这里写自定义目录标题

  • 隐马尔可夫模型
    • 预测算法
      • 维特比解码算法

隐马尔可夫模型

预测算法

维特比解码算法

在隐马尔科夫模型中,我们使用维特比解码算法求得概率的最大路径(最优路径)。
依据的方法为动态规划
而动态规划又满足最优化原理:给出一个最优的决策序列,每个子序列自身必须是最优的决策序列。 下面则为整个过程的符号引入与递推公式:

下面为数理统计方法中关于维特比算法的例题:

下面则为维特比解码算法的python代码实现:

import numpy as np
def vitebi_decode(hmm_paramter, obs_idx_seq):#取出HMM模型的三个参数A, B , L = hmm_paramter#状态的总个数N = A.shape[0]#获取观测序列的长度T = len(obs_idx_seq)#定义[N*T]的矩阵P,用来表示t时刻状态为i的最大概率P = np.zeros((N, T))#定义[N*T]的矩阵D,用来表示t时刻状态为i取得最大概率时t-1时刻的状态D = np.zeros((N, T), dtype=int)#初始化P,D在t=0时刻所对应的概率值和初状态for i in range(N):P[i][0] = L[i] * (B[i, obs_idx_seq[0]])D[i][0] = -1#接下来通过一个三层循环对P,D里面的元素进行赋值操作for i in range(1, T):obs_value = obs_idx_seq[i]for j in range(N):pro_list = []for k in range(N):pro_list.append(P[k, i-1] * A[k, j] * B[j, obs_value])max_value = max(pro_list)max_idx = pro_list.index(max_value)P[j, i] = max_valueD[j, i] = max_idx#获取P最后一个时刻的最大值,即为最大概率final_max_value = np.max(P, axis=0)[-1]final_max_idx =np.argmax(P, axis=0)[-1]#通过finax_max_idx和D倒推出最大概率值所对应的状态序列state_list = []state_list.append(final_max_idx)for i in range(T-1, 0, -1):final_max_idx = D[final_max_idx][i]state_list.append(final_max_idx)final_state_list = []#由于状态是从1开始的,所以要对每一个状态索引加1for i in range(len(state_list) - 1, -1, -1):final_state_list.append(state_list[i]+1)#print(P)#print(D)return final_max_value, final_state_list
if __name__ == "__main__":A = np.array([[0.5, 0.2, 0.3],[0.3, 0.5, 0.2],[0.2, 0.3, 0.5]])B = np.array([[0.5, 0.5],[0.4, 0.6],[0.7, 0.3]])L = [0.2, 0.4, 0.4]O = ['红', '白', '红']obs_to_idx = {'红':0, '白':1}obs_seq_idx = [obs_to_idx[i] for i in O]max_pro, state_seq = vitebi_decode((A, B, L), obs_seq_idx)print(max_pro)print(state_seq)

运行结果如下:

当然也可以将P,D两个矩阵打印

·
这与统计学习方法中所得到的的结果是一致的:

维特比算法的python实现相关推荐

  1. 维特比算法的python的简单实现

    维特比算法的python简单实现 简单介绍 实现了李航书籍p210的例子,例子非常经典.我有三个盒子,每个盒子都有红球和白球,我观测到了三次结果:红.白和红,现在需要求出盒子的可能序列是什么. 通过这 ...

  2. 维特比算法 python_维特比算法理解与实现(Python)

    前言 写这篇文章就是想以通俗易懂的方式解析维特比算法,最后给出Python代码的实现.下面的公式和原理均出自<统计学习方法>. 算法的原理 算法的原理1.PNG 算法的原理2.PNG 上面 ...

  3. 维特比算法 python_用python实现与理解HMM-维特比算法

    HMM-维特比算法理解与实现(python) 解码问题 给定观测序列 \(O=O_1O_2...O_T\) ,模型 \(\lambda (A,B,\pi)\) ,找到最可能的状态序列 \(I^∗=\{ ...

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

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

  5. 维特比算法 python_维特比算法 实现中文分词 python实现

    最近我在学习自然语言处理,相信大家都知道NLP的第一步就是学分词,但分词≠自然语言处理.现如今分词工具及如何使用网上一大堆.我想和大家分享的是结巴分词核心内容,一起探究分词的本质. (1).基于前缀词 ...

  6. 采用维特比算法完成词性标注(含python代码)

    本文所用训练集: 链接:https://pan.baidu.com/s/1fK--_PrEhckKUSrajHGkEw 提取码:aehg 文章目录 "词性标注"的国内外研究现状: ...

  7. 【深度】从朴素贝叶斯到维特比算法:详解隐马尔科夫模型

    详解隐马尔科夫模型 作者:David S. Batista 选自:机器之心 本文首先简要介绍朴素贝叶斯,再将其扩展到隐马尔科夫模型.我们不仅会讨论隐马尔科夫模型的基本原理,同时还从朴素贝叶斯的角度讨论 ...

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

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

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

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

最新文章

  1. java中的注解(二)
  2. eclipse java代码乱码怎么解决_eclipse java 乱码怎么解决
  3. ubuntu安装protobuf
  4. qemu运行linux内核很慢,linux – qcow2图像的qemu存储性能非常慢
  5. win7下删除提示没权限删除文件的方法
  6. HTML5 Shiv #8211; 让该死的IE系列支持HTML5吧
  7. 华为交换机屏蔽远程计算机,华为交换机远程telnet配置的小问题
  8. 高可用之KeepAlived(2):keepalived+lvs
  9. Docker启动失败提示【exec user process caused: exec format error】
  10. 高德地图+Serverless 护航你的假日出行
  11. 杭电 4907 Task schedule ·
  12. c#打印乘法口诀_小学数学所有公式和顺口溜都在这里了!建议家长收藏打印!...
  13. 【人脸识别】基于matlab小波不变矩人脸识别【含Matlab源码 1355期】
  14. 教你如何制作浪漫的表白网站 七夕情人节表白网页在线制作(多种款式)
  15. HCL打开显示当前系统用户怎么解决_iPhone8手机变成白苹果怎么办?
  16. 【重复制造精讲】5、MF50计划
  17. Aurora核使用中tx_dst_rdy信号拉低问题
  18. Lexar雷克沙 nCARD存储卡全网发布,可用于华为手机内存扩容
  19. java pdf输出图片_Java PDF转换成图片并输出给前台展示
  20. Linux Python离线下载模块

热门文章

  1. 肯德基宅急送,你值得学习的滚动屏
  2. SortedMap接口实现排序
  3. SQL中字符串截取函数(SUBSTRING)
  4. 深度 Zabbix 使用指南——来自惨绿少年
  5. 学得懂的 Android Framework 教程之 AOSP 急速上手
  6. openlayers渲染wkt数据
  7. 实体类或对象序列化时,忽略为空属性
  8. 诺基亚 8800 Sapphire Arte
  9. java实习生面试题_java实习生面试题.doc
  10. JavaScript 正则教程