隐马尔科夫(HMM)模型
隐马尔科夫(Hidden Markov model)模型是一类基于概率统计的模型,是一种结构最简单的动态贝叶斯网,是一种重要的有向图模型。自上世纪80年代发展起来,在时序数据建模,例如:语音识别、文字识别、自然语言处理等领域广泛应用。隐马尔科夫模型涉及的变量、参数众多,应用也很广泛,以至于很多人不明白模型到底在做什么,模型能够做什么。
HMM中hidden&Markov
首先需要明确的是什么是马尔科夫性质。假设随机过程中某一时刻的状态 s t s_t st的概率分布满足:
p ( s t ∣ s t − 1 , s t − 2 , . . . , s 0 ) = p ( s t ∣ s t − 1 ) p(s_t|s_{t-1},s_{t-2},...,s_0)=p(s_t|s_{t-1}) p(st∣st−1,st−2,...,s0)=p(st∣st−1)
通俗的说就是,随机过程中某一时刻的状态 s t s_t st,只与它前一时刻的状态 s t − 1 s_{t-1} st−1有关,以上就是马尔科夫性质。我们知道自然世界中的很多现象都不符合这一性质,但是我们可以假设其具有马尔科夫性质,这为原来很多无章可循的问题提供了一种解法。
如果某一随机过程满足马尔科夫性质,则称这一过程为马尔科夫过程,或称马尔科夫链。
在马尔科夫链中,每一个圆圈代表相应时刻的状态,有向边代表了可能的状态转移,权值表示状态转移概率。
那HMM中的隐体现在哪呢?这里“隐”指的是马尔科夫链中任意时刻的状态变量不可见,也就是说状态序列 s 0 , s 1 , . . . , s t s_0,s_1,...,s_t s0,s1,...,st无法直接观测到。但是HMM中每时刻有一个可见的观测值 o t o_t ot与之对应,而且 o t o_t ot有且仅于当前时刻隐状态 s t s_t st有关, s t s_t st外化表现为 o t o_t ot的概率称为输出概率,因此隐马尔科夫模型的结构图如下所示。
因此隐马尔科夫模型中马尔科夫链指的是隐状态 s 0 , s 1 , . . . , s t s_0,s_1,...,s_t s0,s1,...,st序列。
HMM之掷骰子
上面的定义虽然给出了隐马尔科夫模型的书面表达,但是对于隐马尔科夫模型的隐状态、观测值、转移概率、输出概率我们依然没有一个直观的概念。下面将采用掷骰子的例子,将隐马尔科夫模型的各种概念和例子中的变量联系起来。
我们假设一个赌场里来了一个老千,他带有两种作弊骰子,分别记为骰子2,骰子3,骰子2掷出较小点数的概率较大,骰子3掷出较大点数的概率更大。所以现在我们有三种骰子,分别是赌场正常骰子1,和两种作弊骰子2,骰子3。这就是三种隐状态,因为我们不知道老千每次使用的是哪种骰子。但是我们知道老千切换骰子的习惯,可以表示如下图:
这个概率就是转移概率,表明了隐状态从一种状态转换到另一种状态的概率,可以写成矩阵的形式:
A = ( 0.15 0.45 0.40 0.30 0.20 0.50 0.20 0.50 0.30 ) A= \left( \begin{matrix} 0.15 & 0.45 & 0.40\\ 0.30 & 0.20 & 0.50\\ 0.20 & 0.50 & 0.30 \end{matrix} \right) A=⎝⎛0.150.300.200.450.200.500.400.500.30⎠⎞
我们也知道三种骰子掷出1~6点的概率分别如下:
这些概率就称作输出概率,因为这个概率表明了从某种骰子(隐变量)到骰子点数(可观测值)的概率。输出概率也可以用矩阵的形式表示如下:
B = ( 0.16 0.16 0.16 0.16 0.16 0.16 0.06 0.06 0.06 0.06 0.06 0.70 0.40 0.20 0.15 0.05 0.05 0.05 ) B= \left( \begin{matrix} 0.16 & 0.16 & 0.16 & 0.16 & 0.16 & 0.16\\ 0.06 & 0.06 & 0.06 & 0.06 & 0.06 & 0.70\\ 0.40 & 0.20 & 0.15 & 0.05 & 0.05 & 0.05 \end{matrix} \right) B=⎝⎛0.160.060.400.160.060.200.160.060.150.160.060.050.160.060.050.160.700.05⎠⎞
以上转移概率矩阵和输出概率矩阵就囊括了整个HMM模型,这个模型描述了状态转移的所有可能以及概率,也表明了状态改变带来的外在表现的呈现以及概率。
因此,用一句话总结HMM模型就是:有一个随时间不断改变的隐藏状态,它持续影响系统的外在表现。
HMM模型五元组
HMM模型可以用五元组( O , S , A , B , Π O,S,A,B,\Pi O,S,A,B,Π)表示。其中
- O : { o 0 , o 1 , . . . , 0 n } O:\{o_0,o_1,...,0_n\} O:{o0,o1,...,0n}表示观测系列,是系统的外在可观测变量。
- S : { s 0 , s 1 , . . . , s n } S:\{s_0,s_1,...,s_n\} S:{s0,s1,...,sn}表示隐状态序列,是导致系统外在表现变化的内因。
- A : { a i j = p ( s j ∣ s i ) } A:\{a_{ij}=p(s_j|s_i)\} A:{aij=p(sj∣si)}表示状态转移概率。
- B : { b i j = p ( o j ∣ s i ) } B:\{b_{ij}=p(o_j|s_i)\} B:{bij=p(oj∣si)}表示输出概率。
- Π : { π 0 , π 1 , . . . , π m } \Pi:\{\pi_0,\pi_1,...,\pi_m\} Π:{π0,π1,...,πm},表示初始状态概率分布。
HMM三类问题
根据以上HMM模型五元组表示,我们可以归纳出HMM模型解决的三类主要问题。
1、评估问题
已知状态转移矩阵 A A A,输出矩阵 B B B,和观测序列,求该观测序列出现的可能性。
这就是评估问题,最显而易见的一个应用就是异常检测,如果一个多次HMM模型实验的结果都显示观测序列出现的概率较小,说明观测序列和模型不太吻合,则可以断定系统可能出现了异常。该问题最简单粗暴的解法就是直接组合出所有的可能隐藏状态序列,然后求出每个隐藏状态序列导致观测序列发生的概率,最后将概率求和即是最终结果。但是列举出所有可能的状态序列是一个指数爆炸增长的问题,在实际系统中不太可能实现。因此有人提出了forward/Backward 算法。(具体算法后面分章节再介绍)
2、解码问题
已知状态转移矩阵 A A A,输出矩阵 B B B,和观测序列,找出最有可能产生该观测序列的隐藏状态序列。
这个问题通常被称作解码问题,该问题通常也被称作“由果溯因”。隐状态通常是导致系统外在表现变化的“内因”,观测序列只是隐状态变化带来的“结果”。最常见的应用就是语音识别,即将某一段语音转化成对应的文字序列。解决该问题也可以采用同问题一类似的枚举法,只需要将所有可能序列的概率求和改为找最大概率对应序列即可,但同样效率不高。因此解决此类问题常用Viterbi算法。(具体算法后面分章节再介绍)
3、学习问题
已知仅仅是很多观测序列,估计HMM模型的参数的可能取值。
这个问题被称作学习问题,通过大量的样本数据去学习最优的模型参数,该问题的求解比较复杂,常采用Baum-Welch算法。
本人目前正在学习机器学习和自然语言处理,第一次接触隐马尔科夫模型,难免有许多总结得不准确的地方,HMM模型涉及的内容也比较的多,以后将边学习边改进扩充该块内容,欢迎大家交流讨论!
参考文献
知乎【如何用简单易懂的例子解释隐马尔可夫模型?】
隐马尔科夫(HMM)模型相关推荐
- 【深度剖析HMM(附Python代码)】1.前言及隐马尔科夫链HMM的背景
1. 前言 隐马尔科夫HMM模型是一类重要的机器学习方法,其主要用于序列数据的分析,广泛应用于语音识别.文本翻译.序列预测.中文分词等多个领域.虽然近年来,由于RNN等深度学习方法的发展,HMM模型逐 ...
- 机器学习——隐马尔科夫(HHM)原理
机器学习--隐马尔科夫(HHM)模型原理 1 从马尔科夫模型到隐马尔科夫模型 1.1 马尔科夫过程引入 首先,我们先给出一张图: 在上面的图里,给出的是一个链式的结构,结构中的每一个节点称之为一个状态 ...
- python做空矩阵_【手把手教你】Python实现基于隐马尔科夫的多空策略
前言 我们通常使用股市的一手数据来创建一个策略模型,预测下一时刻价格的多少.走势的判断或其他. 今天,我们想结合多样的市场条件(波动性,交易量,价格变化等等)和结合隐马尔科夫(HMM)来构建我们的交易 ...
- 隐马尔科夫模型HMM(一)HMM模型
2019独角兽企业重金招聘Python工程师标准>>> 隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理 ...
- 机器学习知识点(二十五)Java实现隐马尔科夫模型HMM之jahmm库
1.隐马尔可夫模型HMM的应用场景,关乎于序列和状态变化的都可以. 发现java有可库,专为开发HMM,可惜只能在CSDN上有得下载. 2.jahmm是java开发隐马尔科夫模型的一个j ...
- 隐马尔科夫模型HMM自学 (3)
Viterbi Algorithm 本来想明天再把后面的部分写好,可是睡觉今天是节日呢?一时情不自禁就有打开电脑.......... 找到可能性最大的隐含状态序列 崔晓源 翻译 多数情况下,我们都希望 ...
- 隐马尔科夫模型HMM自学 (2)
HMM 定义 崔晓源 翻译 HMM是一个三元组 (,A,B). the vector of the initial state probabilities; the state transitio ...
- 隐马尔科夫模型HMM自学(1)
介绍 崔晓源 翻译 我们通常都习惯寻找一个事物在一段时间里的变化规律.在很多领域我们都希望找到这个规律,比如计算机中的指令顺序,句子中的词顺序和语音中的词顺序等等.一个最适用的例子就是天气的预测. 首 ...
- 【NLP】用于语音识别、分词的隐马尔科夫模型HMM
大家好,今天介绍自然语言处理中经典的隐马尔科夫模型(HMM).HMM早期在语音识别.分词等序列标注问题中有着广泛的应用. 了解HMM的基础原理以及应用,对于了解NLP处理问题的基本思想和技术发展脉络有 ...
最新文章
- WebVie打开woffice文档
- ubuntu16.04打开软件或终端的窗口自动在左上角
- oracle元字符,正则表达式元字符
- Java知多少(66)输入输出(IO)和流的概述
- Graph Embedding:word2vec更进一步?
- Ribbon Finance将WBTC Theta Vault存款上限提高至250WBTC
- npm 端口设置成80_13 个 NPM 快速开发技巧
- 融完5亿美元创始人出局?腾讯投资的明星无人车公司Zoox地震了
- python字典和集合对象可以进行索引操作_建议收藏丨纯知识点:Python基础—字典、集合操作大全...
- 批量将ANSI文本txt文件转换成UTF8编码格式 (vbs方法)
- python鼠标移动_python自动化之鼠标移动
- node jade模板
- 软件可维护性测试方法,软件可维护性
- 3月16日—3月20日四年级课程表
- 关于泰勒展开的细节-《三体》读后感的读后感...
- Excel中通过FREQUENCY统计分数段
- 初识SafetyNet简要梳理
- CCAI 2017 | 中国工程院院士李德毅:L3的挑战与量产
- 考研路上的那些一战二战三战成功与失败的故事系列之十三
- agc012E Camel and Oases(状压dp+思路题)
热门文章
- 程序员坐牢会被安排写代码吗?
- css过长文字自动换行
- ad16自动布线设置规则_pcb自动布线设置_设置线间距与宽度设置_pcb布局布线技巧...
- html添加靠左的图片,div 居左靠左布局 CSS居左靠左布局
- NASA搞无人车?中国航天也将携手人工智能技术
- MPPT电源控制器设计
- 在基于ZYNQ MPSOC XCZU3CG自定义单板上运行DPU例程
- 安防工程属于计算机系统集成的文件,安防系统集成(工程)市场规模为960亿元
- HMC5883L地磁传感器驱动
- 浅谈Jsch SSH2