Hidden Markov Models

下面我们给出Hidden Markov Models(HMM)的定义,一个HMM包含以下几个要素:

∏=(πi)表示初始状态的向量。A={aij}状态转换矩阵,里面的元素表示概率:Pr(xki|xk−1j)B={bij}confusion矩阵,表示可观察变量与隐藏变量的转换概率:Pr(yi)|Pr(xj)

值得注意的一点是,这里面定义的概率都是与时间不相关的,意味着这些概率不会随着时间的变化而变化,这一点假设与实际情况不符合,但是将问题大大简化了。

如果一个系统可以用HMM来描述,那么HMM模型可以解决三类问题:

Evaluation:

通过HMM得到可观察变量的概率。这类问题属于识别问题,假设我们有很多描述不同系统的

HMM模型,和一组观察变量,我们想知道哪个HMM模型与这组观察变量最匹配,及最有可能生成这组观察变量。我们会用一种forward算法去计算每个HMM模型生成这组观察变量的概率,然后挑选生成概率

最大的HMM模型。这类问题最常见的是用于语音识别,语音识别会用到很多HMM模型,每个HMM模型都modeling一个特定的词汇,而观察变量就是一个说出口的词汇,那么找出最有可能生成这个词汇的HMM,从而确认该词汇是什么。

Decoding:

找到最可能生成可观察变量的隐藏变量。这是第二类问题,一般是寻找隐藏变量,通过观察变量,寻找隐藏变量。比如最初的天气系统,我们能够利用的观察变量(海草的状态),但是我们希望预测的是隐藏变量(天气)。我们会介绍Viterbi算法来解决这类问题。

Learning:

给定可观察变量,生成一个HMM。第三类问题,通常是最困难的一类问题,就是通过一组观察变量,以及观察变量与隐藏变量的关系(这里的关系不是转换矩阵,只是观察变量与隐藏变量的相关性),确定一个最佳的HMM模型,也就是要求出HMM的(πi,A,B)。我们会介绍forward-backward算法来解决这类问题。

接下来,我们将详细讨论这三类问题和相应的算法。

Forward Algorithm

第一类问题是给定HMM模型,求解可观察变量的概率,我们仍然以天气预测为例,假设我们有一个HMM模型描述天气之间的转换关系,以及天气与海草的状态之间关系,现在我们有一组观察变量,比如说海草连续三天的状态,假设这三天的状态分别为(dry,damp,soggy),这三天的天气可能是晴天,雨天或多云的任何一种,我们用下图表示天气

与海草的状态之间的关系:

图中上面三行的每一列显示了可能的天气,而天气的每一个状态又会影响到下一天的天气状态,所以它们之间相互连接,天气之间的转换关系由状态转换矩阵给出,最下面一行是观察变量,隐藏变量生成观察变量的概率由confusion矩阵给出。要计算这个HMM模型生成观察变量的概率,最直观的一种方式是把所有可能路径的概率相加,在图上所示的模型里,有27种路径,所有要把27个概率之和相加,这显然是非常耗时的。

所以,我们换个角度考虑,我们采用一种递归的方式去计算观察变量的概率,我们先定义一个局部的概率用来表示马尔科夫过程到达一个中间状态的概率,我们先来看看如何计算这些中间概率,假设整个可观察变量序列长度为T,(Y1,Y2,...YT),考虑如下的一张图,给出了可观察变量的状态以及一阶转换关系,我们可以计算该模型到达某一中间状态的概率,就是所有到达该中间状态的路径的概率之和,比如我们想计算t=2时隐藏变量为Cloudy的概率:

所有到达Cloudy的路径可以由下图表示:

我们定义状态j在t时刻的局部概率为Pat(j),那么该局部概率可以表示为:

Pat(j)=Pr(observation | hidden state is j )×Pr(all paths to state j at time t)

由此类推,该观察序列里,最后一个观察变量所对应的几个隐藏变量的局部概率包括了该HMM模型中,所有路径的概率之和,下图给出了该HMM模型最后一列状态的局部概率,

可以看到,该局部概率包括了该HMM模型的所有路径,所以这些局部概率之和就等于所有路径的概率之和,也就等于该HMM模型所生成的观察变量序列的概率。

虽然我们给出状态j在t时刻的局部概率表达式,但是对于t=1,即初始状态的局部概率,没有路径到达初始状态,我们用初始概率向量π定义状态的初始概率,即:

Pr(state|t=1)=π(state),因此初始状态j的局部概率为状态j的初始概率乘以associated observation概率:

Pat=1(j)=π(j)⋅bj,t=1

我们已经给出了隐藏变量在初始状态的局部概率,也给出了隐藏变量在后续时刻的局部概率为:Pat(j)=Pr(observation | hidden state is j )×Pr(all paths to state j at time t),该表示中,右边的第一项是可以由confusion矩阵得到的,而为了计算右边的第二项,我们可以计算每个到达该状态的路径的概率,然后将所有的概率相加,如下图所示:

随着时序的增加,我们可以看到,要计算的路径会以指数级增长,但是由于这些局部概率之间存在的递归关系,我们可以用下列式子表示t+1时刻的局部概率与t时刻局部

概率的关系:

Pat+1(j)=bj,t+1∑i=1nPat(i)⋅aij

通过这几个表达式,我们可以计算一个观察序列在t=1,2,...T时刻的局部概率,然后将t=T时刻的局部概率相加,就是该HMM模型产生该观察序列的概率。

我们重新总结一下这个算法,利用forward算法计算一个时序长度为T的观察序列的概率,观察序列我们定义为如下所示:

YT=y1,y2,...yT

其中,y表示观察变量的某个状态。隐藏变量的局部概率我们定义为:

Pat=1(j)=π(j)⋅bj,t=1Pat+1(j)=bj,t+1∑i=1nPat(i)⋅aij

而最终该观察序列的概率为:

Pr(Y)=∑j=1nPat=T(j)

所以通过给定的HMM模型,我们可以计算一个观察序列的概率。如果给定了一个观察序列,想要找到最匹配该观察序列的HMM模型,我们可以选择生成该观察序列的概率最高的HMM模型。

参考来源:

http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/main.html

机器学习 Hidden Markov Models 2的更多相关文章

  1. 机器学习 Hidden Markov Models 1

    Introduction 通常,我们对发生在时间域上的事件希望可以找到合适的模式来描述.考虑下面一个简单的例子,比如有人利用海草来预测天气,民谣告诉我们说,湿漉漉的海草意味着会下雨,而干燥的海草意味着 ...

  2. 机器学习 Hidden Markov Models 3

    Viterbi Algorithm 前面我们提到过,HMM的第二类问题是利用HMM模型和可观察序列寻找最有可能生成该观察序列的隐藏变量的序列.简单来说,第一类问题是通过模型计算生成观察序列的概率,而第 ...

  3. 隐马尔科夫模型(Hidden Markov Models)

    链接汇总 http://www.csie.ntnu.edu.tw/~u91029/HiddenMarkovModel.html 演算法笔记 http://read.pudn.com/downloads ...

  4. PRML读书会第十三章 Sequential Data(Hidden Markov Models,HMM)

    主讲人 张巍 (新浪微博: @张巍_ISCAS) 软件所-张巍<zh3f@qq.com> 19:01:27 我们开始吧,十三章是关于序列数据,现实中很多数据是有前后关系的,例如语音或者DN ...

  5. 隐马尔科夫模型(Hidden Markov Models) 系列之三

    转自:http://blog.csdn.net/eaglex/article/details/6418219 隐马尔科夫模型(Hidden Markov Models) 定义 隐马尔科夫模型可以用一个 ...

  6. [Bayesian] “我是bayesian我怕谁”系列 - Markov and Hidden Markov Models

    循序渐进的学习步骤是: Markov Chain --> Hidden Markov Chain --> Kalman Filter --> Particle Filter Mark ...

  7. Hidden Markov Models笔记

    Andrew Ng CS229 讲义: https://pan.baidu.com/s/12zMYBY1NLzkluHNeMNO6MQ HMM模型常用于NLP.语音等领域. 马尔科夫模型(Markov ...

  8. 隐马尔科夫模型(Hidden Markov Models) 系列之五

    转自:http://blog.csdn.net/eaglex/article/details/6458541 维特比算法(Viterbi Algorithm) 找到可能性最大的隐藏序列 通常我们都有一 ...

  9. 隐马尔科夫模型(Hidden Markov Models) 系列之四

    转自:http://blog.csdn.net/eaglex/article/details/6430389 前向算法(Forward Algorithm) 一.如果计算一个可观察序列的概率?   1 ...

随机推荐

  1. dbms_metadata.get_ddl的使用总结

    https://blog.csdn.net/newhappy2008/article/details/34823339

  2. Google代码风格配置文件(Java)(IDEA/Eclipse)

    官网:http://www.cnblogs.com/EasonJim/p/7837474.html 下载: 安装: IDEA/Eclipse导入相应文件即可. 说明: Google代码风格文件的缩进是 ...

  3. SQL2000数据库密码被替换,重置密码提示未能找到存储过程sp_password解决方案

    利用windows身份验证进入查询分析器后在master数据库下运行如下脚本: create procedure sp_password @old sysname = NULL, -- the old ...

  4. 管理weblogic服务的启动和停止

    2012-11-10 12:58 26036人阅读 评论(4) 收藏 举报 分类: WebLogic(10) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 介绍 Weblog ...

  5. 如何快速的开发一个完整的iOS直播app(美颜篇)

    前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,美颜功能是很重要的,如果没有美颜功能,可能分分钟钟掉粉千万,本篇主要讲 ...

  6. git 更新远程分支

    使用git的时候,有时候会出现远端更新了一个分支,但是从本地想checkout一个远程分支时,会出现如下错误: fatal: git checkout: updating paths is incom ...

  7. IE浏览器打不开解决的方法

    windows 7和windows 8上的IE浏览器打不开.非常可能是权限问题,解决的方法: 点击"開始"-"执行",输入"regedit" ...

  8. CVE-2014-4114 和 CVE-2014-3566

     这两天关注安全的人员都会特别留意这两个新披露的漏洞:CVE-2014-4114 和 CVE-2014-3566.以下我们就针对这两个漏洞最一些简要说明. CVE-2014-4114------- ...

  9. Andriod DiskLruCache的使用案例

    DiskLruCache是谷歌推荐的用来实现硬盘缓存的类,本案例将对DiskLruCache的基本用法做一个总结,包括:创建缓存.查找使用缓存.移除缓存等等. 实现效果图 创建DiskLruCache ...

  10. insertion-sort-list——链表、插入排序、链表插入

    Sort a linked list using insertion sort. PS:需要考虑left为head且只有一个数时,此时left->==NULL,若right<left则应更 ...