简介

HMM 中的变量可以分为两组.

  • 第一组是状态变量 \(\{y_i,y_2,\cdots, y_n\}\), 其中 \(y_i \in \mathcal{Y}\) 表示第 \(i\) 时刻的系统状态. 通常假定状态变量是隐藏的、不可观测的, 因此状态变量亦被称为隐变量 (hidden variable).
  • 第二组是观测变量 \(\{x_1,x_2,\cdots, x_n\}\), 其中 \(x_i \in \mathcal{X}\) 表示第 \(i\) 时刻的观测值. 在 HMM 中, 系统通常在多个状态 \(\{s_1,s_2,\cdots,s_N\}\) 之间转换, 因此状态变量 \(y_i\) 的取值范围 \(\mathcal{Y}\) 通常有 \(N\) 个可能的离散空间.

下图更加直观:

graph LR;
subgraph 状态变量或隐变量
y1 --now--> y2
y2 --now--> y3
y3 --now--> y4
ago --> now
end
subgraph 观测变量
y1 --> x1
y2 --> x2
y3 --> x3
y4 --> x4
end

上图的箭头表示了变量之间的依赖关系. 在任一时刻, 观测变量的取值仅仅依赖于状态变量, 即 \(x_t\) 由 \(y_t\) 确定, 与其他的状态变量及其观测变量的取值无关. 同时, \(t\) 时刻的状态 \(y_t\) 仅依赖于 \(t-1\) 时刻的状态, 与其余 \(n-2\) 个状态无关. 这就是所谓的『马尔可夫链』(Markov chain), 系统下一时刻的状态仅由当前状态决定, 不依赖于以往的任何状态. 这样, 便有

\[
P(x_1,y_1,\cdots,x_n,y_n) = P(y_1)P(x_1|y_1)\displaystyle\prod_{i=2}^n P(y_i|y_{i-1})P(x_i|y_i)
\]

除了结构信息外, 要确定一个 HMM 还需要以下三个参数:

  • 状态转移概率: 模型在各个状态间转换的概率, 常记作矩阵 \(A=[a_{ij}]_{N\times N}\), 其中 \(a_{ij} = P(y_{t+1}=s_j|y_t=s_i), \text{ }\;\;1 \leq i,j \leq N\)
  • 输出观测概率: 模型根据当前状态获得各个观测值的概率, 常常记作矩阵 \(B = [b_{ij}]_{N\times M},\) 其中 \(b_{ij} = P(x_t=o_j|y_t=s_i), \text{ }\;\;1\leq i \leq N, 1 \leq j \leq M\) 表示在任意时刻 \(t\), 若状态为 \(s_i\), 则观测值 \(o_j\) 被获取的概率.
  • 初始状态概率: 模型在初始时刻各个状态出现的概率, 常常记作 \(\pi = (\pi_1, \pi_2, \cdots, \pi_N)\), 其中 \(\pi_i = P(y_1=s_i), \text{ }\;\;1\leq i \leq N\), 表示模型的初始状态为 \(s_i\) 的概率.

通过指定状态空间 \(\mathcal{Y}\), 观测空间 \(\mathcal{X}\) 和上述三组参数, 就能确定一个 HMM, 通常用其参数 \(\lambda = [A,B,\pi ]\) 来指代. 给定 \(\lambda\), 它按照如下过程产生观测序列 \(\{x_1,x_2,\cdots, x_n\}\)

  1. 设置 \(t=1\), 并根据初始化状态概率 \(\pi\) 选择初始状态 \(y_i\);
  2. 根据状态 \(y_t\) 和输出观测概率 \(B\) 选择观测变量取值 \(x_t\);
  3. 根据状态 \(y_t\) 和状态转移矩阵 \(A\) 转移模型状态, 即确定 \(y_{t+1}\);
  4. 若 \(t<n\), 设置 \(t=t+1\), 并转到第 2 步, 否则停止.

其中 \(y_t\in \{s_1,s_2,\cdots,s_N\}\) 和 \(x_t \in \{o_1,o_2,\cdots,o_M\}\), 分别为第 \(t\) 时刻的状态和观测值.

python 库: hmmlearn

学习 HMM的更多相关文章

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

    在之前的HMM系列中,我们对隐马尔科夫模型HMM的原理以及三个问题的求解方法做了总结.本文我们就从实践的角度用Python的hmmlearn库来学习HMM的使用.关于hmmlearn的更多资料在官方文 ...

  2. 机器学习理论基础学习13--- 隐马尔科夫模型 (HMM)

    隐含马尔可夫模型并不是俄罗斯数学家马尔可夫发明的,而是美国数学家鲍姆提出的,隐含马尔可夫模型的训练方法(鲍姆-韦尔奇算法)也是以他名字命名的.隐含马尔可夫模型一直被认为是解决大多数自然语言处理问题最为 ...

  3. hmm学习笔记(二)

    学习hmm近一周的时间,做个总结. 参考  李航的<统计学习方法>第9章,第10章 本文包含: 1.hmm模型 2.前向后向算法 3.Baum-Welch算法 4.维特比算法 1.hmm模 ...

  4. 【NLP】十分钟快览自然语言处理学习总结

    十分钟学习自然语言处理概述 作者:白宁超 2016年9月23日00:24:12 摘要:近来自然语言处理行业发展朝气蓬勃,市场应用广泛.笔者学习以来写了不少文章,文章深度层次不一,今天因为某种需要,将文 ...

  5. 机器学习&数据挖掘笔记_25(PGM练习九:HMM用于分类)

    前言: 本次实验是用EM来学习HMM中的参数,并用学好了的HMM对一些kinect数据进行动作分类.实验内容请参考coursera课程:Probabilistic Graphical Models 中 ...

  6. PRML读书会第十三章 Sequential Data(Hidden Markov Models,HMM)

    主讲人 张巍 (新浪微博: @张巍_ISCAS) 软件所-张巍<zh3f@qq.com> 19:01:27 我们开始吧,十三章是关于序列数据,现实中很多数据是有前后关系的,例如语音或者DN ...

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

    隐马尔科夫模型HMM(一)HMM模型基础 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比 ...

  8. 标注-隐马尔可夫模型HMM的探究

    1 HMM基本概念1.1 定义1.2 观测序列生成过程1.3 HMM的三个问题2 概率计算算法2.1 直接计算算法2.2 前向算法forward algorithm2.3 后向算法2.4 一些概率与期 ...

  9. HMM相关文章索引

    HMM相关文章索引 1条回复 HMM系列文章是52nlp上访问量较高的一批文章,这里做个索引,方便大家参考. HMM学习 HMM学习最佳范例一:介绍 HMM学习最佳范例二:生成模式 HMM学习最佳范例 ...

随机推荐

  1. Metrics.NET实践(1)

    起因:对应用的监控和测量是WEB应用的一个重要话题,尤其在监控错误率,并发量,以及框架库中的动态值.于是,在性能优化的时候找到了metrics.net. 简介 开始使用 度量 Gauges Count ...

  2. 2014年最佳的10款 PHP 开发框架

    PHP去年发生了翻天覆地的变化.似乎每个人都有一个想法一个好的框架应该是什么样子,但话又说回来,没有多少面积制品类型的框架或框架的最终实际使用在不同的生产项目. 你知道哪个框架选择为您的生产计划吗?你 ...

  3. linux下lz4解压缩遇到的那些事儿

    一.Debian系列:Debian.Ubuntu等1.1 kali下修改apt-get源:   vim /etc/apt/sources.list     deb http://mirrors.ust ...

  4. 正在载入中......loading页面的几种方法

    网页加载过程中提示“载入中…”,特别是使用动画效果,可以一个“等待”的温馨提示,用户体验很不错.下面介绍几种方法. 第一种: 原理就是,在网页载入时在页面最中间打入一个层上面显示,"网页正在 ...

  5. 关于onConfigurationChanged

    这两天测试app时,发现一个奇怪问题,app在启动后,Activity会onCreate两次,起初以为是横屏设置导致,随即在Activity中添加了android:configChanges=&quo ...

  6. 2016.5.16——leetcode:Reverse Bits(超详细讲解)

    leetcode:Reverse Bits 本题目收获 移位(<<  >>), 或(|),与(&)计算的妙用 题目: Reverse bits of a given 3 ...

  7. vs2012 连接oracle11g 及数据的insert及select 的总结

    下载链接Oracle 11g所需的驱动ODTwithODAC1120320_32bit,下载链接为http://www.oracle.com/technetwork/topics/dotnet/uti ...

  8. Python构造方法、析构方法和单例模式

    一.__init__()方法 __init__()通常在初始化一个类实例的时候调用,如: class Student(object): def __init__(self,name,age): sel ...

  9. mysql -> 简介&体系结构_01

    数据库简介 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增.截取.更新.删除等操作. 所谓“数据库”系以一定方式储存在一起.能予多个用户共享.具有尽可能小的 ...

  10. unity3d 材质概述 ---- shader

    学习笔记:      材质概述:  物体呈现在我们前面除了形体外,还包括“固有颜色”和“质地”(质感与光学性质).固有颜色让物体的表面看起来是什么颜色,而质感决定了该物质是使用什么材质的.在三维建模软 ...