数学之美——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) 维特比算法 编辑 维特比算法是一种动态规划算法用于寻找最有可能产生观测事件序列的-维特比路径-隐含状态序列,特别是在马尔可夫信息源上下文和隐马尔可夫模型中.术语“维特比 ...
随机推荐
- LCM Cardinality UVA - 10892(算术基本定理)
这题就是 LightOJ - 1236 解析去看这个把https://www.cnblogs.com/WTSRUVF/p/9185140.html 贴代码了: #include <iostrea ...
- Racket里的方括号
Racket里的方括号 Racket编程指南 https://blog.csdn.net/chinazhangyong/article/category/7386082 来自于QQ群racket!( ...
- 用JS制作博客页面背景随滚动渐变的效果
今天颓了一会,用JavaScript给我的博客园博客写了一个页面背景随滚动而渐变的效果,做完之后自我感觉良好-- 下面就以我的博客园博客为例,介绍一下如何制作这个效果! 准备 [x] 申请博客园的JS ...
- java lock锁住特定对象
由于lock没有锁住特定对象的概念,该如何做到像synchronized同步块一样的效果呢? 答案:为每一个需要加锁的对像分配一把锁. 示例: List<User> users = new ...
- 【洛谷P1101】单词方阵
题目大意:给一 \(n \times n\) 的字母方阵,内可能蕴含多个 \("yizhong"\) 单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着 8 个方向的任一方向, ...
- svn cleanup
SVN 本地更新时,由于一些操作中断更新,如磁盘空间不够,用户取消. 可能会造成本地文件被锁定的情况.一般出现这种情况的解决方法: 1.可以使用SVN clean up来清除锁定. 2.如果不是本目录 ...
- maven 整合支付宝,导入alipay-sdk-java包到本地仓库
maven 整合支付宝,导入alipay-sdk-java包到本地仓库 1.环境变量添加: MAVEN_HOME:(maven位置) M2_HOME:(maven位置) PATH:%M2_HOME ...
- 借读:分布式锁和双写Redis
本帖最后由 howtodown 于 2016-10-3 16:01 编辑问题导读1.为什么会产生分布式锁?2.使用分布式锁的方法有哪些?3.本文创造的分布式锁的双写Redis框架都包含哪些内容? ...
- Zabbix应用五:Zabbix监控多Tomcat
利用Zabbix Trapper方式监控多Tomcat实例 Zabbix自带的模版(JMX Tomcat.JMX Generic)默认只能在一台机器上监控一个tomcat实例(因为监控项中的key不能 ...
- Django中Celery http请求异步处理(四)
Django中Celery http请求异步处理 本章延续celery之前的系列 1.settings配置 2.编写task jib_update_task任务为更新salt jid数据 3.url设 ...