算法原理

隐形马尔可夫模型,英文是 Hidden Markov Models,所以以下就简称 HMM。既是马尔可夫模型,就一定存在马尔可夫链,该马尔可夫链服从马尔可夫性质:即无记忆性。也就是说,这一时刻的状态,受且只受前一时刻的影响,而不受更往前时刻的状态的影响。
    使用非常简单的天气模型来做说明

在这个马尔可夫模型中,存在三个状态,Sunny, Rainy, Cloudy,同时图片上标的是各个状态间的转移概率(如果不明白什么是转移概率,那建议先去学习什么是马尔可夫再来看HMM)。现在我们要说明什么是 HMM。既是隐形,说明这些状态是观测不到的,相应的,我们可以通过其他方式来『猜测』或是『推断』这些状态,这也是 HMM 需要解决的问题之一。
      举个例子,我女朋友现在在北京工作,而我还在法国读书。每天下班之后,她会根据天气情况有相应的活动:或是去商场购物,或是去公园散步,或是回家收拾房间。我们有时候会通电话,她会告诉我她这几天做了什么,而闲着没事的我呢,则要通过她的行为猜测这几天对应的天气最有可能是什么样子的。
      以上就是一个简单的 HMM,天气状况属于状态序列,而她的行为则属于观测序列。天气状况的转换是一个马尔可夫序列。而根据天气的不同,有相对应的概率产生不同的行为。在这里,为了简化,把天气情况简单归结为晴天和雨天两种情况。雨天,她选择去散步,购物,收拾的概率分别是0.1,0.4,0.5, 而如果是晴天,她选择去散步,购物,收拾的概率分别是0.6,0.3,0.1。而天气的转换情况如下:这一天下雨,则下一天依然下雨的概率是0.7,而转换成晴天的概率是0.3;这一天是晴天,则下一天依然是晴天的概率是0.6,而转换成雨天的概率是0.4. 同时还存在一个初始概率,也就是第一天下雨的概率是0.6, 晴天的概率是0.4.

根据以上的信息,我们得到了 HMM的一些基本要素:初始概率分布 π,状态转移矩阵 A,观测量的概率分布 B,同时有两个状态,三种可能的观测值。现在,重点是要了解并解决HMM 的三个问题。
      问题1,已知整个模型,我女朋友告诉我,连续三天,她下班后做的事情分别是:散步,购物,收拾。那么,根据模型,计算产生这些行为的概率是多少。
      问题2,同样知晓这个模型,同样是这三件事,我女朋友要我猜,这三天她下班后北京的天气是怎么样的。这三天怎么样的天气才最有可能让她做这样的事情。
      问题3,最复杂的,我女朋友只告诉我这三天她分别做了这三件事,而其他什么信息我都没有。她要我建立一个模型,晴雨转换概率,第一天天气情况的概率分布,根据天气情况她选择做某事的概率分布。

而要解决这些问题,伟大的大师们分别找出了对应的算法。问题一,Forward Algorithm,向前算法,或者Backward Algo,向后算法。 问题二,Viterbi Algo,维特比算法。问题三,Baum-Welch Algo,鲍姆-韦尔奇算法。

问题1的解决1:遍历算法
      要计算产生这一系列行为的概率,那我们把每一种天气情况下产生这些行为都罗列出来,那每种情况的和就是这个概率。有三天,每天有两种可能的天气情况,则总共有 2的三次=8种 情况.举例其中一种情况 : P(下雨,下雨,下雨,散步,购物,收拾)=P(第一天下雨)P(第一天下雨去散步)P(第二天接着下雨)P(下雨去购物)P(第三天还下雨)P(下雨回家收拾)=0.6X0.1X0.7X0.4X0.7X0.5=0.00588当然,这里面的 P(第二天接着下雨)当然是已知第一天下雨的情况下,第二天下雨的概率,为0.7.将八种情况相加可得,三天的行为为{散步,购物,收拾}的可能性为0.033612. 看似简单易计算,但是一旦观察序列变长,计算量就会非常庞大(的复杂度,T 为观测序列的长度)

问题1 的解决2:向前算法

先计算 t=1时刻,发生『散步』一行为的概率,如果下雨,则为 P(散步,下雨)=P(第一天下雨)X P(散步 | 下雨)=0.6X0.1=0.06;晴天,P(散步,晴天)=0.4X0.6=0.24t=2 时刻,发生『购物』的概率,当然,这个概率可以从 t=1 时刻计算而来。如果t=2下雨,则 P(第一天散步,第二天购物, 第二天下雨)= 【P(第一天散步,第一天下雨)X P(第二天下雨 | 第一天下雨)+P(第一天散步,第一天晴天)X P(第二天下雨 | 第一天晴天)】X P(第二天购物 | 第二天下雨)=【0.06X0.7+0.24X0.3】X0.4=0.0552如果 t=2晴天,则 P(第一天散步,第二天购物,第二天晴天)=0.0486 (同理可得,请自行推理)如果 t=3,下雨,则 P(第一天散步,第二天购物,第三天收拾,第三天下雨)=【P(第一天散步,第二天购物,第二天下雨)X P(第三天下雨 | 第二天下雨)+ P(第一天散步,第二天购物,第二天天晴)X P(第三天下雨 | 第二天天晴)】X P(第三天收拾 | 第三天下雨)=【0.0552X0.7+0.0486X0.4】X0.5= 0.02904如果t=3,晴天,则 P(第一天散步,第二天购物,第三天收拾,第三天晴天)= 0.004572那么 P(第一天散步,第二天购物,第三天收拾),这一概率则是第三天,下雨和晴天两种情况的概率和。0.02904+0.004572=0.033612.以上例子可以看出,向前算法计算了每个时间点时,每个状态的发生观测序列的概率,看似繁杂,但在 T 变大时,复杂度会大大降低。
问题1的解决3:向后算法
      顾名思义,向前算法是在时间 t=1的时候,一步一步往前计算。而相反的,向后算法则是倒退着,从最后一个状态开始,慢慢往后推。
      初始化:Β3(Raniny)=1,Β3(sunny)=1

问题2的解决:维特比算法
      用维特比算法针对HMM三大问题中的解码问题(给定模型和观测序列,如何找到与此观测序列最匹配的状态序列的问题)进行求解。问题描述如下:

首先,我们已经知道状态序列X会产生观测序列O:

但是观测序列O对应的状态序列X有很多种可能,每种都有概率,如下所示,比如wo可能有三种可能:喔、我、沃

那么其实问题就变成了最大概率问题,把概率最大的理解为路径最短,转换为了求解最短路径问题:(为了方便标记,标记为了下图中的字母)

算法解决:

接下来就用到了维特比算法求解最短路径,实质上是一种动态规划,把大问题化解为小问题:步骤1、A->B:

步骤2、A->B->C:

步骤3、A->B->C->D:

步骤4、A->B->C->D->E:

最终就得到了A->E的最短路径A->B1->C2->D2->E1,至此,找到了wo ai zhong guo对应的概率最大的中文汉字组合为:我爱中国。

问题3的解决:Baum-Welch 算法。

此问题的复杂度要远远高于前两种算法,不是简单解释就能说的清楚的了。

python 工具包
见链接

HMM算例 python 有代码


参考文献:
https://www.zhihu.com/question/20962240/answer/64187492

一文带你了解隐马尔科夫模型相关推荐

  1. 一文读懂NLP之隐马尔科夫模型(HMM)详解加python实现

    一文读懂NLP之隐马尔科夫模型(HMM)详解加python实现 1 隐马尔科夫模型 1.1 HMM解决的问题 1.2 HMM模型的定义 1.2.1HMM的两个假设 1.2.2 HMM模型 1.3 HM ...

  2. 一文讲透:HMM隐马尔科夫模型

    一.马尔科夫模型 1 马尔科夫的几个概念 要想理解隐马尔科夫模型,首先要理解马尔科夫模型. 下面通过一个天气变化的例子来认识马尔科夫模型中的几个重要概念.

  3. 第十九课.隐马尔科夫模型

    目录 隐马尔科夫模型的结构 马尔科夫链与隐马尔科夫模型 实例 HMM的要素 模型的性质 推理问题:HMM的状态解码 隐状态解码问题 最大路径概率与维特比算法 使用维特比算法解码 实例演示 基于Pyth ...

  4. 【NLP】用于语音识别、分词的隐马尔科夫模型HMM

    大家好,今天介绍自然语言处理中经典的隐马尔科夫模型(HMM).HMM早期在语音识别.分词等序列标注问题中有着广泛的应用. 了解HMM的基础原理以及应用,对于了解NLP处理问题的基本思想和技术发展脉络有 ...

  5. 隐马尔科夫模型C#语言算法实现

    开发工具: Visual Studio v2010 .NET Framework 4 Client Profile 版本历史: V1.1 2011年06月09日 修正UMDHMM在Baum-Welch ...

  6. 【深度】从朴素贝叶斯到维特比算法:详解隐马尔科夫模型

    详解隐马尔科夫模型 作者:David S. Batista 选自:机器之心 本文首先简要介绍朴素贝叶斯,再将其扩展到隐马尔科夫模型.我们不仅会讨论隐马尔科夫模型的基本原理,同时还从朴素贝叶斯的角度讨论 ...

  7. hmm 求隐藏序列_自然语言处理(3)隐马尔科夫模型 HMM

    1 前言 隐马尔科夫模型(Hidden Markov Model,以下简称 HMM)是比较经典的机器学习模型了,它在语音识别,自然语言处理,模式识别等领域得到广泛的应用.隐马尔科夫模型继承了马尔科夫链 ...

  8. 【火炉炼AI】机器学习044-创建隐马尔科夫模型

    [火炉炼AI]机器学习044-创建隐马尔科夫模型 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2 ...

  9. 深度学习:隐马尔科夫模型

    概率图 隐马尔科夫模型属于概率图范畴,简单介绍一下概率图模型,概率图模型(probabilistic graphical model)是一类用图的形式表示随机变量之间条件依赖关系的概率模型,是概率论与 ...

最新文章

  1. 人形图案c语言程序_做游戏,学编程(C语言) 7 学习EasyX图形交互功能----flappy bird源代码...
  2. 系统架构_Linux内核系统架构介绍
  3. linux下syscall函数,SYS_gettid,SYS_tgkill
  4. Minst 0-9特征迭代次数曲线表达式
  5. 5.创建表,使用alter进行表信息的增删改,Oracle回收站,集合运算
  6. Yii2性能优化之:缓存依赖
  7. SAP License:FI权限需要控制利润中心
  8. 斯伦贝谢好进吗_在斯伦贝谢工作是怎样的体验?
  9. php 开启memcache,php开启与安装 memcache
  10. jBPM工作流 之JBPM4
  11. 专为Oracle数据库恢复而生 - PRM
  12. [Android] 百度地图API Android相关配置教程(包含获取包名、发布版SHA1和开发版SHA1)
  13. vue代码如何跟后端代码结合_阿里云服务器优惠购买教程,可获得800元代金券,云服务器仅需82元/年_学云网...
  14. 淘宝、天猫按关键词搜索商品API接口返回数据展示
  15. WSUS 3.0 的部署
  16. Java中数字转中文数字
  17. 虚拟存储器和cache的异同
  18. HTML嵌套Flash播放视频
  19. java根据提供word模板导出word文档
  20. springboot2 security 登陆成功后无法跳转到指定页面,还是默认页面

热门文章

  1. 《移动应用开发》实验报告——仿饿了么商家页面
  2. docsify——一个神奇的文档站点生成器
  3. Doors Breaking and Repairing
  4. java 语言章节_2020知到Java语言程序设计章节答案
  5. NavigationView的使用
  6. swift语言新特性:可选值
  7. ios 一步一步学会自定义地图吹出框(CalloutView)--(百度地图,高德地图,google地图)
  8. JUC多线程:AQS抽象队列同步器原理
  9. RabbitMQ(二):Work Queues、循环分发、消息确认、持久化、公平分发
  10. 原声ajax的函数式封装,原生 js 封装 ajax的两种方式(get,post)