数学之美——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) 维特比算法 编辑 维特比算法是一种动态规划算法用于寻找最有可能产生观测事件序列的-维特比路径-隐含状态序列,特别是在马尔可夫信息源上下文和隐马尔可夫模型中.术语“维特比 ...
随机推荐
- 百度搜索 “Java面试题” 前200页(面试必看)
前言 本文中的题目来源于网上的一篇文章<百度搜索 "Java面试题" 前200页>,但该文章里面只有题目,没有答案.因此,我整理了一些答案发布于本文.本文整理答案的原则 ...
- 骑士 HYSBZ - 1040(基环树+树形dp)
Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火绵延五百里,在和平环境中 ...
- 【Luogu P4149】[IOI2011]Race(点分治)
自闭了几天后的我终于开始做题了..然后调了3h一道点分治板子题,调了一天一道IOI... 最后还是自己手造数据debug出来的... 这题一看:树上路径问题,已知路径长度求balabala,显然是点分 ...
- Helm二:安装
目录 Helm安装 Helm client安装 Helm tiller安装 Chart仓库配置 私有chart仓库 chart仓库的组成 创建本地仓库 chart仓库基本管理 Helm安装 Helm ...
- node爬虫进阶版
手写了一个方便爬虫的小库: const url = require('url') const glib = require('zlib') //默认头部 const _default_headers ...
- CCNA学习与实验指南——第2章 网络互联和参考模型
大三下学期的这个时间段,不知道是不是社会就业的恐惧与自身前途的迷茫所带来的压力,身边的同学一个个的整天奔赴考研室学的好不努力,空荡荡的宿舍只剩我一人孑然聊聊甚是索然无味,亦或许是即将毕业的压力等接踵而 ...
- 001. MyBatis+SpringMVC+Spring[重置版]
说在前面的话 三阶段的课程知识点和细节很多,请假应该杜绝! 课后需抓紧时间复习,提高代码质量和速度! 课程周期和学习课程顺序为:[正常情况下] MyBatis 持久层框架 [2周] SpringMVC ...
- Tomcat——Linux下的安装和配置
Tomcat在Linux上的安装与配置 以下使用的Linux版本为: Redhat Enterprise Linux 7.0 x86_64,Tomcat版本为tomcat-7.0.54. 1.下载JD ...
- 数学:拓展Lucas定理
拓展Lucas定理解决大组合数取模并且模数为任意数的情况 大概的思路是把模数用唯一分解定理拆开之后然后去做 然后要解决的一个子问题是求模质数的k次方 将分母部分转化成逆元再去做就好了 这里贴一份别人的 ...
- 一个ssm综合小案例-商品订单管理----写在前面
学习了这么久,一直都是零零散散的,没有把知识串联起来综合运用一番 比如拦截器,全局异常处理,json 交互,RESTful 等,这些常见技术必须要掌握 接下来呢,我就打算通过这么一个综合案例把这段时间 ...