HMM算法想必大家已经听说了好多次了,完全看公式一头雾水。但是HMM的基本理论其实很简单。因为HMM是马尔科夫链中的一种,只是它的状态不能直接被观察到,但是可以通过观察向量间接的反映出来,即每一个观察向量由一个具有相应概率密度分布的状态序列产生,又由于每一个状态也是随机分布的,所以HMM是一个双重随机过程。

HMM是语音识别,人体行为识别,文字识别等领域应用非常广泛。

一个HMM模型可以用5个元素来描述,包过2个状态集合和3个概率矩阵。其分别为

隐含状态S,可观测状态O,初始状态概率矩阵π,隐含状态概率转移矩阵A,观测状态转移概率矩阵 B。

HMM在实际应用中主要用来解决3类问题。

1. 评估问题。

即给定观测序列 O=O1O2O3…Ot和模型参数λ=(A,B,π),怎样有效计算这一观测序列出现的概率

2. 解码问题。

即给定观测序列 O=O1O2O3…Ot和模型参数λ=(A,B,π),怎样寻找满足这种观察序列意义上最优的隐含状态序列S。

3. 学习问题。

即HMM的模型参数λ=(A,B,π)未知,如何求出这3个参数以使观测序列O=O1O2O3…Ot的概率尽可能的大。

这篇文章是针对第一个问题来说的,一般采用的是前向后向算法来解决评估问题。这里将的是前向算法。

在此之前,先引入几个符号:

at(i) :  表示到第t个观察值Ot时处于状态i。

: 表示在状态i下产生观察值 的概率。

现在来看一下前向算法的理论来源。

因为我们要解决的是模型估计问题。即计算概率 。将其利用如下公式化简:

因此首先要先计算

,其中Q为一给定的状态序列 。又有

其中

所以

因此最后求得

由此可以看见其计算复杂度非常大,为

为了解决这个问题,前向算法就出现了。首先定义了一个前向变量 。表示从1到t,输出符号o序列,t时刻处于状态i的累计输出概率。

因为前向变量有如下性质:

初值:

,且

,最后有递推关系:

为什么这样就可以简化计算复杂度呢?其原因很简单,因为每一次的at(i),我们都可以用at-1(i)来计算,就不用重复计算了。如下示意图可以帮助我们形象的理解:

看了这么多公式,是不是头晕了?不急,下面看一个实例就会完全明白的。

题目:HMM模型如下,试通过前向算法计算产生观察符号序列O={ABAB}时每个时刻的 和总概率。

当然初始概率矩阵π=(1,0,0),即开始处于状态1。按照上面的公式理论,我们的递推依次解出at(i)。解法如下:

t=1时:

t=2时:

t=3时:

t=4时:

所以有最后的结果:

最后将其计算过程示意图表示如下:

HMM学习笔记_2(从一个实例中学习HMM前向算法)相关推荐

  1. HMM学习笔记_1(从一个实例中学习DTW算法)

    DTW为(Dynamic Time Warping,动态时间归准)的简称.应用很广,主要是在模板匹配中,比如说用在孤立词语音识别,计算机视觉中的行为识别,信息检索等中.可能大家学过这些类似的课程都看到 ...

  2. 从一个实例中学习DTW算法

     基于动态时间规整算法(DTW)的相似度计算 Killer 发表于(2015-10-063) 本文标签:大数据 机器学习 算法 浏览量:193次 喜欢收藏 在孤立词语音识别中,最为简单有效的方法是 ...

  3. oracle复制另一个字段,【学习笔记】Oracle存储过程 表中列不同时动态复制表中数据到另一个表中...

    天萃荷净 分享一篇关于Oracle存储过程实现表之间数据复制功能.两表中列不同,动态的将一表中的数据复制到另一个表中案例 因为要用到回收站功能,删除一条记录,要先放到一个delete表中,以便以后恢复 ...

  4. 10-1Python学习笔记 10-2C语言学习笔记 : 在文本编辑器中新建一个文件, 写几句话来总结一下你至此学到的Python知识

    10-1 Python学习笔记 : 在文本编辑器中新建一个文件, 写几句话来总结一下你至此学到的Python知识, 其中每一行都以"In Python you can"打头. 将这 ...

  5. Spark学习笔记1——第一个Spark程序:单词数统计

    Spark学习笔记1--第一个Spark程序:单词数统计 笔记摘抄自 [美] Holden Karau 等著的<Spark快速大数据分析> 添加依赖 通过 Maven 添加 Spark-c ...

  6. CV学习笔记-BP神经网络训练实例(含详细计算过程与公式推导)

    BP神经网络训练实例 1. BP神经网络 关于BP神经网络在我的上一篇博客<CV学习笔记-推理和训练>中已有介绍,在此不做赘述.本篇中涉及的一些关于BP神经网络的概念与基础知识均在< ...

  7. MyBatis学习笔记2 ——第一个MyBatis程序

    MyBatis学习笔记2 --第一个MyBatis程序 参考教程B站狂神https://www.bilibili.com/video/BV1NE411Q7Nx 环境搭建 建立一个mybatis数据库用 ...

  8. 尚学堂JAVA基础学习笔记_2/2

    尚学堂JAVA基础学习笔记_2/2 文章目录 尚学堂JAVA基础学习笔记_2/2 写在前面 第10章 IO技术 1. IO入门 2. IO的API 3. 装饰流 4. IO实战 5. CommonsI ...

  9. Zemax学习笔记(3)- Zemax中的序列模式和非序列模式

    Zemax学习笔记(3)- Zemax中的序列模式和非序列模式 序列模式与非序列模式 序列模式 窗口浮动或者固定 主要分析 非序列模式 混合模式 光源建模 创建复杂的几何体 CAD 导入 布尔命令 光 ...

  10. tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数

    tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报  分类: tensorflow(4)  目录(?)[+] 本笔记目的 ...

最新文章

  1. 第二层EtherChannel
  2. python爬取抖音评论_怎样用Python3爬取抖音神曲
  3. 为什么工业控制系统需要安全防护?
  4. 2019考研调剂信息 计算机专业,2019考研分数线还未公布,已公布的调剂信息是真的吗?...
  5. 目标检测--吴恩达深度学习记录
  6. Net中如何操作IIS
  7. OpenCL memory object 之选择传输path
  8. 会议交流 | CCKS2020 第十四届全国知识图谱与语义计算大会
  9. 【LeetCode】剑指 Offer 62. 圆圈中最后剩下的数字
  10. 2014腾讯实习生笔试题——define与typedef
  11. c++ string split_闲话Python之砍瓜切菜split()
  12. Mimics 21安装
  13. 谷歌地球网页版_谷歌地球:Google Earth 专业版
  14. html怎么截取部分图片,【原创】详解css用坐标来截取部分图片
  15. 学了这么久的编程,编程语言创始人你知道几个?
  16. shell编程——select语句东子破解
  17. uni-app 上传图片到阿里云oss
  18. Qt蓝牙:QBluetoothDeviceInfo、QBluetoothAddress
  19. mysql association_在mybatis的xml中添加association不生效
  20. 一,Weston简介

热门文章

  1. java swing有趣编程_java(swing编程)如何这个简单效果?
  2. You must depend on an EXACT version of electron-prebuilt-compile not a range (got ^4.0.0)
  3. 获取Map集合中数据的方法
  4. IdentityServer的基本概念与特性
  5. spring:注解配置AOP
  6. Linux监控之系统性能
  7. python访问服务器注册表,使用Python的Windows注册表访问(Winreg)
  8. 关于网页编码的故事,你都清楚嘛?utf与gbk的关系
  9. android如何关闭响应程序,android – 如何修复应用程序没有响应?
  10. leetcode 打印_leetcode多线程之按序打印