【隐马尔可夫模型】隐马尔可夫模型的观测序列概率计算算法及例题详解

【隐马尔可夫模型】用前向算法计算观测序列概率P(O|λ)​​​​​​​

【隐马尔可夫模型】用后向算法计算观测序列概率P(O|λ)

隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状志的序列,再由各个状态随机生成一个观测而产生观测的序列的过程。模型本身属于生成模型,表示状态序列和观测序列的联合分布,但是状态序列是隐藏不可观测的。

观测序列概率的计算需要有效的算法支撑。

模型\lambda=(A,B,\pi),A为状态转移概率矩阵,B为观测概率矩阵,π 为初始状态概率向量

直接计算法

直接计算法主要用于阐释思路,概念上可行但计算上不可行(计算量过大)

思路:

1、列举所有可能的长度为$T$的状态序列$I=(i_1,i_2,...,i_T)$

2、求各个状态序列$I$与观测序列$O=(o_1,o_2,\cdots,o_T)$的联合概率$P(O,I|\lambda)$

3、对所有可能的状态序列求和,得到$P(O|\lambda).$

扫描二维码关注公众号,回复: 17224606 查看本文章

输入:隐马尔可夫模型$\lambda=(A,B,\pi)$和观测序列$O=(o_1,o_2,\cdots,o_T)$

输出:贯彻序列$O$ 出现的概率,

1)状态序列$I=(i_1,i_2,\cdots,i_T)$的概率

$P(I\mid\lambda)=\pi_{i_{1}}a_{i_{1}i_{2}}a_{i_{2}i_{3}}\cdots a_{i_{T-1}i_{T}}$

2)对固定的状态序列$I=(i_1,i_2,\cdots,i_T)$ , 观测序列$O=(o_1,o_2,\cdots,o_T)$的概率

$ P(O\mid I,\lambda)=b_{i_{1}}(o_{1})b_{i_{2}}(o_{2})\cdotp\cdotp\cdotp b_{i_{T}}(o_{T}) $

3)$O$$I$同时出现的联合概率

\begin{aligned} P(O,I|\lambda)& =P(O|I,\lambda)P(I|\lambda)=\pi_{i_1}b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)\cdots a_{i_{T-1}i_T}b_{i_T}(o_T) \end{aligned}

4)对所有可能的状态序列$I$求和,得到观测序列$O$的概率

$ \begin{aligned} P(O|\lambda)& =\sum_{I}P(O\mid I,\lambda)P(I\mid\lambda) =\sum_{i_{1},i_{2},\cdots,i_{T}}\pi_{i_{1}}b_{i_{1}}(o_{1})a_{i_{2}}b_{i_{2}}(o_{2})\cdots a_{i_{r-1}i_{T}}b_{i_{T}}(o_{T}) \end{aligned} $

实际操作中,步骤四的计算量很大,是$O(TN^T)$阶的

前向算法

前向概率: 给定隐马尔可夫模型\lambda=(A,B,\pi),定义到时刻t 部分观测序列为o_1,o_2,\cdots,o_t且状态为q_i 的概率为前向概率,记作\alpha_t(i)=P(o_1,o_2,\cdots,o_t,i_t=q_i|\lambda)

输入:隐马尔可夫模型$\lambda=(A,B,\pi)$和观测序列$O=(o_1,o_2,\cdots,o_t)$

输出:观测序列$O$ 出现的概率$P(O|\lambda)$

1)初值,\alpha_1(i)=\pi_ib_i(o_1),\quad i=1,2,\cdots,N

2)递推,对t=1,2,\cdots,T-1,

\alpha_{t+1}(i)=\left[\sum_{j=1}^N\alpha_t(j)a_{ji}\right]b_i(o_{t+1}),\quad i=1,2,\cdots,N

3)终止 

P(O|\lambda)=\sum_{i=1}^N\alpha_T(i)

计算量$O(TN^2)$

例: 盒子和球模型$\lambda=(A,B,\pi)$,状态集合Q=\{1,2,3\},观测集合V=\{Red,White\}

\left.A=\left[\begin{array}{ccc}0.5&0.2&0.3\\0.3&0.5&0.2\\0.2&0.3&0.5\end{array}\right.\right],\quad B=\left[\begin{array}{ccc}0.5&0.5\\0.4&0.6\\0.7&0.3\end{array}\right],\quad\pi=\left[\begin{array}{c}0.2\\0.4\\0.4\end{array}\right]

T=3,O=(\text{Red,White,Red}),用前向算法求$P(O|\lambda)$

解答:

1)初值 

\begin{aligned}\alpha_1(1)&=\pi_1b_1(o_1)=0.10\\\alpha_1(2)&=\pi_2b_2(o_1)=0.16\\\alpha_1(3)&=\pi_3b_3(o_1)=0.28\end{aligned}

A为状态转移概率矩阵,B为观测概率矩阵,π 为初始状态概率向量,O为观测序列

a_{ij} ——A的i行j列,b_i(o_j)——B的i行o_j

例如o_1对应Red,对应观测集合V的第一列,对应观测概率矩阵B的第一列

2)递推

\begin{aligned} \alpha_{2}(1)& =\left[\sum_{i=1}^{3}\alpha_{1}(i)a_{i1}\right]b_{1}(o_{2})=0.154\times0.5=0.077 \\ \alpha_{2}(2)& =\left[\sum_{i=1}^3\alpha_1(i)a_{i2}\right]b_2(o_2)=0.184\times0.6=0.1104 \\ \alpha_{2}(3)& =\left[\sum_{i=1}^3\alpha_1(i)a_{i3}\right]b_3(o_2)=0.202\times0.3=0.0606\\ \\ \alpha_{3}(1)& =\left[\sum_{i=1}^3\alpha_2(i)a_{i1}\right]b_1(o_3)=0.04187 & \\ \alpha_{3}(2)& =\left[\sum_{i=1}^3\alpha_2(i)a_{i2}\right]b_2(o_3)=0.03551 \\ \alpha_{3}\left(3\right)& =\left[\sum_{i=1}^3\alpha_2(i)a_{i3}\right]b_3(o_3)=0.05284 \end{aligned}

b_i(o_j)B的i行o_j列,b_1(o_3)就是对应B的第一行第一列的元素

3)终止

P(O|\lambda)=\sum_{i=1}^3\alpha_3(i)=0.13022

递推至T=3,对前向概率求和得到$P(O|\lambda)$

后向算法

后向概率: 给定隐马尔可夫模型\lambda=(A,B,\pi),定义到时刻t 状态为q_i 的条件下,从t+1到T的部分观测序列为o_{t+1},o_{t+2},\cdots,o_T的概率为后向概率,记作

\beta_t(i)=P(o_{t+1},o_{t+2},\cdots,o_T|i_t=q_i,\lambda)

输入:隐马尔可夫模型$\lambda=(A,B,\pi)$和观测序列$O=(o_{t+1},o_{t+2},\cdots,o_T)$

输出:观测序列O出现的概率$P(O|\lambda)$

1)初值,\beta_T(i)=1,\quad i=1,2,\cdots,N

2)递推,对t=T-1,T-2,\cdots,1

\beta_t(i)=\sum_{j=1}^Na_{ij}b_j(o_{t+1})\beta_{t+1}(j),\quad i=1,2,\cdots,N

3)终止 

P(O|\lambda)=\sum_{i=1}^N\pi_ib_i(o_1)\beta_1(i)

计算量$O(TN^2)$

例: 盒子和球模型$\lambda=(A,B,\pi)$

\left.A=\left[\begin{array}{ccc}0.5&0.2&0.3\\0.3&0.5&0.2\\0.2&0.3&0.5\end{array}\right.\right],\quad B=\left[\begin{array}{ccc}0.5&0.5\\0.4&0.6\\0.7&0.3\end{array}\right],\quad\pi=(0.2,0.4,0.4)^\mathrm{T}

T=4,O=(\text{Red,White,Red,White}),用后向算法求$P(O|\lambda)$

解答:

1)初值 

\mathrm{\beta}_4\left(\mathrm{i}\right)=1\quad\mathrm{~i}=1,2,3

A为状态转移概率矩阵,B为观测概率矩阵,π 为初始状态概率向量,O为观测序列

从T=4向下递推,一般设后向概率初值为1

2)递推

递推至\beta _1终止

\begin{aligned} \beta_3\left(1\right)& =\sum_{\mathrm{j}=1}^3\mathrm{a}_{1\mathrm{j}}\mathrm{b}_{\mathrm{j}}\left(\mathrm{O}_{4}\right)\beta_{4}\left(\mathrm{j}\right)=0.25+0.12+0.09=0.46 \\ \beta_{3}\left(2\right)& \mathrm{=\sum_{j=1}^3a_{2j}b_{j}\left(O_{4}\right)\beta_{4}\left(j\right)=0.15+0.3+0.06=0.51} \\ \beta_{3}\left(3\right)& =\sum_{\mathrm{j}=1}^3\mathrm{a}_{3\mathrm{j}}\mathrm{b}_{\mathrm{j}}\left(\mathrm{O}_{4}\right)\mathrm{\beta}_{4}\left(\mathrm{j}\right)=0.1+0.18+0.15=0.43 \\ \end{aligned}

\begin{aligned}\beta_2\left(1\right)&=\sum_{\mathrm{j}=1}^3\mathrm{a}_{1\mathrm{j}}\mathrm{b}_{\mathrm{j}}\left(\mathrm{O}_3\right)\beta_3\left(\mathrm{j}\right)=0.25*0.46+0.08*0.51+0.21*0.43=0.2461\\\beta_2\left(2\right)&=\sum_{\mathrm{j}=1}^3\mathrm{a}_{2\mathrm{j}}\mathrm{b}_{\mathrm{j}}\left(\mathrm{O}_3\right)\beta_3\left(\mathrm{j}\right)=0.15*0.46+0.2*0.51+0.14*0.43=0.2312\\\beta_2\left(3\right)&=\sum_{\mathrm{j}=1}^3\mathrm{a}_{3\mathrm{j}}\mathrm{b}_{\mathrm{j}}\left(\mathrm{O}_3\right)\beta_3\left(\mathrm{j}\right)=0.1*0.46+0.12*0.51+0.35*0.43=0.2577\end{aligned}

\begin{aligned}&\mathrm{\beta_1\left(1\right)=\sum_{j=1}^3a_{1j}b_j\left(O_2\right)\beta_2\left(j\right)=0.25*0.2461+0.12*0.2312+0.09*0.2577=0.112462}\\&\mathrm{\beta_1\left(2\right)=\sum_{j=1}^3a_{2j}b_j\left(O_2\right)\beta_2\left(j\right)=0.15*0.2461+0.3*0.2312+0.06*0.2577=0.121737}\\&\mathrm{\beta_1\left(3\right)=\sum_{j=1}^3a_{3j}b_j\left(O_2\right)\beta_2\left(j\right)=0.1*0.2461+0.18*0.2312+0.15*0.2577=0.104881}\end{aligned}

a_{ij} ——A的i行j列,b_i(o_j)——B的i行o_j

b_i(o_j)B的i行o_j列,b_1(o_3)就是对应B的第一行第一列的元素

3)终止

\mathrm{P}\left(\mathrm{O}|\lambda)\right.=\sum_{i=1}^3\pi_\mathrm{i}b_\mathrm{i}\left(\mathrm{O}_1\right)\beta_1\left(\mathrm{i}\right)=0.0600908

猜你喜欢

转载自blog.csdn.net/weixin_73404807/article/details/134555627