隐马尔科夫模型(四)预测算法

预测问题,也称作解码问题。已知模型 λ = ( A , B , π ) λ=(A,B,π) 和观测序列 O = ( o 1 , o 2 o T ) O=(o_1,o_2……o_T) 求对给定观测序列条件概率P(I|O)最大的状态序列 I = ( i 1 , i 2 i T ) I=(i_1,i_2……i_T) .即给定观测序列,求最可能的对应的状态序列。

预测算法:近似算法与维特比算法

近似算法:
近似算法的思想是,在每一个时刻t选择在该时刻最优可能出现的状态 i t i_t^* ,从而得到一个状态序列 I = ( i 1 , i 2 , i T ) I^*=(i_1^*,i_2^*,……i_T^*) 将它作为预测的结果。

给定隐马尔科夫模型 λ λ 和观测序列O,在时刻t处于状态 q i q_i 的概率为 γ t ( i ) γ_t(i)

γ t ( i ) = α t ( i ) β t ( i ) P ( O λ ) = α t ( i ) β t ( i ) j = 1 N α t ( i ) β t ( i ) γ_t(i)=\frac{α_t(i)β_t(i)}{P(O|λ)}=\frac{α_t(i)β_t(i)}{\displaystyle\sum_{j=1}^{N}α_t(i)β_t(i)}
在每一个时刻t最有可能的状态 i t i_t^* 是:

i t = a r g m a x [ γ t ( i ) ] , i = 1 , 2 N , t = 1 , 2 T i_t^*=argmax[γ_t(i)],i=1,2……N,t=1,2……T

从而得到状态序列 I = ( i 1 , i 2 , i T ) I^*=(i_1^*,i_2^*,……i_T^*)

近似算法的优点是计算简单,缺点是不能保证预测的状态序列整体是最有可能的状态序列。

维特比算法:
维特比算法的基础可以概括为下面散点:
1)如果概率最大的路径p(或者说最短的路径)经过某个点,比如下面中的 x 2 2 x_22 ,那么这条路径上的歧视点S到 x 2 2 x_22 的这段子路径Q,一定是S到 x 2 2 x_22 之间的最短路径。否则用S到 x 2 2 x_22 的最短路径R代替Q,便构成了一条更短的路径,这显然矛盾。
2)从S到E的路径必经过第i个时刻的某个状态,假设第i个时刻有k个状态,那么如果记录了从S到第i个状态的所有k个结点的最短路径,最终的最短路径必经过其中一条,这样,在任意时刻,只要考虑非常有限的最短路径即可。
3)结合以上2点,假定当我们从状态i进入状态i+1时,从S到状态i上各个结点的最短路径已经找到,并且记录在这些结点上,那么在计算从起点S到第i+1状态的某个结点 x i + 1 x_{i+1} 的最短路径时,只要考虑S到前一个状态i所有的k个结点的最短路径,以及从这个结点到 x i + 1 x_{i+1} 的距离即可。

维特比算法实际使用动态规划解隐马尔科夫模型预测问题,即用动态规划求解最大概率路径(最优路径)。这里一条路径对应着一个状态序列。

我们需要从时刻t开始,递推的计算在时刻t状态为i的各条部分路径的最大概率,直到得到时刻t=T状态为i的各条路径的最大概率。

时刻t=T的最大概率即为最优路径的概率 P P^* ,最优路径的终节点 i T i_T^* 也同时得到。

之后为了找出最优路径的各个结点,从终结点 i T i_T^* 开始,由后向前逐步求得结点 i T 1 i 1 i_{T-1}^*…i_1^* ,得到最优路径 I = ( i 1 , i 2 , i T ) I^*=(i_1^*,i_2^*,……i_T^*)

首先引入两个变量 δ Ψ δ和Ψ
定义在时刻t状态为i的所有可能的状态转移路径 i 1 , i 2 i t i_1,i_2……i_t 中的概率最大值,记作 δ t ( i ) δ_t(i)

δ t ( i ) = m a x P ( i t = i , i 1 , i 2 i t 1 , o t , o t 1 o 1 λ ) δ_t(i)=maxP(i_t=i,i_1,i_2……i_{t-1},o_t,o_{t-1}……o_1|λ)

δ t ( i ) δ_t(i) 的定义可以得到 δ δ 的递推表达式:
δ t + 1 ( i ) = m a x P ( i t + 1 = i , i 1 , i 2 i t , o t + 1 , o t , o t 1 o 1 λ ) δ_{t+1}(i)=maxP(i_{t+1}=i,i_1,i_2……i_{t},o_{t+1},o_t,o_{t-1}……o_1|λ)

= m a x [ δ t ( j ) a j i ] b i ( o t + 1 ) , j = 1 , 2 N =max[δ_t(j)a_{ji}]b_i(o_{t+1}),j=1,2……N

定义在时刻t状态为i的所有单个状态转移路径 i 1 , i 2 i t 1 i_1,i_2……i_{t-1} 中概率最大的转移路径中第t-1个结点的状态为 Ψ t ( i ) Ψ_t(i)
Ψ t ( i ) = a r g m a x [ δ t 1 ( j ) a j i ] , j = 1 , 2 N Ψ_t(i)=argmax[δ_{t-1}(j)a_{ji}],j=1,2……N

有了以上两个式子,我们就可以从时刻0一直递推到时刻T,然后利用 Ψ t ( i ) Ψ_t(i) 记录前一个最可能的状态结点回溯,直到找到最优的隐藏状态序列。

维特比算法:
输入:模型 λ = ( A , B , π ) λ=(A,B,π) 和观测 O = ( o 1 , o 2 o T ) O=(o_1,o_2……o_T)
输出:最优路径 I = ( i 1 , i 2 , i T ) I^*=(i_1^*,i_2^*,……i_T^*)
1)初始化
δ 1 ( i ) = π i b i ( o 1 ) δ_1(i)=π_ib_i(o_1)
Ψ 1 ( i ) = 0 Ψ_1(i)=0
2)递推:对t=2,3……T
δ t + 1 ( i ) = m a x [ δ t ( j ) a j i ] b i ( o t + 1 ) , i = 1 , 2 N j = 1 , 2 N δ_{t+1}(i)=max[δ_t(j)a_{ji}]b_i(o_{t+1}),i=1,2……N,j=1,2……N
Ψ t ( i ) = a r g m a x [ δ t 1 ( j ) a j i ] , i = 1 , 2 N j = 1 , 2 N Ψ_t(i)=argmax[δ_{t-1}(j)a_{ji}],i=1,2……N,j=1,2……N
3)终止
P = m a x δ T ( i ) , I = 1 , 2 N P^*=maxδ_T(i),I=1,2……N
i T = a r g m a x [ δ T ( i ) ] i^*_T=argmax[δ_T(i)]
4)回溯
最优路径回溯,对t=T-1,T-2……1
i t = Ψ t + 1 ( i t + 1 ) i_t^*=Ψ_{t+1}(i^*_{t+1})
求得最优路径 I = ( i 1 , i 2 , i T ) I^*=(i_1^*,i_2^*,……i_T^*)

猜你喜欢

转载自blog.csdn.net/qq_16608563/article/details/84782762