一文读懂 HMM 模型和 Viterbi 算法


隐含马尔可夫模型(Hidden Markov Model)


隐含马尔可夫模型并不是俄罗斯数学家马尔可夫发明的,而是美国数学家鲍姆提出的,隐含马尔可夫模型的训练方法(鲍姆-韦尔奇算法)也是以他名字命名的。隐含马尔可夫模型一直被认为是解决大多数自然语言处理问题最为快速、有效的方法。


马尔可夫假设


随机过程中各个状态St的概率分布,只与它的前一个状态St-1有关,即P(St|S1,S2,S3,…,St-1) = P(St|St-1)。


比如,对于天气预报,硬性假定今天的气温只与昨天有关而和前天无关。当然这种假设未必适合所有的应用,但是至少对以前很多不好解决的问题给出了近似解。


马尔可夫链


符合马尔可夫假设的随机过程称为马尔可夫过程,也称为马尔可夫链。




在这个马尔可夫链中,四个圈表示四个状态,每条边表示一个可能的状态转换,边上的权值是转移概率。


隐含马尔可夫链是上述马尔可夫链的一个扩展:任一时刻t的状态St是不可见的。所以观察者没法通过观察到一个状态序列S1,S2,S3,…,ST来推测转移概率等参数。但是隐含马尔可夫模型在每个时刻t会输出一个符号Ot,而且Ot和St相关且仅和St相关。这称为独立输出假设。


隐含马尔可夫模型的结构如下图,其中隐含的状态S1,S2,S3,…是一个典型的马尔可夫链。鲍姆把这种模型称为“隐含”马尔可夫模型。



隐含马尔可夫模型的三个基本问题


1、给定一个模型,如何计算某个特定的输出序列的概率? 


Forward-Backward算法


2、给定一个模型和某个特定的输出序列,如何找到最可能产生这个输出的状态序列?


维特比算法


3、给定足够量的观测数据,如何估计隐含马尔可夫模型的参数?


训练隐含马尔可夫模型更实用的方式是仅仅通过大量观测到的信号O1,O2,O3,….就能推算模型参数的P(St|St-1)和P(Ot|St)的方法(无监督训练算法),其中主要使用鲍姆-韦尔奇算法。 


隐含马尔可夫模型的五元组


HMM是一个五元组(O , Q , O0,A , B):


1、O:{o1,o2,…,ot}是状态集合,也称为观测序列。


2、Q:{q1,q2,…,qv}是一组输出结果,也称为隐序列。


3、Aij = P(qj|qi):转移概率分布


4、Bij = P(oj|qi):发射概率分布


5、O0是初始状态,有些还有终止状态。


维特比算法(Viterbi)


1、简介


维特比算法是一个特殊但应用最广的动态规划算法,它是针对篱笆网络的有向图(Lattice)的最短路径问题而提出的。


凡是使用隐含马尔可夫模型描述的问题都可以用维特比算法来解码,包括今天的数字通信、语音识别、机器翻译、拼音转汉字、分词等。



2、维特比算法的基础


1、如果概率最大的路径P(或叫最短路径)经过某个点,比如下图中的X22,那么这条路径上从起始点S到X22的这一段子路径Q,一定是S到X22之间的最短路径。否则,用S到X22的最短路径R替代Q,便构成了一条比P更短的路径,这显然是矛盾的。


2、从S到E的路径必定经过第i时刻的某个状态,假定第i时刻有k个状态,那么如果记录了从S到第i个状态的所有k个节点的最短路径,最终的最短路径必经过其中的一条。这样,在任何时刻,只需要考虑非常有限条最短路径即可。


3、结合上述两点,假定当我们从状态i进入状态i+1时,从S到状态i上各个节点的最短路径已经找到,并且记录在这些节点上,那么在计算从起点S到前一个状态i所有的k个结点的最短路径,以及从这k个节点到Xi+1,j的距离即可。



3、维特比算法总结


(1)从点S出发,对于第一个状态X1的各个节点,不妨假定有n1个,计算出S到它们的距离d(S,X1i),其中X1i代表任意状态1的节点。因为只有一步,所以这些距离都是S到它们各自的最短距离。


(2)对于第二个状态X2的所有节点,要计算出从S到它们的最短距离。对于特点的节点X2i,从S到它的路径可以经过状态1的n1中任何一个节点X1i,对应的路径长度就是d(S,X2i) = d(S,X1i) + d(X1i,X2i)。


由于j有n1种可能性,我们要一一计算,找出最小值。即:d(S,X2i) = minI=1,n1 d(S,X1i) + d(X1i,X2i)

这样对于第二个状态的每个节点,需要n1次乘法计算。假定这个状态有n2个节点,把S这些节点的距离都算一遍,就有O(n1·n2)次计算。


(3)接下来,类似地按照上述方法从第二个状态走到第三个状态,一直走到最后一个状态,就得到了整个网格从头到尾的最短路径。每一步计算的复杂度都和相邻两个状态Si和Si+1各自的节点数目ni,ni+1的乘积成正比,即O(ni·ni+1)


(4)假设这个隐含马尔可夫链中节点最多的状态有D个节点,也就是说整个网格的宽度为D,那么任何一步的复杂度不超过O(D2),由于网格长度是N,所以整个维特比算法的复杂度是O(N·D2)。


HMM模型+维特比算法实例


1、问题描述


假设连续观察3天的海藻湿度为(Dry,Damp,Soggy),求这三天最可能的天气情况。


2、已知信息


(1)天气只有三类(Sunny,Cloudy,Rainy),海藻湿度有四类{Dry,Dryish, Damp,Soggy },而且海藻湿度和天气有一定的关系。


(2)隐藏的状态:Sunny, Cloudy, Rainy;


(3)观察状态序列:{Dry, Damp, Soggy}


(4)初始状态序列:



(5)状态转移矩阵:



(6)发射矩阵:



分析


由一阶HMM可知,Day2的天气仅取决于Day1;Day3的天气又只取决于Day2的天气。


计算过程


1、Day1由于是初始状态,我们分别求


P(Day1-Sunny)=0.63*0.6;

P(Day1-Cloudy)=0.17*0.25;

P(Day1-Rain)=0.20*0.05;


Choose max{ P(Day1-Sunny) , P(Day1-Cloudy),P(Day1-Rainy)}, 得到P(Day1-Sunny)最大,得出第1天Sunny的概率最大。


2、Day2的天气又取决于Day1的天气状况,同时也受Day2观察的海藻情况影响。


P(Day2-Sunny)= max{ P(Day1-Sunny)*0.5, P(Day1-Cloudy)*0.25,  P(Day1-Rainy)*0.25} *0.15;


P(Day2-Cloudy)= max{ P(Day1-Sunny)*0.375,  P(Day1-Cloudy)*0.125, P(Day1-Rainy)*0.625} *0.25;


P(Day2-Rainy)= max{ P(Day1-Sunny)*0.125,  P(Day1-Cloudy)*0.625 , P(Day1-Rainy)*0.375} *0.35;


Choosemax{ P(Day2-Sunny) , P(Day2-Cloudy), P(Day2-Rainy)},得到P(Day2-Rainy)最大,得出第2天Rainy的概率最大。


故{Sunny,Rainy}是前两天最大可能的天气序列。


3、Day3的天气又取决于Day2的天气状况,同时也受Day3观察的海藻情况影响。


P(Day3-Sunny)= max{ P(Day2-Sunny)*0.5, P(Day2-Cloudy)*0.25,  P(Day2-Rainy)*0.25} *0.05;


P(Day3-Cloudy)= max{ P(Day2-Sunny)*0.375,  P(Day2-Cloudy)*0.125, P(Day2-Rainy)*0.625} *0.25;


P(Day3-Rainy)= max{ P(Day2-Sunny)*0.125,  P(Day2-Cloudy)*0.625, P(Day2-Rainy)*0.375} *0. 05;


Choosemax{ P(Day3-Sunny) , P(Day3-Cloudy), P(Day3-Rainy)},得到P(Day3-Rainy)最大,得出第3天Rainy的概率最大。故{Sunny,Rainy,Rainy}是这三天最可能的天气序列。


转自:Denise_hzf

https://www.cnblogs.com/Denise-hzf/p/6612212.html




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

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

相关文章

qtabwidget设置tab高度_VC|富文本编辑框CRichEditCtrl的字体与段落设置

将富文本编辑框设置为2.0,关联一个control变量m_textblock:1 字体设置富文本编辑框关于字体设置的成员函数:BOOL CRichEditCtrl::SetSelectionCharFormat( CHARFORMAT& cf );此成员函数用来设置这个CRichEditCtrl对象中的当前选择的文本的…

css伪类元素加在元素前,CSS伪类:before在元素之前 :after 在元素之后实例讲解

本教程简单的介绍一下关于CSS伪类:before, :after详解,有需要了解的朋友可以参考一下下。:before 伪元素在元素之前添加内容这个伪元素允许创作人员在元素内容的最前面插入生成内容。默认地,这个伪元素是行内元素,不过可以使用属性 display 改…

云计算的关键特点及挑战

本文节选自《云计算:实现、管理与安全》导言 云计算的关键特点 一个云计算环境有几个关键特点。服务经常提供给特定 的看到因他们的资本支出最小化而获益的消费者和小企业。 这有助于降低在市场进入门槛,因为用来提供这些产品的基础设施由云服务提供商拥…

Mock 框架 Moq 的使用

Mock 框架 Moq 的使用IntroMoq 是 .NET 中一个很流行的 Mock 框架,使用 Mock 框架我们可以只针对我们关注的代码进行测试,对于依赖项使用 Mock 对象配置预期的依赖服务的行为。Moq 是基于 Castle 的动态代理来实现的,基于动态代理技术动态生成…

凝思系统改时间_国产操作系统往事:四十年激变,终再起风云

在这一轮技术浪潮中,无论是底层的开发生态,算力的硬件基础,还是五花八门的商业化落地场景,中国企业都有着毋庸置疑的话语输出能力。而另一个全民皆知、中国ICT产业的长期阵痛——国产操作系统,也在2019世界人工智能大会…

程序员必知的 Python 陷阱与缺陷列表

我个人对陷阱的定义是这样的:代码看起来可以工作,但不是以你“想当然“”的方式。如果一段代码直接出错,抛出了异常,我不认为这是陷阱。比如,Python程序员应该都遇到过的“UnboundLocalError”, 示例:>&…

楚乔传手游 服务器维护,楚乔传手游网络异常进不去游戏怎么办?楚乔传网络异常解决方法...

随着楚乔传的大热,手游楚乔传也应运而生,上线后的楚乔传手游版虽然好玩但也出现了许多的BUG和问题,最近有小伙伴说楚乔传手游下载后,打不开一直显示网络异常,但是网都好的,那么楚乔传手游网络异常怎么办?楚…

说说富士康跳楼事件

发生这么多连续悲剧的原因个人认为,除了富士康管理以及员工群体的问题以外,更大的责任还在于媒体的铺天盖地宣传,导致了极强的示范效应。为什么富士康已经存在那么久,之前没有那么多跳楼的,反倒是宣传以后越来越多呢&a…

聊一聊和Nacos 2.0.0对接那些事

前言 nacos 2.0.0 已经发布了 alpha1, alpha2 和 beta 三个版本了,部分测试报告也已经出来了。Nacos2.0.0-ALPHA2 服务发现性能测试报告Nacos 2.0.0-ALPHA2 配置性能测试报告还是比较值得期待的。前段时间也一直在完善 nacos-sdk-csharp 这个项目。主要就是对接 Nac…

网页访问samba服务器,(smbclient) - 交互方式访问samba服务器

smbclient交互方式访问samba服务器补充说明smbclient命令 属于samba套件,它提供一种命令行使用交互式方式访问samba服务器的共享资源。语法smbclient(选项)(参数)选项-B:传送广播数据包时所用的IP地址;-d:指定记录文件所记载事件的…

家用简单电线路图_家庭配电箱接线图解 家用配电箱安装方法

家居装修对水电的关注不可或缺,家庭电路的铺设更是至关重要的环节,其中家庭配电箱安装涉及到家居用电的安全问题。因此,小编特地对家庭配电箱安装的知识,以及家庭配电箱接线图作出相关整理,帮助大家对家庭配电箱有一个…

决策树算法及实现

在计算机科学中,树是一种很重要的数据结构,比如我们最为熟悉的二叉查找树(Binary Search Tree),红黑树(Red-Black Tree)等,通过引入树这种数据结构,我们可以很快地缩小问…

记录一下(session共享的文章,wcf记录一下学习地址,Firebug)

Firebug现在感觉还不错 http://www.cnblogs.com/jzywh/archive/2008/11/02/sharesession.html http://www.cnblogs.com/igtea/archive/2009/02/03/1382825.html http://www.cnblogs.com/artech/archive/2007/09/15/893838.html

ElasticSearch+NLog实现.net core分布式日志管理

概述Elasticsearch可广泛应用于日志分析、全文检索、结构化数据分析等多种场景,大幅度降低维护多套专用系统的成本,在开源社区非常受欢迎。在系统中,如果将日志作为文件输出,查看系统日志将非常不便;如果将日志保存到数…

双路服务器只显示一半内存,双路服务器只显示一半内存

双路服务器只显示一半内存 内容精选换一换北京时间1月3日,Intel处理器芯片被曝出存在严重的Meltdown和Spectre安全漏洞,漏洞详情如下:漏洞名称:Intel处理器存在严重芯片级漏洞漏洞编号:CVE-2017-5753、CVE-2017-5715、…

react 最佳入门_miaov-React 最佳入门

node 环境搭建快速安装国内镜像npm i -g nrmnrm use taobao简单介绍 ES6let constlet 不可以被重复声明,而 var 可以箭头函数等效匿名函数没有 argumentsthis 指向了函数所在的上下文环境函数的返回值let a () > {}; console.log(a); // undefined, 误认为返回的…

javascript常用技巧

1. οncοntextmenu"window.event.returnValuefalse" 将彻底屏蔽鼠标右键 <table border οncοntextmenureturn(false)><td>no</table> 可用于Table 2. <body onselectstart"return false"> 取消选…

不想再被鄙视?那就看进来! 一文搞懂 Python 2 字符编码

程序员都自视清高&#xff0c;觉得自己是创造者&#xff0c;经常鄙视不太懂技术的产品或者QA。可悲的是&#xff0c;程序员之间也相互鄙视&#xff0c;程序员的鄙视链流传甚广&#xff0c;作为一个Python程序员&#xff0c;自然最关心的是下面这幅图啦我们项目组一值使用Python…

mysql的外键_mysql如何查看外键

展开全部查看mysql外键方式主要是通过第三方工具或者62616964757a686964616fe4b893e5b19e31333431373233是sql语句&#xff0c;主要有以下三种方式1、使用Navicateformysql&#xff0c;打开数据库、查看数据库表、查看设计表、选择外键选项卡&#xff0c;就可以查看外键2、使用…

循环递归,相互结合,释放数据的价值

随着经济的发展&#xff0c;目前各行各业已经积累了海量的数据&#xff0c;并且还在持续增长&#xff0c;可是这些数据非常杂乱还占空间&#xff0c;因此&#xff0c;如何有效利用它们&#xff0c;达到资源不浪费也就成为了相关工作者的首要思考问题。此时&#xff0c;数据分析…