隐马尔可夫模型(HHM)学习笔记1
隐马尔可夫模型简介
整理了李航和周志华书上的内容。
将隐马尔可夫模型中的变量分为两组:一组为状态变量{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<Tt<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,⋯ ,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,⋯ ,xT}x=\left\{ {{x_1},{x_2}, \cdots ,{x_T}} \right\}x={x1,x2,⋯,xT},如何找到与此观测序列最为匹配的状态序列y={y1,y2,⋯ ,yT}{\bf y}=\left\{ {{y_1},{y_2}, \cdots ,{y_T}} \right\}y={y1,y2,⋯,yT},即如何根据观测序列推断出隐藏的模型状态?
3)给定观测序列x={x1,x2,⋯ ,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,⋯ ,xT}{\bf x}=\left\{ {{x_1},{x_2}, \cdots, {x_T}} \right\}x={x1,x2,⋯,xT}。对于状态序列y={y1,y2,⋯ ,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,⋯ ,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∣λ)=πy1ay1y2ay2y3⋯ayT−1yT,以此为前提的观测序列是x={x1,x2,⋯ ,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,λ)=by1x1by2x2⋯byTxT,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∣λ)=πy1by1x1ay1y2by2x2⋯ayT−1yTbyTxT。对所有的状态序列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∑πy1by1x1ay1y2by2x2⋯ayT−1yTbyTxT直接法计算量极大,是O(TNT)O\left( {T{N^T}} \right)O(TNT)阶的。有效算法:前向-后向算法。
前向算法
前向概率:给定隐马尔可夫模型λ{\bf{\lambda }}λ,定义到时刻ttt部分观测序列为x1,x2,⋯ ,xt{x_1},{x_2}, \cdots ,{x_t}x1,x2,⋯,xt且状态为si{s_i}si的概率为前向概率,记作αt(i)=P(x1,x2,⋯ ,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,⋯ ,N{\alpha _1}\left( i \right) = {\pi _i}{b_{i{x_1}}},i = 1,2, \cdots ,Nα1(i)=πibix1,i=1,2,⋯,N.
2)递推:对于t=1,2,⋯ ,T−1t = 1,2, \cdots ,T - 1t=1,2,⋯,T−1,αt+1(i)=[∑j=1Nαt(j)aji]bixt+1,i=1,2,⋯ ,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 & 0.2 & 0.3 \\0.3 & 0.5 & 0.2 \\0.2 & 0.3 & 0.5\end{matrix}\right],{\bf{B}}=\left[ \begin{matrix}0.5 & 0.5 \\0.4 & 0.6 \\0.7 & 0.3 \end{matrix}\right],\Pi={\left( {0.2,0.4,0.4} \right)^T}A=⎣⎡0.50.30.20.20.50.30.30.20.5⎦⎤,B=⎣⎡0.50.40.70.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}&{s_1}&{s_2}&{s_3}\\{s_1}&0.5 & 0.2 & 0.3 \\{s_2}&0.3 & 0.5 & 0.2 \\{s_3}&0.2 & 0.3 & 0.5\end{matrix}\qquad \begin{matrix}&{o_1}&{o_2}&\\{s_1}&0.5 & 0.5 \\{s_2}&0.4 & 0.6 \\{s_3}&0.7 & 0.3 \end{matrix}s1s2s3s10.50.30.2s20.20.50.3s30.30.20.5s1s2s3o10.50.40.7o20.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)=π1b1x1=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)=π2b2x1=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)=π3b3x1=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,⋯ ,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,⋯ ,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,⋯ ,1t = T - 1,T - 2, \cdots ,1t=T−1,T−2,⋯,1βt(i)=∑j=1Naijbjxt+1βt+1(j),i=1,2,⋯ ,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∑Naijbjxt+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πibix1β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∑3a1jbjx3β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∑3a2jbjx3β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∑3a3jbjx3β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∑3a1jbjx2β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∑3a2jbjx2β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∑3a3jbjx2β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,⋯ ,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∑Nj=1∑Nαt(i)aijbjxt+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)aijbjxt+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∑Nj=1∑Nαt(i)aijbjxt+1βt+1(j)αt(i)aijbjxt+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相关推荐
- 隐马尔可夫模型HMM学习笔记
参考: https://www.cnblogs.com/pinard/p/6945257.html https://www.cnblogs.com/pinard/p/6991852.html http ...
- 隐马尔可夫模型HMM学习备忘
隐马尔可夫模型HMM学习备忘 目录 隐马尔可夫模型HMM学习备忘 1.马尔可夫模型的理解 2.隐马尔可夫模型 2.1.HHM的组成 2.2.HMM解决的三个基本问题 隐马尔可夫模型示意图如图[1]: ...
- 隐马尔可夫模型HHM重要公式推导
我终于把HMM看完了,这些笔记都是看的过程中自己对推导过程写的注释,还有知识框架.原来卡尔曼和粒子滤波都是属于HMM模型里面的.笔记结构如下: 1. HMM简介:知识体系 + "一个模型&q ...
- 【机器学习】隐马尔可夫模型及其三个基本问题(三)模型参数学习算法及python实现
[机器学习]隐马尔可夫模型及其三个基本问题(三)模型参数学习算法及python实现 一.一些概率与期望值的计算 二.非监督学习方法(Baum-Welch算法) 三.python实现 隐马尔可夫模型参数 ...
- 机器学习知识点(二十四)隐马尔可夫模型HMM维特比Viterbi算法Java实现
1.隐马尔可夫模型HMM 学习算法,看中文不如看英文,中文喜欢描述的很高深. http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/ht ...
- 时序分析:隐马尔可夫模型
在AI综合领域,HMM模型是离散贝叶斯网络,最主要用于非确定性(概率)推理. 上次的文章被标记为链接,真是有意思. 一:隐马尔科夫模型 本人对这篇转载做了修改! 英文链接:h ...
- 隐马尔科夫模型C#语言算法实现
开发工具: Visual Studio v2010 .NET Framework 4 Client Profile 版本历史: V1.1 2011年06月09日 修正UMDHMM在Baum-Welch ...
- 隐马尔科夫模型(HMM)笔记(公式+代码)
文章目录 1. 基本概念 1.1 HMM模型定义 1.2 盒子和球模型 1.3 观测序列生成过程 1.4 HMM模型3个基本问题 2. 概率计算问题 2.1 直接计算法 2.2 前向算法 2.2.1 ...
- 隐马尔科夫模型(Hidden Markov Models) 系列之三
隐马尔科夫模型(Hidden Markov Models) 系列之三 介绍(introduction) 生成模式(Generating Patterns) 隐含模式(Hidden Patterns) ...
- 10_隐马尔科夫模型HMM2_统计学习方法
文章目录 四.学习算法 1.监督学习方法 2.非监督学习方法(Baum-Welch算法) 五.预测算法 1.近似算法 2.维特比算法 (1)最优路径特性 (2)两个变量 (3)维特比算法流程 隐马尔科 ...
最新文章
- oracle中的decode的使用
- Codeforces Round #354 (Div. 2)-A
- 03-spring bean
- centos 8 卸载anaconda_CentOS 7.8 (2003) 发布,附地址
- 【视频】v-bind的使用
- 如何在UE4中创建线程
- AI 赛道“新选手”锐捷发布新一代 AI SaaS 云平台,支撑百万级零售货柜
- Bailian2726 采药【模拟】
- python 调用文件传参_Python读取ini配置文件传参的简单示例
- java高校贫困生助学贷款系统ssm框架
- Ubuntu安装客户端RabbitVCS(svn管理)
- paypal android sdk,Android Paypal SDK错误:商家不接受此类付款
- 机器视觉编码技术与标准进展
- 人工智能——自然演绎推理
- Git-远程仓库【转】
- 英语介绍计算机,计算机英语自我介绍
- Jetson Nano开发套件安装
- fluent物性参数拟合多项式,python,matlab多项式图像绘制
- js百度地图鼠标绘制工具条库
- php mysql 点餐系统_laravel实现点餐系统,快来点餐吧!
热门文章
- (三)Landat_5 TM 遥感影像辐射标定以及大气表观辐射率计算
- JS逆向--PyExecJS基本用法--网易云音乐逆向思路,node.js安装教程,逆向思路,逆向分析,加密机制,RSA,AES加密算法,加密算法啊破解,js引擎,定位数据包,分析栈结构,无痕窗口
- 熟练使用计算机进行备课,罗庄五措并举推进素质教育
- macbook m1安装pycharm
- 信号量机制以及各种例题
- Kubesphere部署nacos
- vue -web引入百度地图
- 【可视化编程】实验4:C#窗体和控件综合设计(多文本编辑器)
- WiFi大师终极版本4.0.3源码已经上线
- 常用的几种嵌入式Linux操作系统