1.  前言

学习了概率有向图模型和概率无向图模型,回头再看了一下隐马尔可夫模型(hidden Markov model,HMM)。

HMM属于树状有向概率图模型,主要用于对时序数据的建模,它的潜在变量是离散的;而另一种状态空间模型,称为线性动态系统(linear dynamical system,LDS),它的潜在变量服从高斯分布。

HMM是描述由马尔科夫链随机生成观测序列的过程,属于机器学习里面的生成模型

本文主要参考文献为:PRML、《统计学习方法》、隐马尔可夫模型、HMM英文文档

2. 马尔科夫模型

独立同分布忽略了数据的顺序模式。比如给定了一系列的天气观测,如果按照独立同分布来看,如下图所示,那么得到的数据信息就是雨天的相对频率;然而实际上明天下雨在很大程度上依赖于最近几天天气的。

马尔科夫链就是放松了独立同分布的假设,用概率乘积的形式表示观测序列的联合概率分布。

如果看了前面的概率有向图,会发现马尔科夫链的概率有向图画起来很简单,就是当前节点以前面所有的节点为条件,即被前面所有的节点连接。

如果假设每个条件概率分布只与最近的一次观测有关,与其它观测独立,就得到了一阶马尔科夫链(first order Markov chain),其实这个就是我们常见的马尔科夫链,其联合概率分布为:

这样还可以求出给定时刻n之前所有的观测,得到第n 个观测的条件概率

在这种马尔科夫模型中,条件概率分布被限制相等,在静止时间序列的预测中(比如红绿灯),称为同质马尔科夫链(homogeneous Markov chain)。

有时候我们希望用更早的观测来预测序列,比如二阶马尔科夫链就与前两个观测有关:

联合概率分布可以写出来为:

对于一阶马尔科夫模型,如果有K个状态,每个状态有转移到其它的K-1个状态的转移概率,比如为状态1的时候,有转移到第2,....K共(K-1)的转移概率;为状态2的时候,有转移到第1,3,....K共(K-1)的转移概率;......;依次类推,需要K(1-K)个参数。再扩展到M阶马尔科夫模型,就需要个参数,因此参数的数量随着M指数增加。

为了解决指数增长这个问题,专家们引入隐变量,将隐变量构成马尔科夫链,而非使用观测变量作为马尔科夫链,这样得到的图结构称为状态空间模型(state space model)。

这个图就是利用潜在变量的马尔科夫链来表示顺序数据,每个观测以对应的潜在变量的状态为条件。这个图是HMM和LDS的基础。

此图的联合概率分布为:

根据前面介绍的概率有向图模型分析:给定了第n+1个状态之前的所有状态时,由于隐状态不可观测,使得条件概率分布不会有任何的条件独立性,也就是第n+1的预测以来与前面所有的观测。图中如果所有的状态为离散的,那么就得到了HMM。

3. 隐马尔科夫模型

隐马尔科夫模型是统计模型,用来描述一个含有隐含未知参数的马尔可夫过程。

在隐马尔可夫模型中,状态是不可见的,但输出依赖该状态下,是可见的。每个状态通过可能的输出记号有了可能的概率分布。“隐藏”指的是该模型经其传递的状态序列,而不是模型的参数,即使这些参数是精确已知的,我们仍可把该模型称为一个“隐藏”的马尔可夫模型。

有两种生成模式:确定性和非确定性的。

确定性的生成模式:比如红绿灯的变化就是固定的,根据当前状态可以预测下一状态。

非确定性的生成模式:比如天气晴、多云、雨。不能确定下一刻的天气状态,但是我们希望能够生成一个模式来得出天气的变化规律。假设当前天气只与以前的天气状态有关,这被称为马尔可夫假设。

马尔可夫过程就是当前状态只与前n个状态有关。这被称为n阶马尔可夫模型。注意与确定性生成模式的区别,这里得到的是一个概率模型。

对于有M个状态的一阶马尔可夫模型。共有M*M个状态转移。每一个状态转移都有其一定的概率,我们叫转移概率,所有的转移概率可以用一个矩阵表示。每一行每一列的概率和为1.

用一个例子来解释隐马尔科夫模型:

在预测天气时,当不能观察天气时,可以通过观察水藻或者其他植物来预测。这里就包含两个状态:观察状态(水藻的状态)和隐含状态(天气状态)。

语音识别是最为成功的应用,语音信号是观察状态,识别出的文字就是隐含状态。

注意:在任何一种应用中,观察状态的个数和隐含状态的个数可能不一样。

4. HMM三大要素

HMM是一个三元组(π,A,B)

Π=(πi)  初始概率向量,代表的是刚开始的时候各个隐藏状态的发生概率。

A=(aij)  状态转移矩阵,代表的是第一个状态到第二个状态发生的概率。

B=(bij)  混淆矩阵,代表的是处于某个隐状态的条件下,某个观测发生的概率。

这其中,所有的状态转移概率和混淆矩阵在整个系统中是一成不变的,这也是HMM中最不切实且的假设。

5. HMM两大假设

(1)齐次马尔科夫性假设:假设隐藏的马尔科夫链在任意时刻t的状态只依赖其前一时刻的状态,与其它时刻的状态及观测无关,也与当前时刻 t 无关。

(2)观测独立性假设:假设任意时刻的观测只依赖于该时刻的马尔科夫链的状态,与其它观测状态无关

6. HMM三大基本问题

6.1 评估

概率计算问题,给定模型参数和观测序列,计算在该模型下观测序列出现的概率。利用前向算法或者后向算法计算。

6.2 学习

学习问题,已知观测序列,需要估计模型参数,使得在该模型下观测序列 P(观测序列 | 模型参数)最大,用的是极大似然估计方法估计参数,通常称为前向后向算法或者Baum-Welch算法。

6.3 解码

预测问题,给定模型参数和观测序列,求对给定观测序列条件概率 P(隐状态 | 观测序列) 最大的状态序列。即给定观测序列,求最有可能的对应的状态序列。

7. HMM观测序列生成过程

输入:因马尔科夫模型(π,A,B),以及观测序列长度T
输出:观测序列
(1)按照出事状态分布π产生状态 i1
(2)令t=1
(3)按照状态 i(t) 的观测概率分布(混淆矩阵)生成第 t 个观察值
(4)按照状态 i(t) 的状态转移概率(转移概率矩阵)产生第t+1个状态 i(t+1)
(5)令t=t+1;如果 t < T ,回到步骤(3),否则终止

隐马尔科夫模型——简介相关推荐

  1. 20200918:【广发金融工程】2018年重磅专题系列之九:基于隐马尔科夫模型的选股策略研究

    参考链接:https://www.sohu.com/a/252454782_465470 [广发金融工程]2018年重磅专题系列之九:基于隐马尔科夫模型的选股策略研究 2018-09-07 11:26 ...

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

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

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

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

  4. 隐马尔科夫模型(HMM)详解

    转载自:http://blog.csdn.net/u012990623/article/details/39353381 隐马尔可夫模型 (Hidden Markov Model,HMM) 最初由 L ...

  5. 隐马尔科夫模型matlab工具箱说明

    转自 http://blog.csdn.net/whiteinblue/article/details/40625291 隐马尔可夫模型(HiddenMarkov Model,HMM)是统计模型,它用 ...

  6. 隐马尔科夫模型HMM(一)HMM模型

    2019独角兽企业重金招聘Python工程师标准>>> 隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理 ...

  7. 隐马尔科夫模型之Baum-Wech算法

    隐马尔科夫模型之Baum-Wech算法 https://blog.csdn.net/u014688145/article/details/53046765 Baum-Wech算法之EM算法 https ...

  8. 机器学习知识点(二十五)Java实现隐马尔科夫模型HMM之jahmm库

    1.隐马尔可夫模型HMM的应用场景,关乎于序列和状态变化的都可以.    发现java有可库,专为开发HMM,可惜只能在CSDN上有得下载.     2.jahmm是java开发隐马尔科夫模型的一个j ...

  9. 隐马尔科夫模型HMM自学 (3)

    Viterbi Algorithm 本来想明天再把后面的部分写好,可是睡觉今天是节日呢?一时情不自禁就有打开电脑.......... 找到可能性最大的隐含状态序列 崔晓源 翻译 多数情况下,我们都希望 ...

最新文章

  1. python表格控件_python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例...
  2. Rman duplicate数据库复制(单系统)
  3. 浅谈代码的执行效率(1):算法是关键
  4. a或b search vim_vim编辑器
  5. python百分号和斜杠_Python中正反斜杠(‘/’和‘\’)的意义与用法
  6. 游戏开发--开源软件11--Firefly(python 服务端分布式框架)||pygame
  7. VMware-server遇到问题的解决
  8. 教你如何看手相掌握命运!
  9. asp.net gridview 72般绝技
  10. python中messagebox用法实例_pyqt4教程之messagebox使用示例分享
  11. 推荐一些C#相关的网站、资源和书籍
  12. 渗透攻击exp共享站点
  13. pgsql与mysql数据类型对比_PostgreSQL和mysql数据类型对比兼容
  14. win7 设置共享无线网络
  15. linux系统共享文件夹,Linux系统如何设置共享文件夹?新建文件夹以及指令是什么?...
  16. 手动验证 TLS 证书
  17. Tight WCRT Analysis of Synchronous C Programs
  18. Python 批量下载SIGMOD,VLDB的论文 Mac OS
  19. Beagle X15 版本制作和烧录
  20. vue 点击动态展示不同的图片

热门文章

  1. pdo sqlite_ sqlite2 pdo_mysql_php使用pdo连接sqlite3的配置示例
  2. 【阿里妈妈营销科学系列】第七篇:目标群组发现
  3. 并发请求数_nginx如何限制并发连接和请求数?
  4. 单链表进阶学习 三段
  5. ajax 与route的区别,浅析vue-router jquery和params传参(接收参数)$router $route的区别
  6. 用于安装python第三方库的工具是_Python第三方库安装
  7. 怎么理解ubuntu中的软件包管理器apt和dpkg
  8. 发光强度/光通量/光照度/亮度/坎德拉/流明/勒克斯/尼特之间的关系和换算
  9. [kubernetes] 资源管理 --- 资源预留实践
  10. Java字符串编码和转换操作