机器学习算法之隐马尔可夫模型

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

马尔可夫性质

设 \{X(t), t\in T\} 是一个随机过程,E为其状态空间,若对于任意的 t_1< t_2 < \dots < t_n < t 任意的 x_1, x_2, \dots, x_n, x\in Ex ,随机变量X(t) 在已知变量 X(t_1 )=x_1, \dots, X(t_n )=x_n 之下的条件分布函数只与 X(t_n)=x_n 有关,而与 X(t_1)=x_1, \dots, X(t_{n-1})=x_{n-1} 无关,即条件分布函数满足下列等式,此性质称为马尔可夫性质。如果随机过程满足马尔可夫性,则该过程称为马尔可夫过程。

                                   \begin{aligned}p(X(t)\le x|X(t_1)=x_1, \dots, X(t_n)=x_n)&=p(X(t)\le x|X(t_n)=x_n) \\p(X_{n+1}=x|X_1=x_1, \dots, X_n=x_n)&=p(X_{n+1}=x|X_n=x_n)\end{aligned}
 

马尔可夫链

马尔可夫链是指具有马尔可夫性质的随机过程。在过程中,在给定当前信息的情况下,过去的信息状态对于预测将来状态是无关的。

在马尔可夫链的每一步,系统根据概率分布,可以从一个状态变成另外一个状态,也可以保持当前状态不变。状态的改变叫做转移,状态改变的相关概率叫做转移概率。

马尔可夫链中的三元素是:状态空间S、转移概率矩阵P、初始概率分布π。

隐马尔可夫模型

隐马尔可夫模型(Hidden Markov Model,HMM)是一种统计模型,在语音识别、行为识别、NLP、故障诊断等领域具有高效的性能。

HMM是关于时序的概率模型,描述一个含有未知参数的马尔可夫链所生成的不可观测的状态随机序列,再由各个状态生成观测随机序列的过程。HMM是一个双重随机过程,具有一定状态的隐马尔可夫链和随机的观测序列。

HMM随机生成的状态随机序列被称为状态序列,每个状态生成一个观测,由此产生的观测随机序列,被称为观测序列。

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

                                                                              \lambda=(A, B, \pi)

S是所有可能的状态集合: S=\{s_1, s_2, \dots, s_n\} 

O是所有可能的观测集合:O=\{o_1, o_2, \dots, o_n\}

I是长度为T的状态序列:I=\{i_1, i_2, \dots, i_T\}

Q是对应的观测序列:Q=\{q_1, q_2, \dots, q_T\}

A是隐含状态转移概率矩阵:A=[a_{ij}]_{n*n}=\begin{bmatrix}a_{11}&a_{12}&\cdots&a_{1n} \\a_{21}&a_{22}&\cdots&a_{2n} \\\vdots&\vdots&\ddots&\vdots \\a_{n1}&a_{n2}&\cdots&a_{nn}\end{bmatrix}

其中a_{ij}=p(i_{t+1}=s_j|i_t=s_i) 是在时刻t处于状态s_i 的条件下,时刻t+1转移到状态 s_j​ 的概率。

B是可观测值转移概率矩阵:B=[b_{ij}]_{n*m}=\begin{bmatrix}b_{11}&b_{12}&\cdots&b_{1m} \\b_{21}&b_{22}&\cdots&b_{2m} \\\vdots&\vdots&\ddots&\vdots \\b_{n1}&b_{n2}&\cdots&b_{nm}\end{bmatrix}

其中 b_{ij}=p(q_t=o_j|i_t=s_i) 是在时刻t处于状态 s_i 的条件下生成观测值 o_j 的概率。

π 是初始状态概率向量:\pi=(\pi_i)_{1*n}=(\pi_1, \pi_2, \dots, \pi_n)

其中 \pi_i=p(i_1=s_i)  是在时刻t=1处于状态 s_i 的概率。

HMM的两个基本性质:

                                                 \begin{aligned}p(i_t|i_{t-1}, q_{t-1}, i_{t-2}, q_{t-2}, \dots, i_1, q_1)&=p(i_t|i_{t-1}) \\p(q_t|i_t, i_{t-1}, q_{t-1}, i_{t-2}, q_{t-2}, \dots, i_1, q_1)&=p(q_t|i_t)\end{aligned}

HMM的三个问题

  • 概率计算问题:前向-后向算法

给定模型 λ=(A,B,π) 和观测序列 Q=\{q_1, q_2, \dots, q_T\} ,计算模型 λ 下观测到序列Q出现的概率 P(Q|λ)

  • 学习问题:Baum-Welch算法(状态未知)

已知观测序列 Q=\{q_1, q_2, \dots, q_T\} ,估计模型 λ=(A,B,π) 的参数,使得在该模型下观测序列 P(Q|λ) 最大

  • 预测问题:Viterbi算法

给定模型 λ=(A,B,π) 和观测序列 Q=\{q_1, q_2, \dots, q_T\} ,求给定观测序列条件概率 P(I|Q, λ) 最大的状态序列I

概率计算问题

直接计算法

按照概率公式,列举所有可能的长度为T的状态序列 I=\{i_1, i_2, \dots, i_T \} ,求各个状态序列I与观测序列 Q=\{q_1, q_2, \dots, q_T\}
的联合概率 P(Q,I;λ) ,然后对所有可能的状态序列求和,从而得到最终的概率 P(Q;λ) 。

                                    \begin{aligned}I&=\{i_1, i_2, \dots, i_T\} \\p(I; \lambda)&=\pi_{i_1}a_{i_1i_2}a_{i_2i_3}\dots a_{i_{T-1}i_T} \\Q&=\{q_1, q_2, \dots, q_T\} \\p(Q|I;\lambda)&=b_{i_1q_1}b_{i_2q_2}\dots b_{i_Tq_T} \\p(Q, I;\lambda)&=p(Q|I;\lambda)p(I;\lambda) \\&=\pi_{i_1}a_{i_1i_2}a_{i_2i_3}\dots a_{i_{T-1}i_T}b_{i_1q_1}b_{i_2q_2}\dots b_{i_Tq_T} \\p(Q;\lambda)&=\sum_Ip(Q,I;\lambda) \\&=\sum_{i_1, i_2, \dots, i_T}\pi_{i_1}a_{i_1i_2}a_{i_2i_3}\dots a_{i_{T-1}i_T}b_{i_1q_1}b_{i_2q_2}\dots b_{i_Tq_T}\end{aligned}
前向算法

给定 λ ,定义到时刻t部分观测序列为 Q=\{q_1, q_2, \dots, q_T\} 且状态为 s_i 的概率为前向概率。记做:

\alpha_t(i)=p(q_1, q_2, \dots, q_t, i_t=s_i; \lambda)   注释:\alpha_t(i) 代表 状态为 i 的隐状态对应的 观测状态 的概率

初值:\alpha_1(i)=p(q_1, i_1=s_i; \lambda)=\pi_ib_{iq_1}  注释:b_{iq_1} 代表 状态转移矩阵中 隐状态为 i ,q对应y 的概率值

递推:对于t=1,2,…,T−1,   \alpha_{t+1}(i)=(\sum_{j=1}^n\alpha_t(j)a_{ji})b_{iq_{t+1}} 

最终:P(Q;\lambda)=\sum_{i=1}^n\alpha_T(i)

推导过程:

后向算法

给定λ,定义到时刻t状态为 s_i 的前提下,从t+1到T部分观测序列为 q_{t+1}, q_{t+2},\dots,q_T 的概率为后向概率。记做:

\beta_t(i)=p(q_{t+1}, q_{t+2},\dots,q_T|i_t=s_i;\lambda)

初值:βT(i)=1 

递推:对于 1t=T−1,T−2,…,1,  \beta_t(i)=\sum_{j=1}^n(a_{ij}b_{jq_{t+1}}\beta_{t+1}(j))

最终:P(Q;\lambda)=\sum_{i=1}^n\pi_ib_{iq_1}\beta_1(i)

推导过程:

单个状态的概率

求给定模型 λ 和观测序列 Q 的情况下,在时刻 t 处于状态 s_i 的概率,记做: \gamma_t(i)=p(i_t=s_i|Q;\lambda)

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

                                        \begin{aligned}p(i_t=s_i, Q;\lambda)&=\alpha_t(i)\beta_t(i) \\\gamma_t(i)&=p(i_t=s_i, Q; \lambda) \\&=\frac{p(i_t=s_i, Q;\lambda)}{p(Q; \lambda)} \\\gamma_t(i)&=\frac{\alpha_t(i)\beta_t(i)}{P(Q;\lambda)} \\&=\frac{\alpha_t(i)\beta_t(i)}{\sum_{j=1}^n\alpha_t(j)\beta_t(j)}\end{aligned}
 

两个状态的联合概率

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

                           \begin{aligned}\xi_t(i, j)&=p(i_t=s_i, i_{t+1}=s_j|Q;\lambda) \\&=\frac{p(i_t=s_i, i_{t+1}=s_j, Q;\lambda)}{p(Q; \lambda)} \\&=\frac{p(i_t=s_i, i_{t+1}=s_j, Q;\lambda)}{\sum_{i=1}^n\sum_{j=1}^np(i_t=s_i, i_{t+1}=s_j, Q;\lambda)} \\p(i_t=s_i, i_{t+1}=s_j, Q;\lambda)&=\alpha_t(i)a_{ij}b_{jq_{t+1}}\beta_{t+1}(j)\end{aligned}

学习问题

若训练数据包含观测序列和状态序列,则HMM的学习问题非常简单,是监督学习算法。利用大数定理的结论“频率的极限是概率”,直接给出HMM的参数估计。

                                                              \begin{aligned}\hat{\pi}_i&=\frac{|s_i|}{\sum_{i=1}^n|s_i|} \\a_{ij}&=\frac{|s_{ij}|}{\sum_{j=1}^n|s_{ij}|} \\\hat{b}_{ij}&=\frac{|q_{ij}|}{\sum_{j=1}^m|q_{ij}|}\end{aligned}

若训练数据只包含观测序列,则HMM的学习问题需要使用EM算法求解,是非监督学习算法。此时一般使用Baum-Welch算法。

所有的观测数据为 Q=\{q_1, q_2,\dots,q_T\}  ,所有的隐状态为 I=\{i_1, i_2, \dots, i_T\} ,则完整的数据为 (Q,I) ,完整数据的对数似然函数为ln(p(Q,I;λ)),然后直接使用EM算法的方式来进行参数估计。

Baum-Welch算法

                     \begin{aligned}p(Q,I; \lambda)&=\pi_{i_1}b_{i_1q_1}a_{i_1i_2}b_{i_2q_2}\dots a_{i_{T-1}i_T}b_{i_Tq_T} \\L(\lambda, \bar{\lambda})&=\sum_I\ln(p(Q, I; \lambda))p(I|Q;\bar{\lambda}) \\&=\sum_I\ln(p(Q, I; \lambda))\frac{p(I,Q;\bar{\lambda})}{p(Q;\bar{\lambda})} \\&\propto\sum_I\ln(p(Q, I; \lambda))p(I,Q;\bar{\lambda}) \\L(\lambda, \bar{\lambda})&=\sum_I\ln(\pi_{i_1})p(I, Q; \bar{\lambda})+\sum_I(\sum_{t=1}^{T-1}\ln a_{i_ti_{t+1}})p(I, Q; \bar{\lambda})+\sum_I(\sum_{t=1}^T\ln b_{i_tq_t})p(I, Q; \bar{\lambda})\end{aligned}

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

                                                                \begin{aligned}\pi_i&=\gamma_1(i) \\a_{ij}&=\frac{\sum_{t=1}^{T-1}\xi_t(i,j)}{\sum_{t=1}^{T-1}\gamma_t(i)} \\b_{ij}&=\frac{\sum_{t=1, q_t=o_j}^T\gamma_t(i)}{\sum_{t=1}^T\gamma_t(i)}\end{aligned}

预测问题

近似算法

将在每个时刻t最有可能的状态作为最终的预测状态,使用下列公式计算

概率值:\begin{aligned}\gamma_(i)&=\frac{\alpha_t(i)\beta_t(i)}{P(Q;\lambda)} \\&=\frac{\alpha_t(i)\beta_t(i)}{\sum_{j=1}^n\alpha_t(j)\beta_t(j)}\end{aligned}

Viterbi算法

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

                                        \begin{aligned}\delta_t(i)&=\max_{i_1, i_2, \dots, i_{t-1}}p(i_t=i, i_1, i_2, \dots, i_{t-1}, q_t, q_{t-1}, \dots, q_1; \lambda) \\\delta_1(i)&=\pi_ib_{iq_1} \\\delta_{t+1}(i)&=\max_{1\le j\le n}(\delta_t(j)a_{ji})b_{iq_{t+1}} \\P^{\ast}&=\max_{1\le i\le n}\delta_T(i)\end{aligned}
HMM应用

HMM的常见应用主要用于进行特征提取的场景中或者数据标注的场景中。

在Scikit-learn中安装HMM工具包:

pip install hmmlearn

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值