一、隐马尔科夫模型

在马尔科夫模型中,每一个状态代表了一个可以观察的事件,所以,马尔科夫模型有时称为可视马尔科夫模型(visible Markov model,VMM),这在某种程度上限制了模型的适应性。在隐马尔科夫模型(HMM)中,我们不知道模型所经过的状态序列,而只知道状态的概率函数,也就是说观察到的事件是状态的随机函数,此模型是一个双重的随机过程。其中,模型的状态转换过程是隐蔽的,可观察事件的随机过程是隐蔽的状态转换过程的随机函数。

二、隐马尔科夫模型的基本原理

下图是一个隐马尔科夫模型的示意图,用此图来说明HMM的原理。假设一个暗室中有NN个口袋,每个口袋中有MM种不同颜色的球。一个实验员根据某一概率分布随机选取一个初始的口袋,从中根据不同颜色球的概率分布,随机选取出一个球,并向室外的人报告该球的颜色。然后再根据口袋的概率分布选择另一个口袋,根据不同颜色球的概率分布随机选择一个球,重复进行这个过程。对于室外的观察人员来说,他只能观察到不同颜色球的序列,口袋的序列不可观察。在这个过程中,口袋对应HMM中的状态,球的颜色对应HMM中状态的输出,从一个口袋到另一个口袋对应于状态的转换,从口袋中取出球的颜色对应于从一个状态输出的观察符号。

2.1 HMM的组成部分

  1. 模型中状态的数目NN(口袋的数目)
  2. 从每个状态可能输出的不同符号的数目MM(球的不同颜色的数目)
  3. 状态转移概率矩阵A={aij}\boldsymbol{A} = \{a_{ij}\},其中
    aij=P(qt=sj|qt−1,si),1≤i,j≤Naij≥0∑j=1Naij=1

    a_{ij}=P(q_t=s_j|q_{t-1},s_i), 1 \le i, j \le N \\a_{ij} \ge 0 \\\sum_{j=1}^N a_{ij} = 1

  4. 从状态SjS_j观察到符号vkv_k的概率分布B={bj(k)}\boldsymbol{B} = \{b_j(k)\},其中
    bj(k)=P(Ot=vk|qt=sj),1≤j≤N,1≤k≤Mbj(k)≥0∑k=1Mbj(k)=1

    b_j(k) = P(O_t = v_k|q_t=s_j), 1 \le j \le N, 1\le k \le M\\ b_j(k) \ge 0\\ \sum_{k=1}^M b_j(k) = 1
    观察符号的概率又称为发射概率。

  5. 初始状态的概率分布π={πi}\boldsymbol{\pi} = \{\pi_i\},其中
    πi=P(q1=si),1≤i≤Nπi≥0∑i=1Nπi=1

    \pi_i=P(q_1=s_i), 1 \le i \le N \\ \pi_i \ge 0 \\ \sum_{i=1}^N \pi_i= 1

一般地,一个HMM记为一个五元组μ=(S,K,A,B,π) \mu =(S,K,\boldsymbol{A},\boldsymbol{B},\boldsymbol{\pi}),其中,SS为状态集合,KK为输出符号的集合,A\boldsymbol{A}为状态转移矩阵,B\boldsymbol{B}为符号的发射概率,π\boldsymbol{\pi}为初始状态的概率分布。有时也记为μ=(A,B,π) \mu =(\boldsymbol{A},\boldsymbol{B},\boldsymbol{\pi})

2.2 观察序列的生成

当考虑潜在事件随机地生成表面事件时,HMM非常有用。假设给定模型μ=(A,B,π) \mu =(\boldsymbol{A},\boldsymbol{B},\boldsymbol{\pi}),那么观察序列O=O1O2…OTO=O_1O_2\dots O_T可由下面的步骤产生:
1. 根据初始的状态概率分布πi\pi_i选择一个初始的状态q1=siq_1=s_i
2. 设t=1
3. 根据状态sis_i的输出概率分布bi(k)b_i(k)输出O_t=v_k
4. 根据状态转移概率分布aija_{ij},将当前tt时刻的状态转移到新的状态qt+1=sjq_{t+1}=s_j
5. t=t+1t = t+1, 如果t<Tt,重复执行步骤3,4.否则,算法结束。

机器学习笔记(十三)——隐马尔科夫模型相关推荐

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

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

  2. 机器学习笔记之隐马尔可夫模型(六)解码问题

    机器学习笔记之隐马尔可夫模型--解码问题 引言 解码问题介绍 解码问题分析 引言 上一节介绍了使用狭义EM算法对模型参数λ\lambdaλ.本节将介绍使用维特比算法(Viterbi)处理解码问题(De ...

  3. HMM学习笔记2 隐马尔科夫模型与前向算法

    一 序 本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,有大佬做了二次整理,参见:https://blog.csdn.ne ...

  4. 机器学习中的隐马尔科夫模型(HMM)详解

    前导性推荐阅读资料: 从朴素贝叶斯分类器到贝叶斯网络(上) 从朴素贝叶斯分类器到贝叶斯网络(下) 欢迎关注白马负金羁的博客 http://blog.csdn.net/baimafujinji,为保证公 ...

  5. 【大道至简】机器学习算法之隐马尔科夫模型(Hidden Markov Model, HMM)详解(3)---学习问题:Baum-Welch算法推导及Python代码实现

    ☕️ 本文系列文章汇总: (1)HMM开篇:基本概念和几个要素 (2)HMM计算问题:前后向算法 (3)HMM学习问题:Baum-Welch算法 (4) HMM预测问题:维特比算法 ☕️ 本文来自专栏 ...

  6. 概率图模型笔记(二) 隐马尔科夫模型(Hidden Markov Model)

    写在前面 隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理,模式识别等领域得到广泛的应用.最近入坑NLP,看到好多算法都涉 ...

  7. 机器学习-- > 隐马尔科夫模型(HMM)

    博客内容将首发在微信公众号"跟我一起读论文啦啦",上面会定期分享机器学习.深度学习.数据挖掘.自然语言处理等高质量论文,欢迎关注! 本篇博文将详细总结隐马模型相关知识,理解该模型有 ...

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

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

  9. 隐马尔科夫模型(HMM)笔记(公式+代码)

    文章目录 1. 基本概念 1.1 HMM模型定义 1.2 盒子和球模型 1.3 观测序列生成过程 1.4 HMM模型3个基本问题 2. 概率计算问题 2.1 直接计算法 2.2 前向算法 2.2.1 ...

最新文章

  1. 如何用Python快速抓取Google搜索?
  2. 通过grub硬盘安装centos7
  3. Haproxy + Pacemaker 实现高可用负载均衡(一)
  4. UDT协议实现分析——UDT Socket的创建
  5. GNU C - 关于8086的内存访问机制以及内存对齐(memory alignment)
  6. 第六章至第九章的单元测试
  7. python处理金融数据_python-金融数据处理demo
  8. .Net Core项目 Encoding不全问题
  9. bzoj 1640 bzoj 1692: [Usaco2007 Dec]队列变换(后缀数组)
  10. one_hot编码学习与实践
  11. 关于BinaryFormatter
  12. android studio应用开发案例,Android应用开发案例教程(Android Studio版).pptx
  13. Forth?什么鬼?
  14. 谁能和乔布斯比勤奋?乔布斯的睡眠时间
  15. 计算机网络(思科)章节测试总结
  16. OHS简单安装与系统配置
  17. 小白学习MySQL - 不同版本创建用户的些许区别
  18. ##如何通过写博客赚钱
  19. 回炉篇5—数据结构(4)之冒泡、选择、插入排序算法
  20. 游戏开发人员需要看的书籍

热门文章

  1. java103 101 104 101_编写一个java程序将100,101,102,103,104,105这6个数以数组的形式写入到D:\\test.t...
  2. java sql server 2016_SQL server 2016 安装步骤
  3. python全局名称空间_python名称空间,命名空间
  4. mysql添加用户及权限
  5. 四二拍用音符怎么表示_每个音符都是赞美歌拍子分析 0基础识简谱每日必看
  6. 白盒测试 | 用例设计方法之判定覆盖
  7. 【视频】视频基本参数介绍
  8. 02_反汇编_反编译
  9. pandas入门(2)
  10. YIi2中checkboxOptions前选框的用法