第十章 隐马尔可夫模型(HMM)

  • 摘要
  • 隐马尔可夫模型的基本概念
    • 前言
    • 生成模型和判别模型
    • 马尔可夫过程
    • 马尔可夫链
    • 马尔可夫模型
    • 隐马尔可夫模型
  • 隐马尔可夫模型的三个问题
    • 第一 概率计算
    • 第二 学习问题
    • 第三 预测问题
  • 参考文献

摘要

隐马尔可夫模型(HMM)是可用于标注问题的统计学习模型,描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型。隐马尔可夫模型在语音识别、自然语言处理、生物信息、模式识别等领域有着广泛的应用。

隐马尔可夫模型的基本概念

前言

隐马尔可夫模型(HMM)与回归、分类等处理相互独立的样本数据模型不同,用于处理时间序列数据,即隐马尔可夫模型用于处理样本之间有时间序列关系的数据。HMM和卡尔曼滤波算法的本质是一样的,区别在于HMM要假设隐藏变量是离散的,而卡尔曼滤波假设隐藏变量是连续的。隐藏变量是HMM中的关键概念,可以理解为无法直接观测到的变量。与隐变量相对的是观测变量,即可以直接观测到的变量。HMM的能力在于能够根据给出的观测变量序列,估计对应的隐藏变量序列是什么,并对未来的观测变量做预测。

比如语音识别,给你一段音频数据,需要识别出该音频数据对应的文字。这里音频数据就是观测变量,文字就是隐藏变量。我们知道,对单个文字而言,虽然在不同语境下有轻微变音,但大致发音是有统计规律的。另一方面,当我们说出一句话时,文字与文字之间也是有一些转移规律的。比如,当我们说出“比”这个字时,下一个大概率的字一般是“如”“较”等。虽然文字千千万,但文字与文字之间的转移却是有章可循的。有了文字的发音特征,以及文字与文字之间的转移规律,那么从一段音频中推测出对应的文字也就可以一试了。插一句,在当前深度学习一统江湖的时代,已经很少有人还在用HMM做语音识别了。

如何判断一个问题是否适合使用HMM解决?

  • 已知一组数据,需要推断与之对应的另一组数据。比如,音频数据、字符序列是已知数据,对应的文字是需要推断的数据。
  • 要推断的数据是离散的,比如语音识别中的文字,而对观测数据没有要求,既可以是离散的,也可以是连续的。
  • 对输入数据的顺序敏感,比如音频数据和字符序列,如果把它们的顺序打乱,结果就完全不一样了。对顺序敏感并不是坏事,顺序即信息,有信息才可以做推断。

生成模型和判别模型

监督学习的任务就是学习一个模型,应用这一模型,对给定的输入预测相应的输出。这个模型的一般形式为决策函数Y=f(x)Y=f(x)Y=f(x)或者条件概率分布:P(Y∣X)P(Y|X)P(Y∣X)。

监督学习方法可以分为生成方法(generative approach)和判别方法(discriminative approach),所学到的模型分别称为生成模型(generative model)和判别模型(discriminative model)。

生成方法由数据学习联合概率分布P(X,Y)P(X,Y)P(X,Y),然后求出条件概率分布P(X∣Y)P(X|Y)P(X∣Y)作为预测的模型,即生成模型:P(Y∣X)=P(X,Y)P(X)P(Y|X)={{P(X,Y)}\over{P(X)}}P(Y∣X)=P(X)P(X,Y)​这样的方法之所以称为生成方法,是因为模型表示了给定输入X产生Y的生成关系。典型的生成模型有朴素贝叶斯法和隐马尔可夫模型。

判别方法由数据直接学习决策函数f(x)f(x)f(x)或者条件概率分布P(Y∣X)P(Y|X)P(Y∣X)作为预测的模型,即判别模型。判别方法关心的是对给定的输入X,应该预测什么样的输出Y。典型的判别模型包括:K近邻法、感知机、决策树、逻辑斯蒂回归模型、最大熵模型、支持向量机、提升方法和条件随机场等。

生成方法的特点生成方法可以还原出联合概率分布P(X,Y)P(X,Y)P(X,Y),而判别方法则不能。生成方法的学习收敛速度更快,当样本容量增加的时候,学到的模型可以更快的收敛于真实模型。当存在隐变量时,仍可以用生成方法学习,此时判别方法就不能用。

判别方法的特点判别方法直接学习的就是条件概率或决策函数,直接面对预测,往往学习的准确率更高。由于直接学习条件概率分布或决策函数,可以对数据进行各种程度上的抽象、定义特征并使用特征,因此可以简化学习问题。

马尔可夫过程

一种状态转换的随机过程,下一状态的概率只与当前状态有关。

马尔可夫链

时间和状态过程的取值是离散的。

马尔可夫模型

隐马尔可夫模型

隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测,从而产生观测随机序列的过程。

隐藏的马尔可夫链随机生成的状态的序列,称为状态序列(state sequence);每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列(observation sequence)。序列的每一个位置又可以看作是一个时刻。

隐马尔可夫模型由初始状态概率向量π\piπ、状态转移概率矩阵AAA和观测概率矩阵BBB决定。π\piπ和AAA决定状态序列,BBB决定观测序列。因此,隐马尔可夫模型λ\lambdaλ可以用三元符号表示,即:λ=(A,B,π)\lambda=(A,B,\pi)λ=(A,B,π).A:状态转移矩阵,B:观测概率矩阵,π\piπ初始状态概率。

状态转移概率矩阵AAA与初始状态概率向量π\piπ确定了隐藏的马尔可夫链,生成不可观测的状态序列。观测概率矩阵BBB确定了如何从状态生成观测,与状态序列综合确定了如何产生观测序列。

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

第一 概率计算

前向算法、后向算法

第二 学习问题

极大似然估计、EM算法

第三 预测问题

维比特算法

参考文献

  1. https://zhuanlan.zhihu.com/p/32655097
  2. https://zhuanlan.zhihu.com/p/27907806

机器学习理论《统计学习方法》学习笔记:第十章 隐马尔可夫模型(HMM)相关推荐

  1. 《统计学习方法》第10章 隐马尔科夫模型 HMM算法 纯Python代码实现 + 前后向算法矩阵形式 + 课后习题答案

    理论知识:<统计学习方法>第10章 隐马尔科夫模型 一.HMM算法矩阵写法 前向算法 P(O∣λ)=πTBo1ABo2ABo3⋯ABoT(1,1,1)TP(O| \lambda) = \p ...

  2. 复现经典:《统计学习方法》第 10 章 隐马尔可夫模型

    本文是李航老师的<统计学习方法>[1]一书的代码复现. 作者:黄海广[2] 备注:代码都可以在github[3]中下载. 我将陆续将代码发布在公众号"机器学习初学者", ...

  3. 【统计学习方法】第10章 隐马尔可夫模型

    隐马尔可夫模型(hidden Markov model,HMM)是可用于标注问题的统计学习模型,描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型. 1.隐马尔可夫模型的基本概念 隐马尔可夫模 ...

  4. 隐马尔可夫模型HMM学习备忘

    隐马尔可夫模型HMM学习备忘 目录 隐马尔可夫模型HMM学习备忘 1.马尔可夫模型的理解 2.隐马尔可夫模型 2.1.HHM的组成 2.2.HMM解决的三个基本问题 隐马尔可夫模型示意图如图[1]: ...

  5. 统计学习方法第十章隐马尔可夫模型

    最近感觉学习深度学习不能一直只注重代码,而不注重对于算法的理解,决定补一补深度学习相关的算法内容. 隐马尔可夫模型是可用于标注问题的统计学习模型,描述的是由隐藏的马尔可夫链随机生成观测序列的过程. 一 ...

  6. 隐马尔可夫模型HMM学习笔记

    参考: https://www.cnblogs.com/pinard/p/6945257.html https://www.cnblogs.com/pinard/p/6991852.html http ...

  7. 用hmmlearn学习隐马尔科夫模型HMM

    1. hmmlearn概述 hmmlearn安装很简单,"pip install hmmlearn"即可完成. hmmlearn实现了三种HMM模型类,按照观测状态是连续状态还是离 ...

  8. 隐马尔可夫模型HMM笔记——HMM原理介绍、python hmmlearn库的使用

    隐马尔可夫模型HMM是序列标注模型最基础的一种,由字构词是序列标注模型的一种应用.序列标注指的就是给定一个序列x=x1x2-xn,找出序列中每个元素对应标签y=y1y2-yn,其中y所有可能的取值集合 ...

  9. 统计学习方法笔记-隐马尔可夫模型(内含Python代码实现)

    一 马尔可夫模型 我们通过一个具体的例子来介绍一下什么是马尔可夫模型 我们假设天气有3种情况,阴天,雨天,晴天,它们之间的转换关系如下: (稍微解释一下这个图,我们可以这样认为,已知第一天是阴天,那第 ...

最新文章

  1. 人工智能科普|自然语言处理(NLP)
  2. yslow前端性能测试工具
  3. 联想笔记本不能无线上网
  4. 如何处理网络丢包故障?—Vecloud微云
  5. lazada选品,东南亚韩潮周边产品爆卖,单日销售额5万美金!
  6. Junit_@Before@After
  7. vue 打包html静态页面,vue项目打包、vue项目打包后空白界面解决办法
  8. kafka的c/c++高性能客户端librdkafka简介/使用librdkafka的C++接口实现简单的生产者和消费者
  9. TeamWork#3,Week5,Bing Input Method vs Sogou Input Method
  10. C#3.0 new features: Lambda expression
  11. 【高并发高性能高可用之海量数据MySQL实战】-提纲目录-不断更新中...
  12. 【verbs】ibv_get_device_name()|ibv_get_device_list()
  13. java lua脚本_在Java中使用Lua脚本语言
  14. Redis常用基本命令(1)
  15. 物联网威胁监测系统最新发现一款针对IoT设备的RAT远控木马
  16. 网页版 连连看 html5实现
  17. 【C指针】初识指针,轻松了解指针
  18. python int() round() floor()函数的比较
  19. JODD与数据页面绑定
  20. OkHttp的Okio在CacheInterceptor中的应用

热门文章

  1. Django常用命令总结(图片)
  2. 一:redis 的string类型 - 相关操作
  3. IOS-UITextField-改变光标颜色
  4. 压力测试+webbench+ab+tsung+siege
  5. json2jsoncpp 关键代码分析1
  6. C#、.Net经典面试题目及答案
  7. 北京师范大学网络教育期末考试计算机,北京师范大学网络教育———《计算机应用基础》第二章同步练习题(4)...
  8. mysql语法6_全面接触SQL语法(6)_mysql
  9. aes c# java_AES加密,C#和java相同
  10. java z+_Java Z 字形变换