隐马尔可夫模型及其相关算法详述

1、马尔可夫性质及马尔可夫链

(1)马尔可夫性质 设

是一个随机过程,E为其状态空间,若对于任意的

,任意的

,随机变量

在已知变量

之下的条件分布函数只与

有关,而与

, X

(

t
n

−1​)=

x
n

−1​无关,即条件分布函数满足下列等式,此性质称为马尔可夫性质。如果随机过程满足马尔可夫性,则该过程称为马尔可夫过程。

(2)马尔可夫链 马尔可夫链是指具有马尔可夫性质的随机过程。在过程中,在给定当前信息的情况下,过去的信息状态对于预测将来状态是无关的。 在马尔可夫链的每一步,系统根据概率分布,可以从一个状态变成另外一个状态,也可以保持当前状态不变。状态的改变叫做转移,状态改变的相关概率叫做转移概率。 马尔可夫链中的三元素是:状态空间S、转移概率矩阵P、初始概率分布π。

2、隐马尔可夫模型

隐马尔可夫模型(Hidden Markov Model,HMM)是一种统计模型,在语音识别、行为识别、NLP、故障诊断等领域具有高效的性能。 HMM是关于时序的概率模型,描述一个含有未知参数的马尔可夫链所生成的不可观测的状态随机序列,再由各个状态生成观测随机序列的过程。HMM是一个双重随机过程,具有一定状态的隐马尔可夫链和随机的观测序列。HMM随机生成的状态随机序列被称为状态序列,每个状态生成一个观测,由此产生的观测随机序列,被称为观测序列。

是不可观测的状态,

是可观测到的序列。

HMM由隐含状态S、可观测状态O、初始状态概率矩阵πpiπ、隐含状态转移概率矩阵A、可观测值转移矩阵B(又称为混淆矩阵,Confusion Matrix),πpiπ和A决定了状态序列,B决定观测序列,因此HMM可以使用三元符号表示,称为HMM的三元素:

I是长度为T的状态序列,Q是对应的观测序列:

A是隐含状态转移概率矩阵:

其中

是在时刻t处于状态sis_isi​的条件下,时刻t+1转移到状态

的概率。 B是可观测值转移概率矩阵:

其中

是在时刻t处于状态sis_isi​的条件下生成观测值ojo_joj​的概率。 πpiπ是初始状态概率向量:

其中

是在时刻t=1处于状态sis_isi​的概率。 HMM的两个基本性质:

HMM的三个问题
  • 概率计算问题:前向-后向算法 给定模型λ=(A,B,π) λ=(A,B,π)λ=(A,B,π)和观测序列

,计算模型λ λλ下观测到序列Q出现的概率

  • 学习问题:Baum-Welch算法(状态未知) 已知观测序列

,估计模型

的参数,使得在该模型下观测序列

最大

  • 预测问题:Viterbi算法 给定模型

和观测序列

,求给定观测序列条件概率

最大的状态序列I

3、概率计算问题

(1)直接计算法 按照概率公式,列举所有可能的长度为T的状态序列

,求各个状态序列I与观测序列

的联合概率

,然后对所有可能的状态序列求和,从而得到最终的概率

(2)前向算法 给定λλλ,定义到时刻t部分观测序列为

​且状态为sis_isi​的概率为前向概率。记做:

初值:

递推:对于

最终:

(3)后向算法 给定λλλ,定义到时刻t状态为sis_isi​的前提下,从t+1到T部分观测序列为

​的概率为后向概率。记做:

初值:

递推:对于

最终:

单个状态的概率

求给定模型λλλ和观测序列Q的情况下,在时刻t处于状态sis_isi​的概率,记做:

单个状态概率的意义主要是用于判断在每个时刻最可能存在的状态,从而可以得到一个状态序列作为最终的预测结果。

两个状态的联合概率

求给定模型λλλ和观测序列Q的情况下,在时刻t处于状态sis_isi​并在时刻t+1处于状态sjs_jsj​的概率,记做:

4、学习问题

  • 若训练数据包含观测序列和状态序列,则HMM的学习问题非常简单,是监督学习算法。利用大数定理的结论“频率的极限是概率”,直接给出HMM的参数估计。
  • 若训练数据只包含观测序列,则HMM的学习问题需要使用EM算法求解,是非监督学习算法。此时一般使用Baum-Welch算法。 所有的观测数据为

,所有的隐状态为

,则完整的数据为

,完整数据的对数似然函数为

,然后直接使用EM算法的方式来进行参数估计。

Baum-Welch算法

极大化L函数,分别可以求得π、a、b的值。

5、预测问题

(1)近似算法 将在每个时刻t最有可能的状态作为最终的预测状态,使用下列公式计算 概率值:

(2)Viterbi算法 Viterbi算法实际是用动态规划的思路求解HMM预测问题,求出概率最大的“路径”,每条“路径”对应一个状态序列。

6、HMM应用

HMM的常见应用主要用于进行特征提取的场景中或者数据标注的场景中。 在Scikit-learn中安装HMM工具包:

pip install hmmlearn