根据训练好的模型对测试数据进行预测,下面介绍应用在预测阶段的近似算法以及维特比算法。
-
近似算法
近似算法的思想简单粗暴:在每个时刻 t 选择在该时刻最有可能出现的状态 i*t,从而得到一个状态序列 I = ( i 1 ∗ , i 2 ∗ , . . . , i T ∗ ) I=(i_1^*,i_2^*,...,i_T^*) I=(i1∗,i2∗,...,iT∗),将它作为预测结果。
-
算法过程
给定 HMM 模型 λ 和观测序列 O,在时刻 t 处于状态 qi 的概率:
γ t ( i ) = α t ( i ) β t ( i ) ∑ j = 1 N α t ( j ) β t ( j ) γ_t(i)=\frac{α_t(i)β_t(i)}{\sum_{j=1}^{N}α_t(j)β_t(j)} γt(i)=∑j=1Nαt(j)βt(j)αt(i)βt(i)
在每一时刻 t 最有可能的状态为 i t ∗ = 1 ≤ i ≤ N a r g m a x [ γ t ( i ) ] , t = 1 , 2 , . . . , T i_t^*=\mathop{}_{1\le i\le N}^{arg~max}[γ_t(i)],t=1,2,...,T it∗=1≤i≤Narg max[γt(i)],t=1,2,...,T
从而得到状态序列 I ∗ = ( i 1 ∗ , i 2 ∗ , . . . , i T ∗ ) I^*=(i_1^*,i_2^*,...,i_T^*) I∗=(i1∗,i2∗,...,iT∗)
-
特点
1)优点:计算简单
2)缺点:无法保证预测的状态序列整体是最有可能的状态,因为预测的状态序列可能有实际不发生的部分。事实上,上述方法得到的状态序列中有可能存在转移概率为 0 的相邻状态,即有可能 αij=0. 但是实际中,我们可以根据转移概率的数值情况将等于 0 赋值为 近似为 0.
-
-
维特比算法
维特比算法实际是用动态规划解决 HMM 预测问题的,即用动态规划求概率最大的路径(最优路径),每一条路径对应一个状态序列。
动态规划的核心是将问题分解为子问题,每一步求子问题的最优解(局部最优解)以达到整体最优的目的。
据此,我们只需从时刻 t=1 开始,递推地计算在时刻 t 状态为 i 的各条部分路径的最大概率,直至得到时刻 t=T 状态为 i 的各条路径的最大概率。之后从后向前逐步求得结点 i T − 1 ∗ , i T − 2 ∗ , . . . , i 1 ∗ i^*_{T-1},i^*_{T-2},...,i^*_1 iT−1∗,iT−2∗,...,i1∗,得到最优路径。
引入两个变量 δ 和 ψ:
定义在时刻 t 状态为 i 的所有单个路径 ( i 1 , i 2 , . . . , i t ) (i_1,i_2,...,i_t) (i1,i2,...,it) 中概率最大值为:
δ t ( i ) = i 1 , i 2 , . . . , i t − 1 m a x P ( i t = i , i t + 1 , . . . , i 1 , o t , . . . , o 1 ∣ λ ) , i = 1 , 2 , . . . , N δ_t(i)=\mathop{}_{i_1,i_2,...,i_{t-1}}^{max}P(i_t=i,i_{t+1},...,i_1,o_t,...,o_1|λ),i=1,2,...,N δt(i)=i1,i2,...,it−1maxP(it=i,it+1,...,i1,ot,...,o1∣λ),i=1,2,...,N
由定义可得变量 δ δ δ 的递推公式:
δ t + 1 ( i ) = i 1 , i 2 , . . . , i t − 1 m a x P ( i t + 1 = i , i t , . . . , i 1 , o t + 1 , . . . , o 1 ∣ λ ) = 1 ≤ j ≤ N m a x [ δ t ( j ) a j i ] b i ( o t + 1 ) , i = 1 , 2 , . . . , N ; t = 1 , 2 , . . . , T − 1 \begin{aligned}δ_{t+1}(i)=&\mathop{}_{i_1,i_2,...,i_{t-1}}^{max}P(i_{t+1}=i,i_t,...,i_1,o_{t+1},...,o_1|λ)\\ =&\mathop{}_{1\le j \le N}^{max}[δ_t(j)a_{ji}]b_i(o_{t+1}),i=1,2,...,N;t=1,2,...,T-1\\ \end{aligned} δt+1(i)==i1,i2,...,it−1maxP(it+1=i,it,...,i1,ot+1,...,o1∣λ)1≤j≤Nmax[δt(j)aji]bi(ot+1),i=1,2,...,N;t=1,2,...,T−1
定义在时刻 t 状态为 i 的所有单个路径 ( i 1 , i 2 , . . . , i t − 1 ) (i_1,i_2,...,i_{t-1}) (i1,i2,...,it−1) 中概率最大的路径的第 t-1 个结点为:
ψ t ( i ) = 1 ≤ j ≤ N a r g m a x [ δ t − 1 ( j ) a j i ] , i = 1 , 2 , . . . , N ψ_t(i)=\mathop{}_{1\le j \le N}^{arg~max}[δ_{t-1}(j)a_{ji}],i=1,2,...,N ψt(i)=1≤j≤Narg max[δt−1(j)aji],i=1,2,...,N
-
算法过程
输入:模型 λ = ( A , B , Π ) λ=(A,B,Π) λ=(A,B,Π) 和观测 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT)
输出: 最优路径 I ∗ = ( i 1 ∗ , i 2 ∗ , . . . , i T ∗ ) I^*=(i_1^*,i_2^*,...,i_T^*) I∗=(i1∗,i2∗,...,iT∗)1)初始化
δ 1 ( i ) = π i b i ( o 1 ) , i = 1 , 2 , . . . , N δ_1(i)=π_ib_i(o_1),i=1,2,...,N δ1(i)=πibi(o1),i=1,2,...,N
ψ 1 ( i ) = 0 , i = 1 , 2 , . . . , N ψ_1(i)=0,i=1,2,...,N ψ1(i)=0,i=1,2,...,N
2)递推,对 t=2,3,…,T
δ t ( i ) = 1 ≤ j ≤ N m a x [ δ t − 1 ( j ) a j i ] b i ( o t ) , i = 1 , 2 , . . . , N δ_t(i)=\mathop{}_{1\le j \le N}^{max}[δ_{t-1}(j)a_{ji}]b_i(o_t),i=1,2,...,N δt(i)=1≤j≤Nmax[δt−1(j)aji]bi(ot),i=1,2,...,N
(计算由 t-1 时刻的状态 1,2,…,N,在 t 时刻转移到状态 i 的各最大概率的路径,即固定时刻 t 的状态 qi,计算由时刻 t-1 不同状态转移到状态 qi 且观测为 ot 的概率,并选出最大值)
ψ t ( i ) = 1 ≤ j ≤ N a r g m a x [ δ t − 1 ( j ) a j i ] , i = 1 , 2 , . . . , N ψ_t(i)=\mathop{}_{1\le j \le N}^{arg~max}[δ_{t-1}(j)a_{ji}],i=1,2,...,N ψt(i)=1≤j≤Narg max[δt−1(j)aji],i=1,2,...,N
(选出 t-1 时刻最有可能的状态)
3)终止
P ∗ = 1 ≤ j ≤ N m a x δ T ( i ) P^*=\mathop{}_{1\le j \le N}^{max}δ_T(i) P∗=1≤j≤NmaxδT(i)
i T ∗ = 1 ≤ j ≤ N a r g m a x [ δ T ( i ) ] i^*_T=\mathop{}_{1\le j \le N}^{arg~max}[δ_T(i)] iT∗=1≤j≤Narg max[δT(i)]
4)回溯最优路径,对 t=T-1,T-2,…,1
i t ∗ = ψ t + 1 ( i t + 1 ∗ ) i^*_t=ψ_{t+1}(i^*_{t+1}) it∗=ψt+1(it+1∗)
5)求得最优路径
I ∗ = ( i 1 ∗ , i 2 ∗ , . . . , i T ∗ ) I^*=(i_1^*,i_2^*,...,i_T^*) I∗=(i1∗,i2∗,...,iT∗)
-
举例
模型 λ = ( A , B , Π ) λ=(A,B,Π) λ=(A,B,Π),已知观测序列 O = ( 红 , 白 , 红 ) O=(红,白,红) O=(红,白,红)
A = [ 0.5 0.2 0.3 0.3 0.5 0.2 0.2 0.3 0.5 ] , B = [ ( 红 ) ( 白 ) 0.5 0.5 0.4 0.6 0.7 0.3 ] , Π = ( 0.2 , 0.4 , 0.4 ) A=\begin{bmatrix} 0.5 & 0.2 & 0.3\\ 0.3 & 0.5 & 0.2\\ 0.2 & 0.3 & 0.5\\ \end{bmatrix}, B=\begin{bmatrix} (红)& (白)\\ 0.5 & 0.5\\ 0.4 & 0.6\\ 0.7 & 0.3\\ \end{bmatrix},Π=(0.2,0.4,0.4) A=⎣⎡0.50.30.20.20.50.30.30.20.5⎦⎤,B=⎣⎢⎢⎡(红)0.50.40.7(白)0.50.60.3⎦⎥⎥⎤,Π=(0.2,0.4,0.4)
1)初始化
在 t=1 时刻,
δ 1 ( i ) = π i b i ( o 1 ) = π i b i ( 红 ) , i = 1 , 2 , 3 δ_1(i)=π_ib_i(o_1)=π_ib_i(红),i=1,2,3 δ1(i)=πibi(o1)=πibi(红),i=1,2,3
δ 1 ( 1 ) = 0.5 ∗ 0.2 = 0.1 , δ 1 ( 2 ) = 0.4 ∗ 0.4 = 0.16 , δ 1 ( 3 ) = 0.28 δ_1(1)=0.5*0.2=0.1,δ_1(2)=0.4*0.4=0.16,δ_1(3)=0.28 δ1(1)=0.5∗0.2=0.1,δ1(2)=0.4∗0.4=0.16,δ1(3)=0.28
ψ 1 ( i ) = 0 , i = 1 , 2 , 3 ψ_1(i)=0,i=1,2,3 ψ1(i)=0,i=1,2,3
2)递推
对 t=2 时:
由状态 1,2,3 转移到状态 1 的最大概率:
δ 2 ( 1 ) = 1 ≤ j ≤ 3 m a x [ 0.1 ∗ 0.5 , 0.16 ∗ 0.3 , 0.28 ∗ 0.2 ] ∗ 0.5 = 1 ≤ j ≤ 3 m a x [ 0.05 , 0.048 , 0.056 ] ∗ 0.5 = 0.056 ∗ 0.5 = 0.028 \begin{aligned} δ_2(1)=&\mathop{}_{1\le j \le 3}^{max}[0.1*0.5,0.16*0.3,0.28*0.2]*0.5\\ =&\mathop{}_{1\le j \le 3}^{max}[0.05,0.048,0.056]*0.5\\ =&0.056*0.5\\ =& 0.028 \end{aligned} δ2(1)====1≤j≤3max[0.1∗0.5,0.16∗0.3,0.28∗0.2]∗0.51≤j≤3max[0.05,0.048,0.056]∗0.50.056∗0.50.028
ψ 2 ( 1 ) = 3 ψ_2(1)=3 ψ2(1)=3
由状态 1,2,3 转移到状态 2 的最大概率:
δ 2 ( 2 ) = 0.0504 , ψ 2 ( 2 ) = 3 δ_2(2)=0.0504,ψ_2(2)=3 δ2(2)=0.0504,ψ2(2)=3
由状态 1,2,3 转移到状态 3 的最大概率:
δ 2 ( 3 ) = 0.042 , ψ 2 ( 3 ) = 3 δ_2(3)=0.042,ψ_2(3)=3 δ2(3)=0.042,ψ2(3)=3
对 t=3 时:
由状态 1,2,3 转移到状态 1 的最大概率:
δ 3 ( 1 ) = 0.00756 , ψ 3 ( 1 ) = 2 δ_3(1)=0.00756,ψ_3(1)=2 δ3(1)=0.00756,ψ3(1)=2
由状态 1,2,3 转移到状态 2 的最大概率:
δ 3 ( 2 ) = 0.01008 , ψ 3 ( 2 ) = 2 δ_3(2)=0.01008,ψ_3(2)=2 δ3(2)=0.01008,ψ3(2)=2
由状态 1,2,3 转移到状态 3 的最大概率:
δ 3 ( 3 ) = 0.0147 , ψ 3 ( 3 ) = 3 δ_3(3)=0.0147,ψ_3(3)=3 δ3(3)=0.0147,ψ3(3)=3
3)终止
以 P* 表示最优路径的概率:
P ∗ = 1 ≤ j ≤ N m a x δ 3 ( i ) = max [ 0.00756 , 0.01008 , 0.0147 ] = 0.0147 \begin{aligned} P^*=&\mathop{}_{1\le j \le N}^{max}δ_3(i)\\ =&\max[0.00756,0.01008,0.0147]\\ =&0.0147 \end{aligned} P∗===1≤j≤Nmaxδ3(i)max[0.00756,0.01008,0.0147]0.0147
最优路径的终点是:
i 3 ∗ = i a r g m a x [ δ 3 ( i ) ] = 3 i_3^*=\mathop{}_{i}^{arg~max}[δ_3(i)]=3 i3∗=iarg max[δ3(i)]=3
4)回溯最优路径
由最优路径终点 i 3 ∗ i_3^* i3∗,逆向找到 i 2 ∗ , i 1 ∗ i_2^*,i_1^* i2∗,i1∗:
在 t=2 时: i 2 ∗ = ψ 3 ( i 3 ∗ ) = ψ 3 ( 3 ) = 3 i_2^*=ψ_3(i_3^*)=ψ_3(3)=3 i2∗=ψ3(i3∗)=ψ3(3)=3
在 t=1 时: i 1 ∗ = ψ 2 ( i 2 ∗ ) = ψ 2 ( 3 ) = 3 i_1^*=ψ_2(i_2^*)=ψ_2(3)=3 i1∗=ψ2(i2∗)=ψ2(3)=3
5)得到最优路径
I ∗ = ( i 1 ∗ , i 2 ∗ , i 3 ∗ ) = ( 3 , 3 , 3 ) I^*=(i_1^*,i_2^*,i_3^*)=(3,3,3) I∗=(i1∗,i2∗,i3∗)=(3,3,3)
-