数学之美——HMM模型(二)解码和Forward算法
上一篇讨论了HMM的基本概念和一些性质,HMM在现实中还是比较常见的,因此也带来一了一系列的HMM应用问题。HMM应用主要面向三个方面:预测、解码和学习。这篇主要讨论预测。
简单来说,预测就是给定HMM,和一个观察得到的可观察状态序列,求出通过HMM得到这个序列的概率是多少,这也是一般机器学习等领域中比较常见的应用,得到一个模型后我们当然是希望通过这个模型来得到一些预测的结果。这个也是HMM应用比较基本比较简单的一个。
首先对于给定的HMM和观察序列,第一反应当然是穷举搜索,不妨假设模型为λ, 观察序列为O,那么问题就是求P(O|λ), 显然,我们不知道隐藏状态序列,假设隐藏序列为Q,那么则有:
可见,这样的计算方式虽然是可行的,但是太繁琐,如果模型较复杂或者观察序列比较长,那么会陷入比较繁重的计算中,这个时候,就需要引入一个比较优化的算法,这就是Forward算法,即前向算法。
首先先引入局部概率的概念,如下图所示:

T+1时刻某一状态的发生概率依赖于之前时刻状态的概率,并且仅依赖于能够达到T+1时刻该状态的路径上的状态,因此,就不需要计算T时刻所有的状态,而仅仅计算可能路径上的状态。
对于计算某一时刻观察到某一状态的局部概率应该是如下公式:

这样,原先每次需要对整个序列进行计算就简化成迭代计算,减少了计算量。
考虑一个具体的例子,也是经典的一个HMM模型例子,某地天气状况主要有三种sunny、cloudy和rainy,这是隐藏状态,同时给出观察海藻的湿度状态作为观察状态,有三种:dry、damp和soggy,例如下图是给出的一个简单例子:

显示了在三个时刻中,天气状态之间的转移和得到的海藻观察状态。这样在这个状态转移图中如果需要计算某一点的局部概率,例如:

计算t2时刻状态为“Cloudy”的概率,那么就是在t1时刻所有指向t2时刻“Cloudy”状态的路径概率之和。
那么对于t1初始时刻的局部概率怎么计算呢。定义几个符号,π为HMM中的初始向量,π[i]代表状态i的初始概率,A为状态转移概率矩阵,A[i][j]表示从状态i转移到状态j的概率,B为混淆矩阵,bi[O]代表由隐藏状态i得到观察状态为o的概率。那么,对于初始时刻的局部概率可以得到如下计算:

当t>1时刻时,计算公式可以根据前一时刻得到,由之前的定义可知,局部概率为:

这样,根据这两个公式,就可以得到整条路径上的局部概率,也就可以得到前向算法的过程。下面给出前向算法的定义:
给定观察序列,计算出现的概率:

首先我们利用初始条件计算出T=1时刻的局部概率,即为:
,注意这是对于
所有状态的计算。
之后,根据公式计算依次后续时刻的局部概率,得到最终时刻的所有局部概率后,即可得到观察序列的概率,很简单,就是所有最终时刻观察序列的和:
,其中
是给定的HMM模型。
下面给出了Forward算法的python实现,具体github地址可点击:
https://github.com/skymoney/HMM_Impl
后面会进入到HMM第二个应用——解码和Viterbi算法。
数学之美——HMM模型(二)解码和Forward算法的更多相关文章
- 数学之美——HMM模型(一)介绍
一直想写点关于数学方面的blog,这对于数据挖掘分析,NLP处理等都有着比较重要的作用,之前在CSDN上想写点HMM方面的文章,一直没写成,最近几天终于抽点时间完成了HMM的文章,加以整理,遂有这个系 ...
- 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列
隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态 ...
- 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率
隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法 ...
- 隐马尔科夫模型HMM(一)HMM模型
隐马尔科夫模型HMM(一)HMM模型基础 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比 ...
- 条件随机场CRF(三) 模型学习与维特比算法解码
条件随机场CRF(一)从随机场到线性链条件随机场 条件随机场CRF(二) 前向后向算法评估标记序列概率 条件随机场CRF(三) 模型学习与维特比算法解码 在CRF系列的前两篇,我们总结了CRF的模型基 ...
- HMM条件下的 前向算法 和 维特比解码
一.隐马尔科夫HMM如果: 有且仅仅有3种天气:0晴天.1阴天.2雨天 各种天气间的隔天转化概率mp: mp[3][3] 晴天 阴天 雨天 晴天 0.33333 0.33333 0.33333 阴天 ...
- 数学之美 zt
数学是美丽的,哪里有数哪里就有美. 数学的定义是研究数量关系和空间形式的一门科学.但有句名言说:数学比科学大得多,因为它是科学的语言.数学不仅用来写科学,而且可用来写人生.所以说数学是一切学科的基础, ...
- HMM模型
通过前几时断续的学习,发现自己对HMM模型的了解还只停留在皮毛,导致在学习CRF模型并将其与最大熵模型.HMM.MEMM做比较时感觉很吃力,所以又花了两天时间使劲看了遍HMM,发现了解得确实深刻了很多 ...
- HMM模型学习笔记(维特比算法)
维特比算法(Viterbi) 维特比算法 编辑 维特比算法是一种动态规划算法用于寻找最有可能产生观测事件序列的-维特比路径-隐含状态序列,特别是在马尔可夫信息源上下文和隐马尔可夫模型中.术语“维特比 ...
随机推荐
- 【CF888E】Maximum Subsequence(meet in the middle)
[CF888E]Maximum Subsequence(meet in the middle) 题面 CF 洛谷 题解 把所有数分一下,然后\(meet\ in\ the\ middle\)做就好了. ...
- 【BZOJ4444】国旗计划
Description 题目链接 Solution 磕了3个半小时没做出来的题,就是全场崩. 首先对于一个人的答案是很好求的,显然是选择左端点在此人区间中,右端点最远(最靠右)的人作为下一个接棒人.因 ...
- emoji表情与unicode编码互转(JS,JAVA,C#)
1.表情字符转编码 [C#] Encoding.UTF32.GetBytes("
- 《剑指offer》— JavaScript(25)复杂链表的复制
复杂链表的复制 题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数 ...
- pi的求法 acos(-1.0)
pi=acos(-1.0) https://www.luogu.org/problemnew/show/T4529 #include <cstdio> #include <cstdl ...
- Kafka 0.8 sever:源代码High level分析
本文主要介绍了Kafka High level的代码架构和主要的类. 这张图是0.8版本的架构 Boker 架构 1 network layer Kafka使用NIO自己实现了网络层的代码, 而不是采 ...
- 深入了解C指针
前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级 ...
- JAVA记录-IntelliJ Idea 2017 免费激活方法(转载)
1. 到网站 http://idea.lanyus.com/ 获取注册码. 2.填入下面的license server: http://intellij.mandroid.cn/ http://ide ...
- Spring RedisTemplate操作-List操作(4)
@Autowired @Resource(name="redisTemplate") private RedisTemplate<String, String> rt; ...
- python学习笔记7-网络编程
import urllib.request import json,requests #urlib模块,不常用 url = 'http://api.nnzhp.cn/api/user/stu_info ...