预测问题,也称作解码问题。已知模型
λ=(A,B,π)和观测序列
O=(o1,o2……oT)求对给定观测序列条件概率P(I|O)最大的状态序列
I=(i1,i2……iT).即给定观测序列,求最可能的对应的状态序列。
预测算法:近似算法与维特比算法
近似算法:
近似算法的思想是,在每一个时刻t选择在该时刻最优可能出现的状态
it∗,从而得到一个状态序列
I∗=(i1∗,i2∗,……iT∗)将它作为预测的结果。
给定隐马尔科夫模型
λ和观测序列O,在时刻t处于状态
qi的概率为
γt(i)是
γt(i)=P(O∣λ)αt(i)βt(i)=j=1∑Nαt(i)βt(i)αt(i)βt(i)
在每一个时刻t最有可能的状态
it∗是:
it∗=argmax[γt(i)],i=1,2……N,t=1,2……T
从而得到状态序列
I∗=(i1∗,i2∗,……iT∗)
近似算法的优点是计算简单,缺点是不能保证预测的状态序列整体是最有可能的状态序列。
维特比算法:
维特比算法的基础可以概括为下面散点:
1)如果概率最大的路径p(或者说最短的路径)经过某个点,比如下面中的
x22,那么这条路径上的歧视点S到
x22的这段子路径Q,一定是S到
x22之间的最短路径。否则用S到
x22的最短路径R代替Q,便构成了一条更短的路径,这显然矛盾。
2)从S到E的路径必经过第i个时刻的某个状态,假设第i个时刻有k个状态,那么如果记录了从S到第i个状态的所有k个结点的最短路径,最终的最短路径必经过其中一条,这样,在任意时刻,只要考虑非常有限的最短路径即可。
3)结合以上2点,假定当我们从状态i进入状态i+1时,从S到状态i上各个结点的最短路径已经找到,并且记录在这些结点上,那么在计算从起点S到第i+1状态的某个结点
xi+1的最短路径时,只要考虑S到前一个状态i所有的k个结点的最短路径,以及从这个结点到
xi+1的距离即可。
维特比算法实际使用动态规划解隐马尔科夫模型预测问题,即用动态规划求解最大概率路径(最优路径)。这里一条路径对应着一个状态序列。
我们需要从时刻t开始,递推的计算在时刻t状态为i的各条部分路径的最大概率,直到得到时刻t=T状态为i的各条路径的最大概率。
时刻t=T的最大概率即为最优路径的概率
P∗,最优路径的终节点
iT∗也同时得到。
之后为了找出最优路径的各个结点,从终结点
iT∗开始,由后向前逐步求得结点
iT−1∗…i1∗,得到最优路径
I∗=(i1∗,i2∗,……iT∗)
首先引入两个变量
δ和Ψ
定义在时刻t状态为i的所有可能的状态转移路径
i1,i2……it中的概率最大值,记作
δt(i)
δt(i)=maxP(it=i,i1,i2……it−1,ot,ot−1……o1∣λ)
由
δt(i)的定义可以得到
δ的递推表达式:
δt+1(i)=maxP(it+1=i,i1,i2……it,ot+1,ot,ot−1……o1∣λ)
=max[δt(j)aji]bi(ot+1),j=1,2……N
定义在时刻t状态为i的所有单个状态转移路径
i1,i2……it−1中概率最大的转移路径中第t-1个结点的状态为
Ψt(i)
Ψt(i)=argmax[δt−1(j)aji],j=1,2……N
有了以上两个式子,我们就可以从时刻0一直递推到时刻T,然后利用
Ψt(i)记录前一个最可能的状态结点回溯,直到找到最优的隐藏状态序列。
维特比算法:
输入:模型
λ=(A,B,π)和观测
O=(o1,o2……oT)
输出:最优路径
I∗=(i1∗,i2∗,……iT∗)
1)初始化
δ1(i)=πibi(o1)
Ψ1(i)=0
2)递推:对t=2,3……T
δt+1(i)=max[δt(j)aji]bi(ot+1),i=1,2……N,j=1,2……N
Ψt(i)=argmax[δt−1(j)aji],i=1,2……N,j=1,2……N
3)终止
P∗=maxδT(i),I=1,2……N
iT∗=argmax[δT(i)]
4)回溯
最优路径回溯,对t=T-1,T-2……1
it∗=Ψt+1(it+1∗)
求得最优路径
I∗=(i1∗,i2∗,……iT∗)