hmm前后向算法
跟医生就医推导过程是一样的
隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率
在隐马尔科夫模型HMM(一)HMM模型中,我们讲到了HMM模型的基础知识和HMM的三个基本问题,本篇我们就关注于HMM第一个基本问题的解决方法,即已知模型和观测序列,求观测序列出现的概率。
1. 回顾HMM问题一:求观测序列的概率
首先我们回顾下HMM模型的问题一。这个问题是这样的。我们已知HMM模型的参数λ=(A,B,Π)
。其中A是隐藏状态转移概率的矩阵,B是观测状态生成概率的矩阵, Π是隐藏状态的初始概率分布。同时我们也已经得到了观测序列O={o1,o2,...oT},现在我们要求观测序列O在模型λ下出现的条件概率P(O|λ)
。
乍一看,这个问题很简单。因为我们知道所有的隐藏状态之间的转移概率和所有从隐藏状态到观测状态生成概率,那么我们是可以暴力求解的。
我们可以列举出所有可能出现的长度为T
的隐藏序列I={i1,i2,...,iT},分布求出这些隐藏序列与观测序列O={o1,o2,...oT}的联合概率分布P(O,I|λ),这样我们就可以很容易的求出边缘分布P(O|λ)
了。
具体暴力求解的方法是这样的:首先,任意一个隐藏序列I={i1,i2,...,iT}
出现的概率是:
对于固定的状态序列I={i1,i2,...,iT}
,我们要求的观察序列O={o1,o2,...oT}出现的概率是:
则O
和I联合出现的概率是:
然后求边缘概率分布,即可得到观测序列O
在模型λ下出现的条件概率P(O|λ):
虽然上述方法有效,但是如果我们的隐藏状态数N
非常多的那就麻烦了,此时我们预测状态有NT种组合,算法的时间复杂度是O(TNT)
阶的。因此对于一些隐藏状态数极少的模型,我们可以用暴力求解法来得到观测序列出现的概率,但是如果隐藏状态多,则上述算法太耗时,我们需要寻找其他简洁的算法。
前向后向算法就是来帮助我们在较低的时间复杂度情况下求解这个问题的。
2. 用前向算法求HMM观测序列的概率
前向后向算法是前向算法和后向算法的统称,这两个算法都可以用来求HMM观测序列的概率。我们先来看看前向算法是如何求解这个问题的。
前向算法本质上属于动态规划的算法,也就是我们要通过找到局部状态递推的公式,这样一步步的从子问题的最优解拓展到整个问题的最优解。
在前向算法中,通过定义“前向概率”来定义动态规划的这个局部状态。什么是前向概率呢, 其实定义很简单:定义时刻t
时隐藏状态为qi, 观测状态的序列为o1,o2,...ot的概率为前向概率。记为:
既然是动态规划,我们就要递推了,现在我们假设我们已经找到了在时刻t
时各个隐藏状态的前向概率,现在我们需要递推出时刻t+1
时各个隐藏状态的前向概率。
从下图可以看出,我们可以基于时刻t
时各个隐藏状态的前向概率,再乘以对应的状态转移概率,即αt(j)aji就是在时刻t观测到o1,o2,...ot,并且时刻t隐藏状态qj, 时刻t+1隐藏状态qi的概率。如果将想下面所有的线对应的概率求和,即∑j=1Nαt(j)aji就是在时刻t观测到o1,o2,...ot,并且时刻t+1隐藏状态qi的概率。继续一步,由于观测状态ot+1只依赖于t+1时刻隐藏状态qi, 这样[∑j=1Nαt(j)aji]bi(ot+1)就是在在时刻t+1观测到o1,o2,...ot,ot+1,并且时刻t+1隐藏状态qi的概率。而这个概率,恰恰就是时刻t+1对应的隐藏状态i的前向概率,这样我们得到了前向概率的递推关系式如下:

我们的动态规划从时刻1开始,到时刻T
结束,由于αT(i)表示在时刻T观测序列为o1,o2,...oT,并且时刻T隐藏状态qi的概率,我们只要将所有隐藏状态对应的概率相加,即∑i=1NαT(i)就得到了在时刻T观测序列为o1,o2,...oT
的概率。
下面总结下前向算法。
输入:HMM模型λ=(A,B,Π)
,观测序列O=(o1,o2,...oT)
输出:观测序列概率P(O|λ)
1) 计算时刻1的各个隐藏状态前向概率:
2) 递推时刻2,3,...T
时刻的前向概率:
3) 计算最终结果:
从递推公式可以看出,我们的算法时间复杂度是O(TN2)
,比暴力解法的时间复杂度O(TNT)
少了几个数量级。
3. HMM前向算法求解实例
这里我们用隐马尔科夫模型HMM(一)HMM模型中盒子与球的例子来显示前向概率的计算。
我们的观察集合是:
我们的状态集合是:
而观察序列和状态序列的长度为3.
初始状态分布为:
状态转移概率分布矩阵为:
观测状态概率矩阵为:
球的颜色的观测序列:
按照我们上一节的前向算法。首先计算时刻1三个状态的前向概率:
时刻1是红色球,隐藏状态是盒子1的概率为:
隐藏状态是盒子2的概率为:
隐藏状态是盒子3的概率为:
现在我们可以开始递推了,首先递推时刻2三个状态的前向概率:
时刻2是白色球,隐藏状态是盒子1的概率为:
隐藏状态是盒子2的概率为:
隐藏状态是盒子3的概率为:
继续递推,现在我们递推时刻3三个状态的前向概率:
时刻3是红色球,隐藏状态是盒子1的概率为:
隐藏状态是盒子2的概率为:
隐藏状态是盒子3的概率为:
最终我们求出观测序列:O={红,白,红}
的概率为:
4. 用后向算法求HMM观测序列的概率
熟悉了用前向算法求HMM观测序列的概率,现在我们再来看看怎么用后向算法求HMM观测序列的概率。
后向算法和前向算法非常类似,都是用的动态规划,唯一的区别是选择的局部状态不同,后向算法用的是“后向概率”,那么后向概率是如何定义的呢?
定义时刻t
时隐藏状态为qi, 从时刻t+1到最后时刻T的观测状态的序列为ot+1,ot+2,...oT的概率为后向概率。记为:
后向概率的动态规划递推公式和前向概率是相反的。现在我们假设我们已经找到了在时刻t+1
时各个隐藏状态的后向概率βt+1(j),现在我们需要递推出时刻t时各个隐藏状态的后向概率。如下图,我们可以计算出观测状态的序列为ot+2,ot+3,...oT, t时隐藏状态为qi, 时刻t+1隐藏状态为qj的概率为aijβt+1(j), 接着可以得到观测状态的序列为ot+1,ot+2,...oT, t时隐藏状态为qi, 时刻t+1隐藏状态为qj的概率为aijbj(ot+1)βt+1(j), 则把下面所有线对应的概率加起来,我们可以得到观测状态的序列为ot+1,ot+2,...oT, t时隐藏状态为qi的概率为∑j=1Naijbj(ot+1)βt+1(j),这个概率即为时刻t
的后向概率。

这样我们得到了后向概率的递推关系式如下:
现在我们总结下后向算法的流程,注意下和前向算法的相同点和不同点:
输入:HMM模型λ=(A,B,Π)
,观测序列O=(o1,o2,...oT)
输出:观测序列概率P(O|λ)
1) 初始化时刻T
的各个隐藏状态后向概率:
2) 递推时刻T−1,T−2,...1
时刻的后向概率:
3) 计算最终结果:
此时我们的算法时间复杂度仍然是O(TN2)
。
5. HMM常用概率的计算
利用前向概率和后向概率,我们可以计算出HMM中单个状态和两个状态的概率公式。
1)给定模型λ
和观测序列O,在时刻t处于状态qi的概率记为:
利用前向概率和后向概率的定义可知:
于是我们得到:
2)给定模型λ
和观测序列O,在时刻t处于状态qi,且时刻t+1处于状态qj的概率记为:
而P(it=qi,it+1=qj,O|λ)
可以由前向后向概率来表示为:
从而最终我们得到ξt(i,j)
的表达式如下:
3) 将γt(i)
和ξt(i,j)在各个时刻t
求和,可以得到:
在观测序列O
下状态i出现的期望值∑t=1Tγt(i)
在观测序列O
下由状态i转移的期望值∑t=1T−1γt(i)
在观测序列O
下由状态i转移到状态j的期望值∑t=1T−1ξt(i,j)
上面这些常用的概率值在求解HMM问题二,即求解HMM模型参数的时候需要用到。我们在这个系列的第三篇来讨论求解HMM参数的问题和解法。
(欢迎转载,转载请注明出处。欢迎沟通交流: liujianping-ok@163.com)
hmm前后向算法的更多相关文章
- Java实现:抛开jieba等工具,写HMM+维特比算法进行词性标注
一.前言:词性标注 二.经典维特比算法(Viterbi) 三.算法实现 四.完整代码 五.效果演示: 六.总结 一.前言:词性标注 词性标注(Part-Of-Speech tagging, POS t ...
- hmm和Veterbi算法(一)
只是略微的看了些,有点感觉,还未深入,做个记录. 参考: 隐马尔可夫 (HMM).前 / 后向算法.Viterbi 算法 再次总结 谁能通俗的讲解下 viterbi 算法? 数学之美第二版的第 26 ...
- 在weka中添加libSVM或者HMM等新算法
转:http://kasy-13.blog.163.com/blog/static/8214691420143226365887/ Weka的全名是怀卡托智能分析环境(Waikato Environm ...
- 隐马尔可夫模型(HMM)及Viterbi算法
HMM简介 对于算法爱好者来说,隐马尔可夫模型的大名那是如雷贯耳.那么,这个模型到底长什么样?具体的原理又是什么呢?有什么具体的应用场景呢?本文将会解答这些疑惑. 本文将通过具体形象的例子来引入该模型 ...
- HMM——维特比算法(Viterbi algorithm)
1. 前言维特比算法针对HMM第三个问题,即解码或者预测问题,寻找最可能的隐藏状态序列: 对于一个特殊的隐马尔可夫模型(HMM)及一个相应的观察序列,找到生成此序列最可能的隐藏状态序列. 也就是说给定 ...
- 基于隐马尔科夫模型(HMM)的地图匹配(Map-Matching)算法
文章目录 1. 1. 摘要 2. 2. Map-Matching(MM)问题 3. 3. 隐马尔科夫模型(HMM) 3.1. 3.1. HMM简述 3.2. 3.2. 基于HMM的Map-Matchi ...
- 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率
隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法 ...
- 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列
隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态 ...
- 隐马尔可夫模型(HMM)及Viterbi算法
HMM简介 对于算法爱好者来说,隐马尔可夫模型的大名那是如雷贯耳.那么,这个模型到底长什么样?具体的原理又是什么呢?有什么具体的应用场景呢?本文将会解答这些疑惑. 本文将通过具体形象的例子来引 ...
随机推荐
- cocos2dx 3.0 scrollview 在android下面背景變綠色了
在windows上面跑的是OK的, 在android下面跑的時候就變成這樣子了:
- [Command] lrzsz - 文件传输工具包
lrzsz 是一个支持 XMODEM.YMODEM.ZMODEM 文件传输协议的 Unix 程序包.它是 Omen Technologies 公司所有的 rzsz 程序包的公开发行增强版,遵守 GNU ...
- 转 Mysql性能优化教程
Mysql性能优化教程 背景及目标 厦门游家公司(4399.com)用于员工培训和分享. 针对用户群为已经使用过mysql环境,并有一定开发经验的工程师 针对高并发,海量数据的互联网环境. 本文语言为 ...
- 【laravel5.6】 Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes
在进行数据迁移时候报错: 特殊字段太长报错, php artisan migrate 现在utf8mb4包括存储emojis支持.如果你运行MySQL v5.7.7或者更高版本,则不需要做任何事情. ...
- smarty直接在模板中格式化时间的方法
smarty提供了一个获取时间戳的方法: <%$smarty.now%> 使用该方法获取到当时的时间戳之后,使用格式化修饰符data-format进行修饰: <%$smarty.no ...
- Android 性能分析工具 TraceView
官方地址 http://developer.android.com/tools/debugging/debugging-tracing.html 推荐:http://blog.csdn.net/inn ...
- 异构GoldenGate 12c 单向复制配置
1.分别在windows2008.linux平台部署oracle 11.2.0.4 2.分别在windows2008.linux平台部署gg. 2.1 windows平台: gg的安装目录位 C:\o ...
- nginx(一)----ubuntu14.04下安装nginx
/** * lihaibo * 文章内容都是根据自己工作情况实践得出. *如有错误,请指正 *转载请注明出处 */ 此文章中用到的软件下载地址: 链接: http://pan.baidu.com/s/ ...
- Castle DynamicProxy creation出现COMException(0x800703fa)错误的解决方案
昨天有客户反馈周末重启服务器后,几台服务器上的应用运行全部出错.大致错误内容如下: COMException(0x800703fa):试图在标记为删除的注册表项上进行不合法的操作. 通过查看异常堆栈, ...
- linux常用命令之scp详解
使用scp的前提: 1.服务端启动了sshd服务 2.是本地和远程两端的系统都必须要有scp这个命令.即openssh-clients软件包 [安装方法] [root@ ~]# yum install ...