隐马尔可夫模型简介

整理了李航和周志华书上的内容。
将隐马尔可夫模型中的变量分为两组:一组为状态变量{y1,y2,…,yT}\left\{ {{y_1},{y_2}, \ldots ,{y_T}} \right\}{y1​,y2​,…,yT​},其中yi∈Y{y_i} \in {\Bbb Y}yi​∈Y表示第iii时刻的系统状态,通常这个状态变量是隐藏的、不可观测的,因此状态变量也被称为隐变量。第二组变量是观测变量{x1,x2,…,xn}\left\{ {{x_1},{x_2}, \ldots ,{x_n}} \right\}{x1​,x2​,…,xn​},其中xi∈X{x_i} \in {\Bbb X}xi​∈X表示第iii时刻的观测值。状态变量yi{y_i}yi​在多个状态{s1,s2,…,xN}\left\{ {{s_1},{s_2}, \ldots, {x_N}} \right\}{s1​,s2​,…,xN​}之间切换,即Y{\Bbb Y}Y的取值范围是{s1,s2,…,sN}\left\{ {{s_1},{s_2}, \ldots ,{s_N}} \right\}{s1​,s2​,…,sN​};观测变量在多个状态{o1,o2,…,oM}\left\{ {{o_1},{o_2}, \ldots ,{o_M}} \right\}{o1​,o2​,…,oM​}之间切换,即X{\Bbb X}X的取值范围是{o1,o2,…,oM}\left\{ {{o_1},{o_2}, \ldots ,{o_M}} \right\}{o1​,o2​,…,oM​}。

如图表示了变量之间的依赖关系。在任意时刻,观测变量的取值仅依赖状态变量,即xtx_txt​仅由yty_tyt​确定,与其他状态变量的取值无关。同时,ttt时刻的状态变量仅依赖于t−1t-1t−1时刻的状态yt−1{y_{t-1}}yt−1​,与其余的状态变量无关。这就是“马尔科夫链”:系统的下一时刻的状态仅由当前状态决定,不依赖以往的任何状态。
除此之外,确定一个马尔科夫模型还需要三组参数:初始状态概率、状态转移概率以及输出观测概率。

初始状态概率:模型在初始时刻状态变量y1y_1y1​为各个状态的概率,记为Π=(π1,π2,…,πN){\Pi } = \left( {{\pi _1},{\pi _2}, \ldots ,{\pi _N}} \right)Π=(π1​,π2​,…,πN​),其中πi=P(y1=si),1⩽i⩽N{\pi _i} = P\left( {{y_1} = s{}_i} \right),1 \leqslant i \leqslant Nπi​=P(y1​=si​),1⩽i⩽N表示模型的初始状态为si{s{}_i}si​的概率。下文中也表示为πy1=P(y1=si),1⩽i⩽N{\pi _{{y_1}}} = P({y_1} = {s_i}),1 \leqslant i \leqslant Nπy1​​=P(y1​=si​),1⩽i⩽N。
状态转移概率:状态变量在各个状态转换的概率,记为矩阵A=[aij]N×N{\bf{A}} = {\left[ {{a_{ij}}} \right]_{N \times N}}A=[aij​]N×N​,其中aij=P(yt+1=sj∣yt=si),1⩽i,j⩽N{a_{ij}} = P\left( {{y_{t + 1}} = {s_j}|{y_t} = {s_i}} \right),1 \leqslant i,j \leqslant Naij​=P(yt+1​=sj​∣yt​=si​),1⩽i,j⩽N表示任意时刻ttt,若状态为si{{s_i}}si​,则观测oj{o_j}oj​被获取的概率。下文中下标ijijij会视情况而灵活变化,当iii变为yty_tyt​时,表示此时的状态变量yt=siy_t=s_iyt​=si​;当jjj变为xtx_txt​时,表示此时的观测变量xt=ojx_t=o_jxt​=oj​。
输出观测概率:在当前状态变量的前提下获取各个观测值的概率,记为矩阵B=[bij]N×M{\bf{B}} = {\left[ {{b_{ij}}} \right]_{N \times M}}B=[bij​]N×M​,其中bij=P(xt=oj∣yt=si),1⩽i⩽N,1⩽j⩽M{b_{ij}} = P\left( {{x_t} = {o_j}|{y_t} = {s_i}} \right),1 \leqslant i \leqslant N,1 \leqslant j \leqslant Mbij​=P(xt​=oj​∣yt​=si​),1⩽i⩽N,1⩽j⩽M表示任何时刻ttt,若状态为si{{s_i}}si​,则观测值oj{{o_j}}oj​被获取的概率。下文中下标ijijij会视情况而灵活变化,当iii变为yty_tyt​时,表示该时刻的状态变量yt=siy_t=s_iyt​=si​;当jjj变为xtx_txt​时,表示该时刻的状态变量xt=sjx_t=s_jxt​=sj​。
在确定了状态空间Y{\Bbb Y}Y、观测空间X{\Bbb X}X和上述三组参数之后就确定了一个隐马尔可夫模型λ=[A,B,Π]{\bf{\lambda }} = \left[ {{\bf{A}},{\bf{B}},\Pi } \right]λ=[A,B,Π],它按如下过程产生观测序列{x1,x2,…,xT}\left\{ {{x_1},{x_2}, \ldots, {x_T}} \right\}{x1​,x2​,…,xT​}:
1)设置t=1t=1t=1,根据初始状态概率Π\PiΠ选择初始状态y1y_1y1​;
2)根据状态yty_tyt​和输出观测概率B\bf{B}B选择观测变量取值xtx_txt​;
3)根据状态yty_tyt​和状态转移矩阵A\bf{A}A转移模型状态,即确定yt+1y_{t+1}yt+1​;
4)若t&lt;Tt&lt;Tt<T,设置t=t+1t=t+1t=t+1,并转到第2步,否则停止。

隐马尔可夫模型的三个基本问题:
1)给定模型λ=[A,B,Π]{\bf{\lambda }} = \left[ {{\bf{A}},{\bf{B}},\Pi } \right]λ=[A,B,Π],如何计算观测序列x={x1,x2,⋯&ThinSpace;,xT}{\bf x}=\left\{ {{x_1},{x_2}, \cdots ,{x_T}} \right\}x={x1​,x2​,⋯,xT​}的概率P(x∣λ)P\left( {{\bf{x}}|{\bf{\lambda }}} \right)P(x∣λ),即如何评估模型与观测序列的匹配度?
2)给定模型λ=[A,B,Π]{\bf{\lambda }} = \left[ {{\bf{A}},{\bf{B}},\Pi } \right]λ=[A,B,Π]和观测序列x={x1,x2,⋯&ThinSpace;,xT}x=\left\{ {{x_1},{x_2}, \cdots ,{x_T}} \right\}x={x1​,x2​,⋯,xT​},如何找到与此观测序列最为匹配的状态序列y={y1,y2,⋯&ThinSpace;,yT}{\bf y}=\left\{ {{y_1},{y_2}, \cdots ,{y_T}} \right\}y={y1​,y2​,⋯,yT​},即如何根据观测序列推断出隐藏的模型状态?
3)给定观测序列x={x1,x2,⋯&ThinSpace;,xT}{\bf x}=\left\{ {{x_1},{x_2}, \cdots, {x_T}} \right\}x={x1​,x2​,⋯,xT​},如何调整模型参数λ=[A,B,Π]{\bf{\lambda }} = \left[ {{\bf{A}},{\bf{B}},\Pi } \right]λ=[A,B,Π]使得该序列出现的概率P(x∣λ)P\left( {{\bf{x}}|{\bf{\lambda }}} \right)P(x∣λ)最大,即如何训练模型?

概率计算算法

直接计算法

给定模型为λ=[A,B,Π]{\bf{\lambda }} = \left[ {{\bf{A}},{\bf{B}},\Pi } \right]λ=[A,B,Π]和观测序列x={x1,x2,⋯&ThinSpace;,xT}{\bf x}=\left\{ {{x_1},{x_2}, \cdots, {x_T}} \right\}x={x1​,x2​,⋯,xT​}。对于状态序列y={y1,y2,⋯&ThinSpace;,yT}{\bf y}=\left\{ {{y_1},{y_2}, \cdots ,{y_T}} \right\}y={y1​,y2​,⋯,yT​},每个时刻的状态变量yty_tyt​都有{s1,s2,…,xN}\left\{ {{s_1},{s_2}, \ldots, {x_N}} \right\}{s1​,s2​,…,xN​}N种可能,直接计算法就是列举所有的y{\bf y}y序列(共NT{N^T}NT种序列),然后对所有可能的状态序列求和,得到P(x∣λ)P\left( {{\bf{x}}|{\bf{\lambda }}} \right)P(x∣λ)。
某一状态序列y={y1,y2,⋯&ThinSpace;,yT}{\bf y}=\left\{ {{y_1},{y_2}, \cdots ,{y_T}} \right\}y={y1​,y2​,⋯,yT​}的概率是P(y∣λ)=πy1ay1y2ay2y3⋯ayT−1yTP\left( {{\bf{y}}|{\bf{\lambda }}} \right) = {\pi _{{y_1}}}{a_{{y_1}{y_2}}}{a_{{y_2}{y_3}}} \cdots {a_{{y_{T - 1}}{y_T}}}P(y∣λ)=πy1​​ay1​y2​​ay2​y3​​⋯ayT−1​yT​​,以此为前提的观测序列是x={x1,x2,⋯&ThinSpace;,xT}{\bf x}=\left\{ {{x_1},{x_2}, \cdots, {x_T}} \right\}x={x1​,x2​,⋯,xT​}的概率是P(x∣y,λ)=by1x1by2x2⋯byTxTP\left( {{\bf{x|y,\lambda }}} \right) = {b_{{y_1}{x_1}}}{b_{{y_2}{x_2}}} \cdots {b_{{y_T}{x_T}}}P(x∣y,λ)=by1​x1​​by2​x2​​⋯byT​xT​​,x{\bf{x}}x和y{\bf{y}}y同时出现的联合概率为P(x,y∣λ)=P(x∣y,λ)P(y∣λ)=πy1by1x1ay1y2by2x2⋯ayT−1yTbyTxTP\left( {{\bf{x,y}}|{\bf{\lambda }}} \right) = P\left( {{\bf{x}}|{\bf{y}},{\bf{\lambda }}} \right)P\left( {{\bf{y}}|{\bf{\lambda }}} \right) = {\pi _{{y_1}}}{b_{{y_1}{x_1}}}{a_{{y_1}{y_2}}}{b_{{y_2}{x_2}}} \cdots {a_{{y_{T - 1}}{y_T}}}{b_{{y_T}{x_T}}}P(x,y∣λ)=P(x∣y,λ)P(y∣λ)=πy1​​by1​x1​​ay1​y2​​by2​x2​​⋯ayT−1​yT​​byT​xT​​。对所有的状态序列y{\bf y}y(共NT{N^T}NT种序列)求和,得到观测序列x{\bf x}x的概率P(x∣λ)P\left( {{\bf{x}}|{\bf{\lambda }}} \right)P(x∣λ),即P(x∣λ)=∑yP(x∣y,λ)P(y∣λ)=∑y1,y2,⋯,yTπy1by1x1ay1y2by2x2⋯ayT−1yTbyTxTP\left( {{\bf{x}}|{\bf{\lambda }}} \right) = \sum\limits_{\bf{y}} {P\left( {{\bf{x}}|{\bf{y}},{\bf{\lambda }}} \right)P\left( {{\bf{y}}|{\bf{\lambda }}} \right)} = \sum\limits_{{{\bf{y}}_{\bf{1}}}{\bf{,}}{{\bf{y}}_{\bf{2}}}{\bf{,}} \cdots {\bf{,}}{{\bf{y}}_{\bf{T}}}} {{\pi _{{y_1}}}{b_{{y_1}{x_1}}}{a_{{y_1}{y_2}}}{b_{{y_2}{x_2}}} \cdots {a_{{y_{T - 1}}{y_T}}}{b_{{y_T}{x_T}}}} P(x∣λ)=y∑​P(x∣y,λ)P(y∣λ)=y1​,y2​,⋯,yT​∑​πy1​​by1​x1​​ay1​y2​​by2​x2​​⋯ayT−1​yT​​byT​xT​​直接法计算量极大,是O(TNT)O\left( {T{N^T}} \right)O(TNT)阶的。有效算法:前向-后向算法。

前向算法

前向概率:给定隐马尔可夫模型λ{\bf{\lambda }}λ,定义到时刻ttt部分观测序列为x1,x2,⋯&ThinSpace;,xt{x_1},{x_2}, \cdots ,{x_t}x1​,x2​,⋯,xt​且状态为si{s_i}si​的概率为前向概率,记作αt(i)=P(x1,x2,⋯&ThinSpace;,xt,yt=si∣λ){\alpha _t}\left( i \right) = P\left( {{x_1},{x_2}, \cdots ,{x_t},{y_t} = {s_i}|{\bf{\lambda }}} \right)αt​(i)=P(x1​,x2​,⋯,xt​,yt​=si​∣λ)可以递推地前向概率αt(i){\alpha _t}\left( i \right)αt​(i)及观测序列概率P(x∣λ)P\left( {{\bf{x}}|{\bf{\lambda }}} \right)P(x∣λ)。
算法:
1)初值:α1(i)=πibix1,i=1,2,⋯&ThinSpace;,N{\alpha _1}\left( i \right) = {\pi _i}{b_{i{x_1}}},i = 1,2, \cdots ,Nα1​(i)=πi​bix1​​,i=1,2,⋯,N.
2)递推:对于t=1,2,⋯&ThinSpace;,T−1t = 1,2, \cdots ,T - 1t=1,2,⋯,T−1,αt+1(i)=[∑j=1Nαt(j)aji]bixt+1,i=1,2,⋯&ThinSpace;,N{\alpha _{t + 1}}\left( i \right) = \left[ {\sum\limits_{j = 1}^N {{\alpha _{t}}\left( j \right){a_{ji}}} } \right]{b_{i{x_{t + 1}}}},i = 1,2, \cdots ,Nαt+1​(i)=[j=1∑N​αt​(j)aji​]bixt+1​​,i=1,2,⋯,N.
3)终止:P(x∣λ)=∑i=1NαT(i)P\left( {{\bf{x}}|{\bf{\lambda }}} \right) = \sum\limits_{i = 1}^N {{\alpha _T}\left( i \right)} P(x∣λ)=i=1∑N​αT​(i)
例:
考虑盒子和球模型λ=(A,B,π){\bf{\lambda }} = \left( {{\bf{A}},{\bf{B}},{\bf{\pi }}} \right)λ=(A,B,π),状态集合S={1,2,3}{S} = \left\{ {1,2,3} \right\}S={1,2,3},观测集合O={红,白}{O}= \left\{红 ,白 \right\}O={红,白}
A=[0.50.20.30.30.50.20.20.30.5],B=[0.50.50.40.60.70.3],Π=(0.2,0.4,0.4)T{\bf{A}}=\left[ \begin{matrix}0.5 &amp; 0.2 &amp; 0.3 \\0.3 &amp; 0.5 &amp; 0.2 \\0.2 &amp; 0.3 &amp; 0.5\end{matrix}\right],{\bf{B}}=\left[ \begin{matrix}0.5 &amp; 0.5 \\0.4 &amp; 0.6 \\0.7 &amp; 0.3 \end{matrix}\right],\Pi={\left( {0.2,0.4,0.4} \right)^T}A=⎣⎡​0.50.30.2​0.20.50.3​0.30.20.5​⎦⎤​,B=⎣⎡​0.50.40.7​0.50.60.3​⎦⎤​,Π=(0.2,0.4,0.4)T设T=3T=3T=3,观测序列x={红,白,红}{\bf{x}} = \left\{ {红,白,红} \right\}x={红,白,红}。
s1s2s3s10.50.20.3s20.30.50.2s30.20.30.5o1o2s10.50.5s20.40.6s30.70.3\begin{matrix}&amp;{s_1}&amp;{s_2}&amp;{s_3}\\{s_1}&amp;0.5 &amp; 0.2 &amp; 0.3 \\{s_2}&amp;0.3 &amp; 0.5 &amp; 0.2 \\{s_3}&amp;0.2 &amp; 0.3 &amp; 0.5\end{matrix}\qquad \begin{matrix}&amp;{o_1}&amp;{o_2}&amp;\\{s_1}&amp;0.5 &amp; 0.5 \\{s_2}&amp;0.4 &amp; 0.6 \\{s_3}&amp;0.7 &amp; 0.3 \end{matrix}s1​s2​s3​​s1​0.50.30.2​s2​0.20.50.3​s3​0.30.20.5​s1​s2​s3​​o1​0.50.40.7​o2​0.50.60.3​
1)计算初值(t=1t=1t=1)
α1(1)=π1b1x1=0.2×0.5=0.10{\alpha _1}\left( 1 \right) = {\pi _1}{b_{1{x_1}}} = 0.2 \times 0.5 = 0.10α1​(1)=π1​b1x1​​=0.2×0.5=0.10α1(2)=π2b2x1=0.4×0.4=0.16{\alpha _1}\left( 2 \right) = {\pi _2}{b_{2{x_1}}} = 0.4 \times 0.4 = 0.16α1​(2)=π2​b2x1​​=0.4×0.4=0.16α1(3)=π3b3x1=0.4×0.7=0.28{\alpha _1}\left( 3 \right) = {\pi _3}{b_{3{x_1}}} = 0.4 \times 0.7 = 0.28α1​(3)=π3​b3x1​​=0.4×0.7=0.28
2)递推计算
t=2:t=2:t=2:
α2(1)=[∑i=13α1(i)ai1]b1x2=(0.10×0.5+0.16×0.3+0.28×0.2)×0.5=0.077{\alpha _2}\left( 1 \right) = \left[ {\sum\limits_{i = 1}^3 {{\alpha _1}\left( i \right){a_{i1}}} } \right]{b_{1{x_2}}} = \left( {0.10 \times 0.5 + 0.16 \times 0.3 + 0.28 \times 0.2} \right) \times 0.5 = 0.077α2​(1)=[i=1∑3​α1​(i)ai1​]b1x2​​=(0.10×0.5+0.16×0.3+0.28×0.2)×0.5=0.077α2(2)=[∑i=13α1(i)ai2]b2x2=(0.10×0.2+0.16×0.5+0.28×0.3)×0.6=0.1104{\alpha _2}\left( 2 \right) = \left[ {\sum\limits_{i = 1}^3 {{\alpha _1}\left( i \right){a_{i2}}} } \right]{b_{2{x_2}}} = \left( {0.10 \times 0.2 + 0.16 \times 0.5 + 0.28 \times 0.3} \right) \times 0.6 = 0.1104α2​(2)=[i=1∑3​α1​(i)ai2​]b2x2​​=(0.10×0.2+0.16×0.5+0.28×0.3)×0.6=0.1104α2(3)=[∑i=13α1(i)ai3]b3x2=(0.10×0.3+0.16×0.2+0.28×0.5)×0.3=0.0606{\alpha _2}\left( 3 \right) = \left[ {\sum\limits_{i = 1}^3 {{\alpha _1}\left( i \right){a_{i3}}} } \right]{b_{3{x_2}}} = \left( {0.10 \times 0.3 + 0.16 \times 0.2 + 0.28 \times 0.5} \right) \times 0.3 = 0.0606α2​(3)=[i=1∑3​α1​(i)ai3​]b3x2​​=(0.10×0.3+0.16×0.2+0.28×0.5)×0.3=0.0606
t=3:t=3:t=3:
α3(1)=[∑i=13α2(i)ai1]b1x3=(0.077×0.5+0.1104×0.3+0.0606×0.2)×0.5=0.04187{\alpha _3}\left( 1 \right) = \left[ {\sum\limits_{i = 1}^3 {{\alpha _2}\left( i \right){a_{i1}}} } \right]{b_{1{x_3}}} = \left( {0.077 \times 0.5 + 0.1104 \times 0.3 + 0.0606 \times 0.2} \right) \times 0.5 = 0.04187α3​(1)=[i=1∑3​α2​(i)ai1​]b1x3​​=(0.077×0.5+0.1104×0.3+0.0606×0.2)×0.5=0.04187α3(2)=[∑i=13α2(i)ai2]b2x3=(0.077×0.2+0.1104×0.5+0.0606×0.3)×0.4=0.035512{\alpha _3}\left( 2 \right) = \left[ {\sum\limits_{i = 1}^3 {{\alpha _2}\left( i \right){a_{i2}}} } \right]{b_{2{x_3}}} = \left( {0.077 \times 0.2 + 0.1104 \times 0.5 + 0.0606 \times 0.3} \right) \times 0.4 = 0.035512α3​(2)=[i=1∑3​α2​(i)ai2​]b2x3​​=(0.077×0.2+0.1104×0.5+0.0606×0.3)×0.4=0.035512α3(3)=[∑i=33α2(i)ai3]b3x3=(0.077×0.3+0.1104×0.2+0.0606×0.5)×0.5=0.052836{\alpha _3}\left( 3 \right) = \left[ {\sum\limits_{i = 3}^3 {{\alpha _2}\left( i \right){a_{i3}}} } \right]{b_{3{x_3}}} = \left( {0.077 \times 0.3 + 0.1104 \times 0.2 + 0.0606 \times 0.5} \right) \times 0.5 = 0.052836α3​(3)=[i=3∑3​α2​(i)ai3​]b3x3​​=(0.077×0.3+0.1104×0.2+0.0606×0.5)×0.5=0.052836
3)终止P(x∣λ)=∑i=13α3(i)=0.04187+0.35512+0.052836=0.130218P\left( {{\bf{x}}|{\bf{\lambda }}} \right) = \sum\limits_{i = 1}^3 {{\alpha _3}\left( i \right) = 0.04187 + 0.35512 + 0.052836 = 0.130218} P(x∣λ)=i=1∑3​α3​(i)=0.04187+0.35512+0.052836=0.130218
这一部分的Java实现。

后向算法

后向概率:给定隐马尔可夫模型λ{\bf{\lambda }}λ,定义到时刻ttt状态变量为si{s_i}si​的条件下,从t+1t+1t+1到TTT的观测序列为xt+1,xt+2,⋯xT{x_{t + 1}},{x_{t + 2}}, \cdots {x_T}xt+1​,xt+2​,⋯xT​的概率为后向概率,记作βt(i)=P(xt+1,xt+2,⋯&ThinSpace;,xT∣yt=si,λ){\beta _t}\left( i \right) = P\left( {{x_{t + 1}},{x_{t + 2}}, \cdots, {x_T}|{y_t} = {s_i},{\bf{\lambda }}} \right)βt​(i)=P(xt+1​,xt+2​,⋯,xT​∣yt​=si​,λ)可以递推后向概率βt{\beta _t}βt​及观测序列概率P(x∣λ)P\left( {{\bf{x}}|{\bf{\lambda }}} \right)P(x∣λ)。
1)初值:βT(i)=1,i=1,2,⋯&ThinSpace;,N{\beta _T}\left( i \right) = 1,i = 1,2, \cdots ,NβT​(i)=1,i=1,2,⋯,N
2)递推:对t=T−1,T−2,⋯&ThinSpace;,1t = T - 1,T - 2, \cdots ,1t=T−1,T−2,⋯,1βt(i)=∑j=1Naijbjxt+1βt+1(j),i=1,2,⋯&ThinSpace;,N{\beta _t}\left( i \right) = \sum\limits_{j = 1}^N {{a_{ij}}{b_{j{x_{t + 1}}}}{\beta _{t + 1}\left( j \right)},i = 1,2, \cdots ,N} βt​(i)=j=1∑N​aij​bjxt+1​​βt+1​(j),i=1,2,⋯,N
3)终止:P(x∣λ)=∑i=1Nπibix1β1(i)P\left( {{\bf{x}}|{\bf{\lambda }}} \right) = \sum\limits_{i = 1}^N {{\pi _i}{b_{i{x_1}}}{\beta _1}\left( i \right)} P(x∣λ)=i=1∑N​πi​bix1​​β1​(i)
例:
模型同上。
1)计算初值(t=3t=3t=3)β3(1)=1,β3(2)=1,β3(3)=1{\beta _3}\left( 1 \right) = 1,{\beta _3}\left( 2 \right) = 1,{\beta _3}\left( 3 \right) = 1β3​(1)=1,β3​(2)=1,β3​(3)=1
2)递推计算
t=2:t=2:t=2:β2(1)=∑j=13a1jbjx3β3(j)=0.5×0.5×1+0.2×0.4×1+0.3×0.7×1=0.54{\beta _2}\left( 1 \right) = \sum\limits_{j = 1}^3 {{a_{1j}}{b_{j{x_3}}}{\beta _3}\left( j \right)} = 0.5 \times 0.5 \times 1 + 0.2 \times 0.4 \times 1 + 0.3 \times 0.7 \times 1 = 0.54β2​(1)=j=1∑3​a1j​bjx3​​β3​(j)=0.5×0.5×1+0.2×0.4×1+0.3×0.7×1=0.54β2(2)=∑j=13a2jbjx3β3(j)=0.3×0.5×1+0.5×0.4×1+0.2×0.7×1=0.49{\beta _2}\left( 2 \right) = \sum\limits_{j = 1}^3 {{a_{2j}}{b_{j{x_3}}}{\beta _3}\left( j \right)} = 0.3 \times 0.5 \times 1 + 0.5 \times 0.4 \times 1 + 0.2 \times 0.7 \times 1 = 0.49β2​(2)=j=1∑3​a2j​bjx3​​β3​(j)=0.3×0.5×1+0.5×0.4×1+0.2×0.7×1=0.49β2(3)=∑j=13a3jbjx3β3(j)=0.2×0.5×1+0.3×0.4×1+0.5×0.7×1=0.57{\beta _2}\left( 3 \right) = \sum\limits_{j = 1}^3 {{a_{3j}}{b_{j{x_3}}}{\beta _3}\left( j \right)} = 0.2 \times 0.5 \times 1 + 0.3 \times 0.4 \times 1 + 0.5 \times 0.7 \times 1 = 0.57β2​(3)=j=1∑3​a3j​bjx3​​β3​(j)=0.2×0.5×1+0.3×0.4×1+0.5×0.7×1=0.57
t=1:t=1:t=1:β1(1)=∑j=13a1jbjx2β2(j)=0.5×0.5×0.54+0.2×0.6×0.49+0.3×0.3×0.57=0.2451{\beta _1}\left( 1 \right) = \sum\limits_{j = 1}^3 {{a_{1j}}{b_{j{x_2}}}{\beta _2}\left( j \right)} = 0.5 \times 0.5 \times 0.54 + 0.2 \times 0.6 \times 0.49 + 0.3 \times 0.3 \times 0.57 = 0.2451β1​(1)=j=1∑3​a1j​bjx2​​β2​(j)=0.5×0.5×0.54+0.2×0.6×0.49+0.3×0.3×0.57=0.2451β1(2)=∑j=13a2jbjx2β2(j)=0.3×0.5×0.54+0.5×0.6×0.49+0.2×0.3×0.57=0.2622{\beta _1}\left( 2 \right) = \sum\limits_{j = 1}^3 {{a_{2j}}{b_{j{x_2}}}{\beta _2}\left( j \right)} = 0.3 \times 0.5 \times 0.54 + 0.5 \times 0.6 \times 0.49 + 0.2 \times 0.3 \times 0.57 = 0.2622β1​(2)=j=1∑3​a2j​bjx2​​β2​(j)=0.3×0.5×0.54+0.5×0.6×0.49+0.2×0.3×0.57=0.2622β1(3)=∑j=13a3jbjx2β2(j)=0.2×0.5×0.54+0.3×0.6×0.49+0.5×0.3×0.57=0.2277{\beta _1}\left( 3 \right) = \sum\limits_{j = 1}^3 {{a_{3j}}{b_{j{x_2}}}{\beta _2}\left( j \right)} = 0.2 \times 0.5 \times 0.54 + 0.3 \times 0.6 \times 0.49 + 0.5 \times 0.3 \times 0.57 = 0.2277β1​(3)=j=1∑3​a3j​bjx2​​β2​(j)=0.2×0.5×0.54+0.3×0.6×0.49+0.5×0.3×0.57=0.2277
3)终止P(x∣λ)=0.2×0.5×0.2451+0.4×0.4×0.2622+0.4×0.7×0.2277=0.130218P\left( {{\bf{x}}|{\bf{\lambda }}} \right) = 0.2 \times 0.5 \times 0.2451 + 0.4 \times 0.4 \times 0.2622 + 0.4 \times 0.7 \times 0.2277 = 0.130218P(x∣λ)=0.2×0.5×0.2451+0.4×0.4×0.2622+0.4×0.7×0.2277=0.130218
前向算法和后向算法的计算量都是O(N2T)O\left( {{N^2}T} \right)O(N2T)阶的,可以将前向算法和后向算法统一写成P(x∣λ)=∑i=1N∑j=1Nαt(i)aijbjxt+1βt+1(j),t=1,2,⋯&ThinSpace;,T−1P\left( {x|\lambda } \right) = \sum\limits_{i = 1}^N {\sum\limits_{j = 1}^N {{\alpha _t}\left( i \right){a_{ij}}{b_{j{x_{t + 1}}}}{\beta _{t + 1}}\left( j \right)} ,t = 1,2, \cdots ,T - 1} P(x∣λ)=i=1∑N​j=1∑N​αt​(i)aij​bjxt+1​​βt+1​(j),t=1,2,⋯,T−1
这一部分的Java实现。

一些概率与期望值的计算

1.给定模型λ\lambdaλ和观测x{\bf{x}}x,在时刻ttt处于状态sis_isi​的概率,记γt(i)=P(yt=si∣x,λ){\gamma _t}\left( i \right) = P\left( {{y_t} = {s_i}|{\bf{x,\lambda }}} \right)γt​(i)=P(yt​=si​∣x,λ)。
由前后向概率,有αt(i)βt(i)=P(yt=si,x∣λ){\alpha _t}\left( i \right){\beta _t}\left( i \right) = P\left( {{y_t} = {s_i},{\bf{x}}|{\bf{\lambda }}} \right)αt​(i)βt​(i)=P(yt​=si​,x∣λ)。于是有:γt(i)=P(yt=si∣x,λ)=P(yt=si,x∣λ)P(x∣λ)=αt(i)βt(i)∑j=1Nαt(j)βt(j){\gamma _t}\left( i \right) = P\left( {{y_t} = {s_i}|{\bf{x,\lambda }}} \right) = \frac{{P\left( {{y_t} = {s_i},{\bf{x}}|{\bf{\lambda }}} \right)}}{{P\left( {{\bf{x}}|{\bf{\lambda }}} \right)}} = \frac{{{\alpha _t}\left( i \right){\beta _t}\left( i \right)}}{{\sum\limits_{j = 1}^N {{\alpha _t}\left( j \right){\beta _t}\left( j \right)} }}γt​(i)=P(yt​=si​∣x,λ)=P(x∣λ)P(yt​=si​,x∣λ)​=j=1∑N​αt​(j)βt​(j)αt​(i)βt​(i)​
2.给定模型λ\lambdaλ和观测x{\bf{x}}x,在时刻ttt处于状态sis_isi​且在时刻t+1t+1t+1处于状态sjs_jsj​的概率,记ξt(i,j)=P(yt=si,yt+1=sj∣x,λ){\xi _t}\left( {i,j} \right) = P\left( {{y_t} = {s_i},{y_{t + 1}} = {s_j}|{\bf{x}},{\bf{\lambda }}} \right)ξt​(i,j)=P(yt​=si​,yt+1​=sj​∣x,λ)。由前后向概率,有αt(i)aijbjxt+1βt+1(j)=P(yt=si,yt+1=sj∣x,λ){\alpha _t}\left( i \right){a_{ij}}{b_{j{x_{t + 1}}}}{\beta _{t + 1}}\left( j \right) = P\left( {{y_t} = {s_i},{y_{t + 1}} = {s_j}|{\bf{x}},{\bf{\lambda }}} \right)αt​(i)aij​bjxt+1​​βt+1​(j)=P(yt​=si​,yt+1​=sj​∣x,λ)。于是有ξt(i,j)=P(yt=si,yt+1=sj,x∣λ)P(x∣λ)=αt(i)aijbjxt+1βt+1(j)∑i=1N∑j=1Nαt(i)aijbjxt+1βt+1(j){\xi _t}\left( {i,j} \right) = \frac{{P\left( {{y_t} = {s_i},{y_{t + 1}} = {s_j},{\bf{x}}|{\bf{\lambda }}} \right)}}{{P\left( {{\bf{x}}|{\bf{\lambda }}} \right)}} = \frac{{{\alpha _t}\left( i \right){a_{ij}}{b_{j{x_{t + 1}}}}{\beta _{t + 1}}\left( j \right)}}{{\sum\limits_{i = 1}^N {\sum\limits_{j = 1}^N {{\alpha _t}\left( i \right){a_{ij}}{b_{j{x_{t + 1}}}}{\beta _{t + 1}}\left( j \right)} } }}ξt​(i,j)=P(x∣λ)P(yt​=si​,yt+1​=sj​,x∣λ)​=i=1∑N​j=1∑N​αt​(i)aij​bjxt+1​​βt+1​(j)αt​(i)aij​bjxt+1​​βt+1​(j)​
3.将γt(i){\gamma _t}\left( i \right)γt​(i)和ξt(i,j){\xi _t}\left( {i,j} \right)ξt​(i,j)对各个时刻ttt求和,可以得到一些有用的期望值:
1)在观测x{\bf{x}}x下状态sis_isi​出现的期望值为∑t=1Tγt(i)\sum\limits_{t = 1}^T {{\gamma _t}\left( i \right)}t=1∑T​γt​(i)。
2)在观测x{\bf{x}}x下由状态sis_isi​转移的期望值为∑t=1Tγt(i)\sum\limits_{t = 1}^T {{\gamma _t}\left( i \right)}t=1∑T​γt​(i)。
3)在观测x{\bf{x}}x下由状态sis_isi​转移到状态sjs_jsj​的期望值∑t=1Tξt(i,j)\sum\limits_{t = 1}^T {{\xi _t}\left( {i,j} \right)}t=1∑T​ξt​(i,j)。
这些将在HMM的训练中被用到。
下一篇《EM算法》

隐马尔可夫模型(HHM)学习笔记1相关推荐

  1. 隐马尔可夫模型HMM学习笔记

    参考: https://www.cnblogs.com/pinard/p/6945257.html https://www.cnblogs.com/pinard/p/6991852.html http ...

  2. 隐马尔可夫模型HMM学习备忘

    隐马尔可夫模型HMM学习备忘 目录 隐马尔可夫模型HMM学习备忘 1.马尔可夫模型的理解 2.隐马尔可夫模型 2.1.HHM的组成 2.2.HMM解决的三个基本问题 隐马尔可夫模型示意图如图[1]: ...

  3. 隐马尔可夫模型HHM重要公式推导

    我终于把HMM看完了,这些笔记都是看的过程中自己对推导过程写的注释,还有知识框架.原来卡尔曼和粒子滤波都是属于HMM模型里面的.笔记结构如下: 1. HMM简介:知识体系 + "一个模型&q ...

  4. 【机器学习】隐马尔可夫模型及其三个基本问题(三)模型参数学习算法及python实现

    [机器学习]隐马尔可夫模型及其三个基本问题(三)模型参数学习算法及python实现 一.一些概率与期望值的计算 二.非监督学习方法(Baum-Welch算法) 三.python实现 隐马尔可夫模型参数 ...

  5. 机器学习知识点(二十四)隐马尔可夫模型HMM维特比Viterbi算法Java实现

    1.隐马尔可夫模型HMM    学习算法,看中文不如看英文,中文喜欢描述的很高深.    http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/ht ...

  6. 时序分析:隐马尔可夫模型

         在AI综合领域,HMM模型是离散贝叶斯网络,最主要用于非确定性(概率)推理. 上次的文章被标记为链接,真是有意思.      一:隐马尔科夫模型    本人对这篇转载做了修改! 英文链接:h ...

  7. 隐马尔科夫模型C#语言算法实现

    开发工具: Visual Studio v2010 .NET Framework 4 Client Profile 版本历史: V1.1 2011年06月09日 修正UMDHMM在Baum-Welch ...

  8. 隐马尔科夫模型(HMM)笔记(公式+代码)

    文章目录 1. 基本概念 1.1 HMM模型定义 1.2 盒子和球模型 1.3 观测序列生成过程 1.4 HMM模型3个基本问题 2. 概率计算问题 2.1 直接计算法 2.2 前向算法 2.2.1 ...

  9. 隐马尔科夫模型(Hidden Markov Models) 系列之三

    隐马尔科夫模型(Hidden Markov Models) 系列之三 介绍(introduction) 生成模式(Generating Patterns) 隐含模式(Hidden Patterns) ...

  10. 10_隐马尔科夫模型HMM2_统计学习方法

    文章目录 四.学习算法 1.监督学习方法 2.非监督学习方法(Baum-Welch算法) 五.预测算法 1.近似算法 2.维特比算法 (1)最优路径特性 (2)两个变量 (3)维特比算法流程 隐马尔科 ...

最新文章

  1. oracle中的decode的使用
  2. Codeforces Round #354 (Div. 2)-A
  3. 03-spring bean
  4. centos 8 卸载anaconda_CentOS 7.8 (2003) 发布,附地址
  5. 【视频】v-bind的使用
  6. 如何在UE4中创建线程
  7. AI 赛道“新选手”锐捷发布新一代 AI SaaS 云平台,支撑百万级零售货柜
  8. Bailian2726 采药【模拟】
  9. python 调用文件传参_Python读取ini配置文件传参的简单示例
  10. java高校贫困生助学贷款系统ssm框架
  11. Ubuntu安装客户端RabbitVCS(svn管理)
  12. paypal android sdk,Android Paypal SDK错误:商家不接受此类付款
  13. 机器视觉编码技术与标准进展
  14. 人工智能——自然演绎推理
  15. Git-远程仓库【转】
  16. 英语介绍计算机,计算机英语自我介绍
  17. Jetson Nano开发套件安装
  18. fluent物性参数拟合多项式,python,matlab多项式图像绘制
  19. js百度地图鼠标绘制工具条库
  20. php mysql 点餐系统_laravel实现点餐系统,快来点餐吧!

热门文章

  1. (三)Landat_5 TM 遥感影像辐射标定以及大气表观辐射率计算
  2. JS逆向--PyExecJS基本用法--网易云音乐逆向思路,node.js安装教程,逆向思路,逆向分析,加密机制,RSA,AES加密算法,加密算法啊破解,js引擎,定位数据包,分析栈结构,无痕窗口
  3. 熟练使用计算机进行备课,罗庄五措并举推进素质教育
  4. macbook m1安装pycharm
  5. 信号量机制以及各种例题
  6. Kubesphere部署nacos
  7. vue -web引入百度地图
  8. 【可视化编程】实验4:C#窗体和控件综合设计(多文本编辑器)
  9. WiFi大师终极版本4.0.3源码已经上线
  10. 常用的几种嵌入式Linux操作系统