机器学习笔记(十四)——HMM估计问题和前向后向算法

一、隐马尔科夫链的第一个基本问题

    估计问题:给定一个观察序列O=O1O2OT和模型u=(A,B,π),如何快速地计算出给定模型u情况下,观察序列O的概率, 即P(O|u)?

二、求解观察序列的概率

    其实,求解这个问题就是一个解码问题。 对于任意的状态序列Q=q1q2qT,有

P(O|Q,u)=t=1T1P(Ot|qt,qt+1,u)=bq1(O1)bq2(O2)bqT(OT)

并且
P(Q|u)=πq1aq1q2aq2q3aqT1qT

由于
P(O,Q|u)=P(O|Q,u)P(Q|u)

所以
P(O|u)=QP(O,Q|u)QP(O|Q,u)P(Q|u)=Qπq1bq1(O1)t=1T1aqtqt+1bqt+1(Ot+1)

上述推导过程很直接,但是实际的计算量是非常庞大的,它要穷尽所有可能的状态序列,如果模型中有 N个状态,时间长度为T, 那么有 NT个可能的状态序列,这导致了并不能有效地执行这个算法。因此,人们提出了前向算法,利用动态规划来解决指数爆炸的问题。

三、HMM中的前向算法

    为了实现前向算法,需要定义一个前向变量αt(i).
定义1 前向变量αt(i)是在时间t, HMM输出序列O=O1O2Ot并且位于状态si的概率

αt(i)=P(O1O2Ot,qt=si|u)

    前向算法的主要思想是,如果可以快速地计算前向变量αt(i),那么就可以根据αt(i)计算出P(O|u), 因为P(O|u)是在所有状态下观察到序列O=O1O2Ot的概率:

P(O|u)=siP(O1O2OT,qT=si|u)=i=1NαT(i)

    在前向算法中,采用动态规划的方法计算前向变量 αt(i),其思想基于如下观察:在时间t+1的前向变量可以根据时间t时的前向变量 αt(1)αt(2),αt(N)来归纳计算:
αt+1(j)=(i=1Nαt(i)aij)bj(Ot+1)

前向算法

1 初始化: α1(i)=πibi(O1),1iN
2 归纳计算: αt+1(j)=(Ni=1αt(i)aij)bj(Ot+1),1tT1
3 求和终结: P(O|u)=Ni=1αT(i)

前向算法的时间复杂度为O(N2T)

四、HMM中的后向算法

    快速计算P(O|u)还有一种后向算法。
对应于前向变量,定义一个后向变量βt(i).
定义2 后向变量βt(i)是在给定模型u=(A,B,π)并且在时间t状态为si的条件下,HMM的输出观察序列O=Ot+1Ot+2OT的概率:

βt(i)=P(Ot+1Ot+2OT|qt=si|u)

    类似于前向算法,也可以用动态规划算法计算后向变量。
1. 从时间 t到时间t+1, HMM的状态 si到状态 sj输出 Ot+1,概率为 aijbj(Ot+1)
2. 在时间 t+1的状态为 sj的条件下,HMM输出观察序列 Ot+2OT,概率为: βt+1(j)
则,归纳关系为:
βt(i)=j=1Naijbj(Ot+1)βt+1(j)

后向算法

1 初始化:βT(i)=1,1iN
2 归纳计算:βt(i)=Nj=1aijbj(Ot+1)βt+1(j),T1t1;1iN
3 求和终结:P(O|u)=Ni=1πibi(O1)β1(i)

后向算法的时间复杂度为O(N2T)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows中架设基于Apache的svn服务器

1.安装apache及svn的windows版我安装的版本是:httpd-2.2.22-win32-x86-openssl-0.9.8t.msi 和svn-win32-1.5.0.zipsvn是解压就可以了2. 解svn安装目录下\bin下的mod_authz_svn.so、mod_dav_svn.so拷贝到apache/modules下3.将 svn安装目录下\bin下的libdb44.dll拷贝到apache/bin…

ElasticSearch通配符 * 查询(英文检索)

#如果你要查询的字段信息记得不太清楚, 我们也可以使用通配符 * GET /lib3/user/_search {"from":0, "size": 2,"_source": {"includes": "addr*","excludes": ["name" , "bir*"]},"…

sqlserver agent不能启动

我启动了 event log 服务 ,就好了,不知什么原因转载于:https://www.cnblogs.com/laogao/archive/2012/03/11/2390794.html

机器学习笔记(十五)——HMM序列问题和维特比算法

一、引言 这篇blog主要讲序列问题和其解法——维特比算法。 二、HMM中的第二个基本问题 序列问题:给定一个观察序列OO1O2…OT和模型u(A,B,π),如何快速有效地选择在一定意义下”最优”的状态序列Qq1q2…qT,使得该状态序列“最好地解释”观察序列&#…

ElasticSearch范围查询(英文检索)

#根据日期范围查询 #范围查询 GET /lib3/user/_search {"query": {"range": {"birthday": {"from": "1990-10-10","to": "2020-03-15"}}} }{"took" : 24,"timed_out" : false,&qu…

(转)CDN是如何工作的?

转载自:CDN是如何工作的? CDN是互联网中使用较频繁的一种技术。你也许常听人说:“我们的网站使用了CDN技术”,但可能他们对CDN的了解并不多,也许只局限于--用了以后网站访问速度会变快。 其实,CDN的原理非常…

ElasticSearch前缀匹配查询(英文检索)

#前缀匹配查询 #前缀匹配查询 GET /lib3/user/_search {"query": {"match_phrase_prefix": {"name":{"query":"zhao"}}} }{"took" : 59,"timed_out" : false,"_shards" : {"total&quo…

机器学习笔记(十六)——EM算法概述

一、引言 按照计划,这周应该学习HMM中的第三个基本问题:参数估计问题,但是其中的内容涉及到了EM算法,所以打算先把EM算法搞定之后再去继续HMM的问题。EM算法的推导过程比较复杂,这节我只给出简述和计算公式&#xff0c…

c# 日期函数[string.Format----GetDateTimeFormats] --转载

c# 日期函数[string.Format----GetDateTimeFormats] c# 日期函数 DateTime dt DateTime.Now;Label1.Text dt.ToString();//2005-11-5 13:21:25Label2.Text dt.ToFileTime().ToString();//127756416859912816Label3.Text dt.ToFileTimeUtc().ToString();//12775670485991281…

ElasticSearch wildcard查询(英文检索)

wildcard查询 允许使用通配符*和?来进行查询 *代表0个或多个字符 工代表任意1个字符 GET /ib3/user/ search { "query": { "wildcard":{ "name": *zhao* }}} GET /ib3/user/ search { "query": { "wildcard":{ *name"…

机器学习笔记(十七)——EM算法的推导

一、Jensen 不等式 在EM算法的推导过程中,用到了数学上的Jensen不等式,这里先来介绍一下。 若Ω是有限集合{x1,x2,…,xn}{x1,x2,…,xn},而μ是Ω上的正规计数测度,则不等式的一般形式可以简单地用和式表示: φ(∑i1ng(xi)λi)≤…

CCTextureCache的多线程加载原理和使用

做引擎的时候,遇到一个texture的异步加载,这里将具体的原理和使用方法贴出来,后面根据浏览器的特性做修改移植。 voidCCTextureCache::addImageAsync(constchar *path, CCObject *target, SEL_CallFuncO selector) { CCAssert(path ! NULL, …

ElasticSearch fuzzy模糊查询(英文检索)

fuzzy实现模糊查询 value:查询的关键字 boost:查询的权值,默认值是1.0 min_similarity:设置匹配的最小相似度,默认值为0.5, 对于字符串,取值为0-1(包括0和1);对于数值,取值可能大于1;对于日期型取值为1d,1m等,1d就代表1天 prefix…

机器学习笔记(十八)——HMM的参数估计

一、HMM中的第三个基本问题 参数估计问题:给定一个观察序列OO1O2…OT,如何调节模型μ(A,B,π)的参数,使得P(O|μ)最大化: argmaxμP(Otraining|μ)arg \max_{\mu} P(O_{training}|\mu)模型的参数是指构成μ的πi,aij,bj(k)。本文…

[Pyramid 杂记]Static Routes,静态路由是用来干什么的?

官方文档上介绍说Static Routes(即添加路由时指定static参数为True,config.add_route(page, /page/{action}, staticTrue)),在匹配Request Url时不会被用来匹配,它只用于生成URL. 这哥就很奇怪,只用于生成URL,而不会被匹配,就是说生成的URL不会被匹配到了嘛(有点拗口 …),那要这…

ElasticSearch highlight搜索结果高亮显示(英文检索)

高亮显示搜索结果(使用highlight) #高亮搜索结果 GET /lib3/user/_search {"query":{"match":{"interests": "changge" } }, "highlight": { "fields": {"interests":{}}}}{&qu…

最优化学习笔记(十二)——基本共轭方向算法(续)

目标函数为n维二次型函数时,共轭方向法能够在n步迭代之后得到极小点。接下来会发现,共轭方向法的中间迭代步骤具有一种很有意义的性质。选定x(0)作为迭代初始点, d(0)为初始搜索方向, 有: x(1)x(0)−(g(0)Td(0)d(0)TQd(0))d(0)\…

C++ 入门笔记1

一.关于注释 注释总是以 /* 开始并以 */ 结束。这意味着,一个注释对不能出现在另一个注释对中。由注释对嵌套导致的编译器错误信息容易使人迷惑。 当注释掉程序的一大部分时,似乎最简单的办法就是在要临时忽略的区域前后放一个注释对。问题是如果那段代码…

基本查询(Query查询中文)

查询语句: GET /lib4/user/_search {"query": {"term": {"interests":"唱歌"}} }#terms:查询某个字段里含有多个关键词的文档 GET /lib4/user/_search {"query":{"terms":{"interests": …

C#实现POST提交方式

网页自动登录和提交POST信息的核心就是分析网页的源代码(HTML),在C#中,可以用来提取网页HTML的组件比较多,常用的用WebBrowser、WebClient、HttpWebRequest这三个。 以下就分别用这三种方法来实现: 1、WebB…