机器学习:《统计学习方法》笔记(一)—— 隐马尔可夫模型

版权声明:转载请注明来处 https://blog.csdn.net/qq_24034545/article/details/83781200

参考:《统计学习方法》——李航;隐马尔可夫模型——码农场

摘要

介绍隐马尔可夫模型的基本概念、概率计算、学习方法、预测方法等内容。

正文

1. 基本概念

隐马尔可夫模型是关于时序的模型,描述一个隐藏的马尔可夫链随机生成不可观测的状态序列,再由各个状态序列生成一个可观测的观测序列的过程。模型由初始概率分布(\small \pi状态转移概率分布(\small A)观测概率分布(\small B)决定,即模型可以表示为\small \lambda =\left(A,B,\pi \right )

状态转移矩阵:

A=\left[a_{ij} \right ]_{N\times N} ,

其中a_{ij}表示从状态i转变为状态j的概率,即

a_{ij}=P\left(i_{t+1}=q_{j}|i_{t}=q_{i} \right ), i=1,2,3...N; j=1,2,3...N

观测矩阵:

B=\left[b_{j}\left(k \right ) \right ]_{N \times M}

其中b_{j}\left(k \right )表示在时刻t处于状态q_{j}时,观测为v_{k}的概率,即

b_{j}\left(k \right )=P\left(o_{t}=v_{k}|i_{t}=q_{j} \right ), k=1,2,3...M; j=1,2,3...N

初始概率分布:

\small \pi=\left(\pi_{i}\right)

其中\small \pi_{i}表示初始时处理状态\small q_{i}的概率,即

\small \pi=P\left(i_{1}=q_{i} \right ), i=1,2,3...N

需要注意的是,从模型的定义上来看,模型有两个假设:当前时刻的状态只与前一时刻的状态相关(齐次马尔可夫性);当前时刻的观测只取决于当前的状态(观测独立性)。

注:笔者在看书时有个疑惑,即在时刻t状态为q_{i}t+1时刻的状态是q_{j}=q_{i}a_{ij}还是q_{j}=q_{i}b_{i}\left(o_{t})a_{ij}。应该是前者,即中间状态噏状态相关,与观测无关。

2. 概率计算

马尔可夫模型的概率计算问题,可以归结为给定模型\small \lambda =\left(A,B,\pi \right )和观测序列\small O=\left(o_{1},o_{2} ,...,o_{T}\right ),计算在模型\small \lambda下观测序列出现的概率\small P\left(O|\lambda \right )。可以利用前向后向算法来计算。

  2.1前向算法

前向概率:给定马尔可夫模型\small \lambda,定义到时刻\small t时,状态为\small q_{i},观测序列为\small o_{1},o_{2},...o_{t}的概率为前向概率。即

\small \alpha_{t} \left(i \right ) = P\left(o_{1},o_{2},...,o_{t},i_{t}=q_{i}|\lambda \right )

假设初始值为

\small \alpha_{1}\left(i \right ) = \pi_{i}b_{i}\left(o_{1} \right ), i=1,2,..N

时刻\small t+1的概率为

  \small \alpha_{t+1}\left(i \right )=\left[\sum_{j=1}^{N}\alpha_{t}\left(j \right )a_{ji} \right ]b_{i}\left(o_{t+1} \right )

  \small P\left(O|\lambda \right ) = \sum_{i=1}^{N}\alpha_{T}\left(i \right )

\small \alpha_{t+1}\left(i \right )=\left[\sum_{j=1}^{N}\alpha_{t}\left(j \right )a_{ji} \right ]b_{i}\left(o_{t+1} \right )的解释为,计算到时刻\small t+1部分观测序列为\small o_{1},o_{2},...,o_{t+1}且在时刻\small t+1处于状态\small q_{i}的前向概率。\small \alpha_{t}\left(j \right )a_{ji}表示到时刻\small t观测到\small o_{1},o_{2},...,o_{t}且在时刻\small t处于状态\small q_{j},而在时刻\small t+1处于状态\small q_{i}的联合概率。对这个乘积在时刻\small t的所有可能的N个状态求和,其结果表示到时刻\small t观测到\small o_{1},o_{2},...,o_{t}且在时刻\small t+1处于状态\small q_{i}的联合概率。再乘以\small b_{i}_(o_{t+1})后,其结果表示到时刻\small t+1观测到\small o_{1},o_{2},...,o_{t+1}且在时刻\small t+1处于状态\small q_{i}的联合概率

\small P\left(O|\lambda \right ) = \sum_{i=1}^{N}\alpha_{T}\left(i \right )的解释为,在\small T时刻时,\small \alpha_{T}(i)=P(o_{1},o_{2},...o_{T},i_{T}=q_{i}|\lambda),对在时刻\small T的所有状态求和,即表示到时刻\small T观测到\small o_{1},o_{2},...,o_{T}的概率

解释图如下所示。

  2.2后向算法

后向概率:给定马尔可夫模型\lambda,定义在时刻t状态为q_{i}的条件下,从t+1T的部分观测序列为o_{1},o_{2},...,o_{T}的概率为后向概率。公式为:

\beta_{t}(i) = P\left(o_{t+1},o_{t+2},...,o_{T}|i_{t}=q_{i},\lambda \right )

假设T时刻

\beta_{T}\left(i \right )=1, i=1,2,...,N

对于t=T-1,T-2,...,1

\beta_{t}\left(i \right )=\sum_{j=1}^{N}a_{ij}b_{j}\left(o_{t+1} \right )\beta_{t+1}\left(j \right ), i=1,2,...,N

所以

P\left(O|\lambda \right )=\sum_{i=1}^{N}\pi_{i}b_{i}\left(o_{1} \right )\beta_{1}\left(i \right ) 

解释图如下所示

  2.3前向后向算法

利用前向后向概率的定义,可以将观测序列概率写成

P\left(O|\lambda \right )=\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_{t}\left(i \right )a_{ij}b_{j}\left(o_{t+1} \right )\beta_{t+1}\left(j \right ), t=1,2,...,T-1

  2.4重要概率的计算

在给定观测序列O和模型\lambda的情况下,在时刻t处于状态q_{i}的概率为

\gamma_{t}\left(i \right )=P\left(i_{t}=q_{i}|O,\lambda \right )=\frac{P\left(i_{t}=q_{i},O|\lambda \right )}{P\left(O|\lambda \right )}

P\left(i_{t}=q_i,O|\lambda \right )=\alpha_t\left(i \right )\beta_t\left(i \right )

P\left(O|\lambda \right )=\sum_{j=1}^{N}\alpha_t\left(j \right )\beta_t\left(j \right )

在给定模型与观测序列的情况下,在时刻t处于状态q_i且在时刻t+1处理状态q_j的概率为

\xi_t \left(i,j \right )=P\left(i_t=q_i,i_{t+1}=q_j|O,\lambda \right )=\frac{P\left(i_t=q_i,i_{t+1}=q_j,O|\lambda \right )}{P\left(O|\lambda \right )}

P\left(i_t=q_i,i_{t+1}=q_j,O|\lambda \right )=\alpha_t\left(i \right )a_{ij}b_j\left(o_{t+1} \right )\beta_{t+1}(j)

P\left(O|\lambda \right )=\sum_{i=1}^{N}\sum_{j=1}^{N}P\left(i_t=q_i,i_{t+1}=q_j,O|\lambda \right )

可以将\gamma_t\left(i \right )\xi_t\left(i,j \right )对各个时刻求各,得到如下有用的期望值:

(1)在观测状态O下状态i出现的期望值,即在各个时刻出现状态i的总和

\sum_{t=1}^{T}\gamma_t\left(i \right )

(2)在观测状态O下由状态i转移的期望值,即在除最后时刻外,各个时刻出现状态i的总和

\sum_{t=1}^{T-1}\gamma_t\left(i \right )

(3)在观测状态O下由状态i转移到状态j的期望值,即对每个时刻由状态i转换到状态j的概率的总和

\sum_{t=1}^{T-1}\xi_t\left(i,j \right )

3.学习算法——Baum-Welch算法

隐马尔可夫的学习问题为给定观测序列,状态序列未知,学习隐马尔可夫模型的参数。把观测序列看作观测数据O,状态序列看作不可观测的隐数据I,则隐马尔可夫模型可看作一个含有隐变量的概率模型

P\left(O|\lambda \right )=\sum_I P\left(O|I,\lambda \right )P\left(I|\lambda \right )

所以参数学习可以用EM算法实现。

  3.1.确定完全数据的对数似然函数

观测数据O=\left(o_1,o_2,...,o_T \right ),隐数据I=\left(i_1,i_2,...,i_T \right ),则完全数据为(O,I)=(o_1,o_2,...,o_T,i_1,i_2,...,i_T)。完全数据对应的对数似然函数是\log{p\left(O,I|\lambda \right )}

  3.2.EM算法的E步

Q函数为

Q(\lambda,\overline{\lambda})=\sum_{I}\log P\left(O,I|\lambda \right )P\left(O,I|\overline{\lambda} \right )

\dpi{120} P\left(O,I|\lambda \right )=\pi_{i_1}b_{i_1}\left(o_1 \right )a_{i_1 i_2}b_{i_2}\left(o_2 \right )\cdot \cdot \cdot a_{i_{T-1}i_{T}}b_{i_T}\left(o_T \right )

\overline{\lambda}是隐马参数的当前估计值,\lambda是要极大化的隐马参数。

上式可写成

Q\left(\lambda,\overline \lambda \right ) = \sum_{I}\log \pi_{i_1}P\left(O,I|\overline \lambda \right )+\sum_I \left(\log \sum_{t=1}^{T-1}a_{i_t j_{t+1}} \right )P\left(O,I|\overline \lambda \right )+\sum_I \left(\sum_{I}^{T} b_{i_t} \left(o_t \right ) \right) P\left(O,I|\overline \lambda \right )

  3.3.EM算法的M步

对上式三部分分别利用拉格朗日乘子法,写出拉格朗日函数,并求偏导数,得到各个参数的值。

第一部分可以写成

\sum_{I}\log \pi_{i_0}}P\left(O,I|\overline \lambda \right )=\sum_{i=1}^{N} \log \pi_{i}P\left(O, i_1=i| \overline \lambda \right )

其中 \sum_{i=1}^{N}\pi_i = 1,利用拉格朗日乘子法后,可得

P\left(I,i_1=i|\overline \lambda \right )+\gamma \pi_{i}=0

i求和得到

\gamma = -P\left(O|\overline \lambda \right )

进而可以得到

\pi_i = \frac{P\left(O, i_1=i|\overline \lambda \right )}{P\left(O|\overline \lambda \right )}

第二部分写成

\sum_{i=1}^{N}\sum_{j=1}^{N}\sum_{t=1}^{T-1} \log a_{ij}P\left(O,i_t=i,i_{t+1}=j|\overline \lambda \right )

其中\sum_{j=1}^{N}a_{ij}=1,利用拉格朗日乘子法后,可得

a_{ij}=\frac{\sum_{t=1}^{T-1}P\left(O,i_t=i,i_{t+1}=j|\overline \lambda \right )}{ \sum_{t=1}^{T-1}P\left(O,i_t=i|\overline \lambda \right)}

第三部分写成

\sum_{j=1}^{N}\sum_{t=1}^{T-1}\log b_j\left(o_t \right )P\left(O,i_t=j|\overline \lambda \right )

其中\sum_{k=1}^{M}b_j\left(k \right )=1o_t=v_kb_j\left(o_t \right )b_j\left(k \right )的偏导数才不为,以I\left(o_t=v_k \right )表示。利用拉格朗日乘子法后,可得

b_j\left(k \right )=\frac{\sum_{t=1}^{T}P\left(O,i_t=j|\overline\lambda \right )I\left(o_t=v_k \right )}{\sum_{t=1}^{T}P\left(O,i_t=j|\overline\lambda \right )}

  3.4. Baum-Welch模型参数估计公式

输入:观测数据O=\left(o_1,o_2,...o_T \right )

输出:隐马尔可夫模型参数

初始化,n=0,选取a_{ij}^{(0)}, b_j\left(k \right )^{(0)},\pi_i^{(0)},得到模型\lambda^{(0)}=\left(A^{(0)},B^{(0)},\pi^{(0)} \right )

对于n=1,2,...

a_{ij}^{(n+1)}=\frac{\sum_{t=1}^{T+1}\xi_t\left(i,j \right )}{\sum_{t=1}^{T-1}\gamma_t\left(i \right )}

b_j\left(k \right )^{(n+1)}=\frac{\sum_{t=1,o_t=v_k}^{T}\gamma_t\left(j \right )}{\sum_{t=1}^{T}\gamma_t\left(j \right )}

\pi_i^{(n+1)}=\gamma_1\left(i \right )

最后得到模型参数\lambda^{(n+1)}=\left(A^{(n+1)},B^{(n+1)},\pi^{(n+1)} \right )

4.利用维特比算法来预测

维特比算法实际上是用了动态规划的思想,在每个时刻记录每个由状态j(N种可能)转变为状态i,且观测为o_t的最大概率的路径,最后比较在时刻T时的概率,选出概率最大者,并取出能到达该状态的那条路径作为状态序列。

算法过程如下:

初始化

\delta _1\left(i \right )=\pi_ib_i\left(O_1 \right ), i=1,2,...N

\psi _1\left(i \right )=0, i=1,2,...N

对于t=2,3,...,T

\delta_t\left(i \right )=\max_{1\leq j\leq N}\left[\delta_{t-1}\left(j \right )a_{ji} \right ]b_i\left(o_t \right ) i=1,2,...,N

\psi_t\left(i \right )=\arg \max_{1\leq j \leq N}\left[\delta_{t-1} \left(j \right )a_{ji}\right ], i=1,2,...,N (记录上一时刻的结果与当前时刻的转移概率乘积的最大值所对应的当前状态i

最后

P^{*} = \max_{1\leq i \leq N}\delta_T\left(i \right )

i_{T}^{*}=\arg \max_{1\leq i \leq N}\left[\delta_T\left(i \right ) \right ]

对于t=T-1,T-2,...,1,可以用最优路径回溯来求出

i^{*}_{t} = \psi_{t+1}\left(i^{*}_{t+1} \right )

分析一道例题来使该过程更加形象。

例题是《统计学习方法》中P186页例10.3。题目不再赘述,只是简单地讲一下与上述步骤相关的过程。左图为原图,右图中的红线是计算过程中由于结果小而忽略的情况。

初始状态1,2,3的 \delta _1\left(i \right )=\pi_ib_i\left(O_1 \right ), i=1,2,...N 为0.28,0.16,0.1;

利用公式\delta_1\left(j \right )a_{ji}b_i(o_2)计算在t=2时各个状态对应的概率值,最后只保留最大的概率值,即0.042,0.0504,0.028,并记录达到最大值时,上一时刻的状态,即状态3。

t=3时,从状态1到状态3的\delta_2\left(j \right )a_{ji}b_i(o_3)计算结果要大于状态2/3的概率值,因此对于状态3,记录计算值0.0147和对应的上一时刻的状态,即状态,3;状态2和3也是如此。

最后比较t=3时,各个概率值,0.0147最大,因此从状态3开始回溯,能够使\delta_2\left(i \right )a_{i3}b_3(o_3)最大的状态是状态3,即t=2的状态为3,同理t=1时,状态为3。


注1:本博客只作笔者笔记用途,仅供参考用,若有侵权行为请留言联系,笔者会在第一时间回复。

注2:码字不易,若转载请注明出处。

猜你喜欢

转载自blog.csdn.net/qq_24034545/article/details/83781200