上一篇讨论了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算法的更多相关文章

  1. 数学之美——HMM模型(一)介绍

    一直想写点关于数学方面的blog,这对于数据挖掘分析,NLP处理等都有着比较重要的作用,之前在CSDN上想写点HMM方面的文章,一直没写成,最近几天终于抽点时间完成了HMM的文章,加以整理,遂有这个系 ...

  2. 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列

    隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态 ...

  3. 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率

    隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法 ...

  4. 隐马尔科夫模型HMM(一)HMM模型

    隐马尔科夫模型HMM(一)HMM模型基础 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比 ...

  5. 条件随机场CRF(三) 模型学习与维特比算法解码

    条件随机场CRF(一)从随机场到线性链条件随机场 条件随机场CRF(二) 前向后向算法评估标记序列概率 条件随机场CRF(三) 模型学习与维特比算法解码 在CRF系列的前两篇,我们总结了CRF的模型基 ...

  6. HMM条件下的 前向算法 和 维特比解码

    一.隐马尔科夫HMM如果: 有且仅仅有3种天气:0晴天.1阴天.2雨天 各种天气间的隔天转化概率mp: mp[3][3] 晴天 阴天 雨天 晴天 0.33333 0.33333 0.33333 阴天 ...

  7. 数学之美 zt

    数学是美丽的,哪里有数哪里就有美. 数学的定义是研究数量关系和空间形式的一门科学.但有句名言说:数学比科学大得多,因为它是科学的语言.数学不仅用来写科学,而且可用来写人生.所以说数学是一切学科的基础, ...

  8. HMM模型

    通过前几时断续的学习,发现自己对HMM模型的了解还只停留在皮毛,导致在学习CRF模型并将其与最大熵模型.HMM.MEMM做比较时感觉很吃力,所以又花了两天时间使劲看了遍HMM,发现了解得确实深刻了很多 ...

  9. HMM模型学习笔记(维特比算法)

    维特比算法(Viterbi) 维特比算法  编辑 维特比算法是一种动态规划算法用于寻找最有可能产生观测事件序列的-维特比路径-隐含状态序列,特别是在马尔可夫信息源上下文和隐马尔可夫模型中.术语“维特比 ...

随机推荐

  1. Again Prime? No Time. UVA - 10780(质因子分解)

    m^k就是让m的每个质因子个数都增加了k倍 求m的质因子 在n!中增加了多少倍就好了,因为m^k 表示每一个质因子增加相同的倍数k  所以我们需要找到增加倍数最小的那个..短板效应  其它质因子多增加 ...

  2. Django_博客_XSS 攻击防范

    背景: 博客项目中用户后台添加文章时,若通过富文本编辑器输入 标签内容或者 js 指令会导致文章排版错乱,甚至进行XSS攻击 攻击现象: 文本内容输入 js 指令 文章描述时正确显示其文本内容 但在打 ...

  3. 【BZOJ1005】[HNOI2008]明明的烦恼(prufer序列)

    [BZOJ1005][HNOI2008]明明的烦恼(prufer序列) 题面 BZOJ 洛谷 题解 戳这里 #include<iostream> #include<cstdio> ...

  4. 【poj3415】 Common Substrings

    http://poj.org/problem?id=3415 (题目链接) 题意 给定两个字符串 A 和 B,求长度不小于 k 的公共子串的个数(可以相同). Solution 后缀数组论文题... ...

  5. SoapUI使用笔记备忘

    1.安装好SoapUI后,新建一个REST项目 注意新建REST项目时,需要输入测试站点的地址,即IP+端口 之后点击OK就建立好了项目,但是新项目会默认自带一个根路径访问请求,可以删除(一般没用) ...

  6. virtualbox 迁移虚拟机存储位置

    1. 菜单--管理--全局设定 ,更改 默认虚拟电脑位置. 2. 复制 (移动)现有虚拟机目录到新位置,软件里删除现有虚拟机 3. 菜单--控制--注册,逐个选择虚拟机目录里的 .vbox文件,导进虚 ...

  7. Java基础-赋值运算符Assignment Operators与条件运算符Condition Operators

    Java基础-赋值运算符Assignment Operators与条件运算符Condition Operators 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.赋值运算符 表 ...

  8. 使用easyui实现双击列表中某个值直接对其进行修改

    var editCell = undefined; $('#dg').datagrid({ url:'DwzServlet', iconCls:'icon icon-list' , queryPara ...

  9. json字符串和Json对象,以及json的基本了解

    考虑到python等语言中没有更好表示json对象的方法,所以使用JavaScript来介绍json 首先是json字符串: var str1 = '{ "name": " ...

  10. 在ajax请求后台时在请求标头RequestHeader加token

    情景:为了保证系统数据的安全性,一般前后台之间的数据访问会有授权与验证,这里的Token机制相对于Cookie支持跨域访问,在RESTful API里面,验证一般可以使用POST请求来通过验证,使服务 ...