阅读目录

  • 隐马尔可夫模型(HMM)
回到目录

隐马尔可夫模型(HMM)

原文地址:http://www.cnblogs.com/jacklu/p/7753471.html

本文结合了王晓刚老师的ENGG 5202 Pattern Recognition课程内容知识,和搜集的资料和自己理解的总结。

1 概述

隐马尔可夫模型(Hidden Markov Model,HMM)是结构最简单的贝叶斯网,这是一种著名的有向图模型,主要用于时序数据建模(语音识别、自然语言处理等数据在时域有依赖性的问题)。

如果考虑t时刻数据依赖于0到t-1时间段的所有数据,即转存失败重新上传取消,在计算复杂度上是不可行的。因此Markov Model假定只依赖于最近的几个观测数据。

下面先从一个直观的例子理解HMM:

假设有三个不同的骰子(6面、4面、8面),每次先从三个骰子里选一个,每个骰子选中的概率为转存失败重新上传取消,如下图所示,重复上述过程,得到一串数字[1 6 3 5 2 7]。这些可观测变量组成可观测状态链。

同时,在隐马尔可夫模型中还有一条由隐变量组成的隐含状态链,在本例中即骰子的序列。比如得到这串数字骰子的序列可能为[D6 D8 D8 D6 D4 D8]。

转存失败重新上传取消

隐马尔可夫模型示意图如下所示:

图中,箭头表示变量之间的依赖关系。在任意时刻,观测变量(骰子点数)仅依赖于状态变量(哪类骰子),“观测独立性假设”。

同时,t时刻数据依赖于t-1时刻的数据。这就是1阶马尔可夫链,即系统的下一时刻的状态仅由当前状态决定不依赖以往的任何状态(无记忆性),“齐次马尔可夫性假设”。

0阶Markov Model:

转存失败重新上传取消

1阶Markov Model:

2阶Markov Model:

转存失败重新上传取消

1阶HMM

包含状态变量(也叫latent variable,该变量是离散的、未知的、待推断的)转存失败重新上传取消和观测变量(该变量可以是离散的、也可以是连续的),如下图所示:

转存失败重新上传取消

其联合分布:转存失败重新上传取消

1.2 HMM中的条件独立(在后续算法推导中非常重要)

转存失败重新上传取消

从概率图模型上给出条件独立的式子非常简单,即遮住某一节点,被分开的路径在给定该节点时独立。

上面六个式子,前五个式子很容易从图模型中理解。最后一个式子可以将左边写成转存失败重新上传取消的乘积,然后再将转存失败重新上传取消做分解。

假定每个状态有三种取值转存失败重新上传取消,比如上面骰子的种类。参数如下图所示:

初始状态参数转存失败重新上传取消

状态转移概率转存失败重新上传取消,即

观测概率(也叫emission probablity)转存失败重新上传取消,即时刻t、状态的概率

2 隐马尔可夫模型三要素

以上三个参数构成隐马尔可夫模型三要素:

状态转移概率矩阵A, 

观测概率矩阵B,转存失败重新上传取消

初始状态概率向量转存失败重新上传取消

一个隐马尔可夫模型可由转存失败重新上传取消来指代。

3 隐马尔可夫模型的三个基本问题

(1) 给定模型转存失败重新上传取消,计算其产生观测序列的概率, 称作evaluation problem,比如:计算掷出点数163527的概率

(2) 给定模型和观测序列,推断能够最大概率产生此观测序列的状态序列,即使求解,称作decoding problem,比如:推断掷出点数163527的骰子种类

(3) 给定观测序列,估计模型的参数,使计算其产生观测序列的概率最大,称作learning problem,比如:已知骰子有几种,不知道骰子的种类,根据多次掷出骰子的结果,反推出骰子的种类

这三个基本问题在现实应用中非常重要,例如根据观测序列推测当前时刻最有可能出现的观测值,这就是基本问题(1);

在语音识别中,观测值为语音信号,隐藏状态为文字,根据观测信号推断最有可能的状态序列,即基本问题(2);

在大多数应用中,人工指定参数模型已变得越来越不可行,如何根据训练样本学得最优参数模型,就是基本问题(3)。

4 三个基本问题的解法

基于两个条件独立假设,隐马尔可夫模型的这三个基本问题均能被高效求解。

4.1 基本问题(1)evaluation problem解法

4.1.1 直接计算法(概念上可行,计算上不可行)

通过列举所有可能的长度为T的状态序列,求各个状态序列与观测序列同时出现的联合概率,然后对所有可能求和。

计算复杂度,C是状态个数。算法不可行。

4.1.2 前向算法(t=1,一步一步向前计算)

前向概率,表示模型,时刻 t,观测序列为且状态为的概率。

注意求和式中有K项(Z的状态数),计算复杂度为C*C。

通过上式可知,为了得到前向概率,可以先初始化t=1时刻的概率,然后从第一个节点开始递推计算,每次递推都需要计算一次c*c的的操作,因此总的算法复杂度是(C和K相同)

4.1.3 后向算法

后向概率,表示模型,时刻 t,观测序列为且状态为的概率。

推导过程:

通过上式可知,为了得到后向概率,可以先初始化t=T时刻的概率,然后从最后一个节点向前递推计算,每次递推都需要计算一次c*c的的操作,因此总的算法复杂度是(C和K相同)

算法高效的关键是其局部计算前向概率,根据路径结构,如下图所示,每次计算直接利用前一时刻计算结果,避免重复计算,减少计算量。

利用前向概率和后向概率可以计算:

整个观测序列的概率

给定观测序列,t时刻的状态后验概率

给定观测序列,t时刻从某一状态,在t+1时刻转换成新的状态的后验概率

4.2 基本问题(2)decoding problem解法

4.2.1 近似算法

选择每一时刻最有可能出现的状态,即根据上述计算t时刻的状态后验概率,选择概率最大的状态,从而得到一个状态序列。这个方法计算简单,此方法但是不能保证整个状态序列的出现概率最大。因为可能两个相邻的状态转移概率为0,即实际上不可能发生这种状态转换。

4.2.2 Viterbi算法

使用动态规划求解概率最大(最优)路径。t=1时刻开始,递推地计算在时刻t状态为i的各条部分路径的最大概率,直到计算到时刻T,状态为i的各条路径的最大概率,时刻T的最大概率即为最优路径的概率,最优路径的节点也同时得到。

如果还不明白,看一下李航《统计学习方法》的186-187页的例题就能明白算法的原理。

考虑一个表格数据结构,存储着t时刻时,状态为j的能够产生观测序列的最大概率值。

t=1时,

t>1时

维特比算法:

使用记录求解的状态序列。

维特比算法图示:

状态[3 3 3]极为概率最大路径。

4.3 基本问题(3)解法

4.3.1 监督学习方法

给定T个长度相同的(观测序列,状态序列)作为训练集,使用极大似然估计法来估计模型参数。

转移概率  的估计:样本中t时刻处于状态i,t+1时刻转移到状态j的频数为,则

观测概率和初始状态概率的估计类似。

4.3.2 Baum-Welch算法

使用EM算法得到模型参数估计式

EM算法是常用的估计参数隐变量的利器,它是一种迭代方法,基本思想是:

(1) 选择模型参数初始值;

(2) (E步)根据给定的观测数据和模型参数,求隐变量的期望;

(3) (M步)根据已得隐变量期望和观测数据,对模型参数做极大似然估计,得到新的模型参数,重复第二步。

作业题:

第一问用于理解HMM产生数据的过程,第二问用于理解维特比算法。

自己写的答案(运行结果如上图):

 1 import numpy2 import random3 4 def random_pick(pick_list,probability_list):5     x=random.uniform(0,1)6     cumulative_probability=0.07     for item,item_probability in zip(pick_list,probability_list):8         cumulative_probability+=item_probability9         if x < cumulative_probability: break
10     return item
11
12 Zt=[1,2]
13 Pi=[0.6,0.4]
14 Xt=[1,2,3]
15 a1j=[0.7, 0.3]
16 a2j=[0.4, 0.6]
17 b1j=[0.1, 0.4, 0.5]
18 b2j=[0.6, 0.3, 0.1]
19 x=[-1 for n in range(10)]
20 z=[-1 for n in range(10)]
21 #for function test
22 #temp_counter = 0
23 #for i in range(100):
24 #    if random_pick(Zt,Pi) == 1: temp_counter+=1
25 #print(temp_counter)
26 ##for function test
27
28 z[0] = random_pick(Zt,Pi)
29 for i in range(10):
30     if z[i] == 1:
31         x[i] = random_pick(Xt, b1j)
32         if i < 9: z[i+1] = random_pick(Zt, a1j)
33     else:
34         x[i]= random_pick(Xt, b2j)
35         if i < 9: z[i+1]= random_pick(Zt, a2j)
36 print(z)
37 print(x)
38
39 bp=[-1 for n in range(10)]
40 Fi=[[-1,-1] for n in range(10)]
41 for i in range(2):
42     if i == 0:
43         Fi[0][0]=Pi[i]*b1j[x[0]-1]
44         print('Fi00',Fi[0][0])
45     elif i == 1:
46         Fi[0][1]=Pi[i]*b2j[x[0]-1]
47         print('Fi01',Fi[0][1])
48 if Fi[0][0] < Fi[0][1]:
49     bp[0] = 1
50 else:
51     bp[0] = 0
52
53 for t in range(9):
54     for j in range(2):
55         if j == 0:
56             if bp[t] == 0:
57                  Fi[t+1][j]=Fi[t][0]*a1j[0]*b1j[x[t+1]-1]
58             elif bp[t] == 1:
59                 Fi[t+1][j]=Fi[t][1]*a2j[0]*b1j[x[t+1]-1]
60         if j == 1:
61             if bp[t] == 0:
62                 Fi[t+1][j]=Fi[t][0]*a1j[1]*b2j[x[t+1]-1]
63             elif bp[t] == 1:
64                 Fi[t+1][j]=Fi[t][1]*a2j[1]*b2j[x[t+1]-1]
65     print('Fit0',Fi[t+1][0])
66     print('Fit1',Fi[t+1][1])
67     if Fi[t+1][0] < Fi[t+1][1]:
68         bp[t+1] = 1
69     else:
70         bp[t+1] = 0
71
72 print(bp)#z=bp+1

viterbi维特比算法和隐马尔可夫模型(HMM)相关推荐

  1. 【机器学习算法】隐马尔可夫模型HMM(一)

    目录 一.马尔可夫模型 1. 马尔可夫性 2. 马尔可夫链 3. 马尔可夫链案例 二.隐马尔可夫模型HMM 1. named entity recognition(命名实体识别)问题概述 2. 什么是 ...

  2. 维特比算法在隐马尔可夫模型中的应用

    前言 文章标题的两个概念也许对于许多同学们来说都相对比较陌生,都比较偏向于于理论方面的知识,但是这个算法非常的强大,在很多方面都会存在他的影子.2个概念,1个维特比算法,1个隐马尔可夫模型.你很难想象 ...

  3. 一、隐马尔科夫模型HMM

    隐马尔科夫模型HMM(一)HMM模型基础 隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理,模式识别等领域得到广泛的应用. ...

  4. 机器学习知识点(二十四)隐马尔可夫模型HMM维特比Viterbi算法Java实现

    1.隐马尔可夫模型HMM    学习算法,看中文不如看英文,中文喜欢描述的很高深.    http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/ht ...

  5. 《两日算法系列》之第四篇:隐马尔可夫模型HMM

    目录 1. 定义与假设 2. 相关概念的表示 3. 三个基本问题 3.1. 概率计算问题 3.2. 学习问题 3.3. 预测问题 总结 1. 定义与假设 李雷雷所在城市的天气有三种情况,分别是:晴天. ...

  6. python地图匹配_基于隐马尔科夫模型(HMM)的地图匹配(Map-Matching)算法

    1. 摘要 本篇博客简单介绍下用隐马尔科夫模型(Hidden Markov Model, HMM)来解决地图匹配(Map-Matching)问题.转载请注明网址. 2. Map-Matching(MM ...

  7. 隐马尔科夫模型 (HMM) 算法介绍及代码实现

    Table of Contents Hidden Markov Model (隐马尔科夫模型) 定义 基本问题 前向算法 算法流程 实现代码 后向算法 算法流程 实现代码 Viterbi算法 算法流程 ...

  8. 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数

    在本篇我们会讨论HMM模型参数求解的问题,这个问题在HMM三个问题里算是最复杂的.在研究这个问题之前,建议先阅读这个系列的前两篇以熟悉HMM模型和HMM的前向后向算法,以及EM算法原理总结,这些在本篇 ...

  9. m基于隐马尔科夫模型(HMM)的手机用户行为预测(MMUB)算法matlab仿真

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 隐马尔可夫模型(Hidden Markov Model,HMM)是一种统计模型,广泛应用在语音识别, ...

最新文章

  1. _declspec(naked) 使用(裸函数)
  2. bash/shell的字符串trim实现
  3. 用户请求接口信息日志记录
  4. scrapy item.py
  5. vuetify文件上传 file inputs
  6. AD----如何将立创EDA元器件封装库导入AD库
  7. HFSS - 倒F天线的设计与仿真
  8. 主流数据库以及适用场景思维导图
  9. 新手CrossApp 之IndicatorView小结
  10. 计算机术语中bug指的是,你知道电脑漏洞为什么叫bug吗?
  11. 南师大GIS考研数据库2018年第三题
  12. 第五章 项目范围管理
  13. 盘点8个国内外知名表单软件平台,你知道几个?
  14. xshell 基本操作
  15. 美国依靠美元霸权, 是如何收割世界财富的?
  16. 【eclipse】mybatis配置文件创建与mapper接口文件创建
  17. Linux中国对话龙蜥社区4位理事:龙蜥操作系统捐赠的背后,是谁在推动?
  18. [转]深入浅出WPF(7)——数据的绿色通道,Binding
  19. React官网核心概念模块知识点整理(一)
  20. 编译linux驱动时提示很多源码头文件和定义缺失

热门文章

  1. 2022-2028年中国SCR脱硝催化剂行业研究及前瞻分析报告
  2. etcd 笔记(06)— Client 结构定义、客户端(初始化、KV存储Get、Put、事务 Txn、压缩 Compact、Watch、Lease
  3. Windows 64位下安装Redis详细教程
  4. 梯度下降优化算法概述
  5. torch.nn.Embedding理解
  6. 服务器BMC、BIOS、IPMI、UEFI技术解析
  7. AI 芯片的分类及技术
  8. 人工智能:深层神经网络
  9. 【网站汇总】单片机常用通讯协议
  10. [JavaScript] Set类型在JavaScript中的使用