上一篇讨论了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. 【刷题】BZOJ 2151 种树

    Description A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树.园林部门得到指令后,初步规划出n个种树的位置,顺时针编号1到n.并且每个位置都有一个美观度 ...

  2. [收藏]:[算法]LRU和LFU的区别

    LRU和LFU是不同的! LRU是最近最少使用页面置换算法(Least Recently Used),也就是首先淘汰最长时间未被使用的页面! LFU是最近最不常用页面置换算法(Least Freque ...

  3. JDK自带线程池介绍及使用环境

    1.newFixedThreadPool创建一个指定工作线程数量的线程池.每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中. 2.newCach ...

  4. eos交易同步过程和区块生产过程源码分析

    交易同步过程 1 通过命令cleos调用 cleos transfer ${from_account} ${to_account} ${quantity} 发起交易2 eos调用chain_plugi ...

  5. NodeJS 笔记 URL模块

    url模块 ,包含分析和解析 URL 的工具. var url = require('url'); url.parse(urlStr[, parseQueryString][, slashesDeno ...

  6. mybatis+sqlserver中返回非自增主键

    首先把实体类贴出来(这里只贴出属性,其它的就是getter和setter方法): public class Around {     private String xccd;  //对应主键      ...

  7. redis支持的数据结构

    redis数据库里面的每个键值对都是由对象组成的. 其中数据库键的值总是字符串对象. 数据库的值则可以是字符串对象(String),列表对象(list),哈希对象(Hash),集合对象(Set),有序 ...

  8. less深度作用域/deep/

    <style lang="less" scoped> .text-box { /deep/ input { width: 166px; text-align: cent ...

  9. SpringBoot入门Demo(Hello Word Boot)

    Spring Boot 是由Pivotal团队提供的全新框架,其设计目的是用来简化新的Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. ...

  10. spring框架学习(二)使用注解代替xml配置

    注解 1.使用注解配置spring 1)开启使用注解代理配置文件 <?xml version="1.0" encoding="UTF-8"?> &l ...