隐马尔可夫模型之预测算法

隐马尔可夫模型之HMM基础
隐马尔可夫模型之评估观察序列概率
隐马尔可夫模型之学习算法
隐马尔可夫模型之预测算法
隐马尔可夫模型之python实战

预测算法主要有两种:

  • 近似算法
  • 维特比算法

近似算法

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

给定隐马尔可夫模型 λ \lambda λ和观测序列O,在时刻t处于状态 q i q_i qi的概率 γ t ( i ) \gamma_t(i) γt(i)
γ t ( i ) = α t ( i ) β t ( i ) P ( O ∣ λ ) = α t ( i ) β t ( i ) ∑ j = 1 N α t ( j ) β t ( j ) \gamma_t(i)=\frac{\alpha_t(i)\beta_t(i)}{P(O|\lambda)}=\frac{\alpha_t(i)\beta_t(i)}{\sum_{j=1}^N\alpha_t(j)\beta_t(j)} γt(i)=P(Oλ)αt(i)βt(i)=j=1Nαt(j)βt(j)αt(i)βt(i)

在每一时刻t最有可能出现的状态 i t ∗ i_t^* it是:
i t ∗ = a r g    m a x ⏟ 1 ≤ i ≤ N [ γ t ( i ) ] , t = 1 , 2 , … … , T i_t^*=arg\,\,\underbrace{max}_{1\leq i\leq N}[\gamma_t(i)],t=1,2,……,T it=arg1iN 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)

维特比算法

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

根据动态规划原理,最优路径具有这样的性质:如果最优路径在时刻t通过结点 i t ∗ i_t^* it,那么这一路径从结点 i t ∗ i_t^* it到终点 i T ∗ i_T^* iT的部分路径,对于从 i t ∗ i_t^* it i T ∗ i_T^* iT的所有可能部分路径来说,必须是最优的。因为假如不这样,那么从 i t ∗ i_t^* it i T ∗ i_T^* iT就有一条更好的部分路径存在,如果把他和从 i t ∗ i_t^* it i T ∗ i_T^* iT的部分路径连接起来,就会形成一条比原来更优的路径,那么这是矛盾的。

依据这一原理,我们只需要从时刻t=1开始,递推的计算时刻t状态为i的各条部分路径的最大概率,直至得到时刻t=T状态为i的各条路径的最大概率。时刻t=T的最大概率即为最优路径的概率 P ∗ P^* P,最优路径的终结点 i T ∗ i_T^* iT也同时得到。之后,为了找出最优路径的各个节点,从终结点 i T ∗ i_T^* iT开始,由后向前逐步求得结点 i T − 1 ∗ , … … , i 1 ∗ i_{T-1}^*,……,i_1^* iT1,……,i1,这就是维特比算法。

首先导入两个变量 δ \delta δ Ψ \Psi Ψ。定义在时刻t状态为i的所有单个路径 ( i 1 , i 2 , … … , i t ) (i_1,i_2,……,i_t) (i1,i2,……,it)中概率最大值为
δ t ( i ) = m a x ⏟ i 1 , i 2 , … … , i t − 1 P ( i t = i , i t − 1 , … , i 1 , o t , … , o 1 ∣ λ ) , i = 1 , 2 , … , N \delta_t(i)=\underbrace{max}_{i_1,i_2,……,i_{t-1}}P(i_t=i,i_{t-1},…,i_1,o_t,…,o_1|\lambda),i=1,2,…,N δt(i)=i1,i2,……,it1 maxP(it=i,it1,,i1,ot,,o1λ)i=1,2,,N

由上定义可得变量 δ \delta δ的递推公式:
δ t + 1 ( i ) = m a x ⏟ i 1 , i 2 , … … , i t P ( i t = i , i t , … , i 1 , o t + 1 , … , o 1 ∣ λ ) , i = 1 , 2 , … , N ; t = 1 , 2 , … , T − 1 \delta_{t+1}(i)=\underbrace{max}_{i_1,i_2,……,i_{t}}P(i_t=i,i_{t},…,i_1,o_{t+1},…,o_1|\lambda),i=1,2,…,N;t=1,2,…,T-1 δt+1(i)=i1,i2,……,it maxP(it=i,it,,i1,ot+1,,o1λ)i=1,2,,N;t=1,2,,T1

定义在时刻t状态为i的所有单个路径 ( i 1 , i 2 , … … , i t − 1 , i ) (i_1,i_2,……,i_{t-1},i) (i1,i2,……,it1,i)中概率最大的路径的第t-1个结点为
Ψ t ( i ) = a r g    m a x ⏟ 1 ≤ i ≤ N [ δ t − 1 ( j ) a i j ] , i = 1 , 2 , … , N \Psi_t(i)=arg\,\,\underbrace{max}_{1\leq i\leq N}[\delta_{t-1}(j)a_{ij}],i=1,2,…,N Ψt(i)=arg1iN max[δt1(j)aij]i=1,2,,N

算法

输入:模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(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 \delta_1(i)=\pi_ib_i(o_1),i=1,2,…,N δ1(i)=πibi(o1)i=1,2,,N
    Ψ t ( i ) = 0 , i = 1 , 2 , … , N \Psi_t(i)=0,i=1,2,…,N Ψt(i)=0i=1,2,,N

  2. 递推。对 t = 2 , 3 , … , T t=2,3,…,T t=23,,T
    δ t ( i ) =    m a x ⏟ 1 ≤ i ≤ N [ δ t − 1 ( j ) a i j ] b i ( o t ) , i = 1 , 2 , … , N \delta_t(i)=\,\,\underbrace{max}_{1\leq i\leq N}[\delta_{t-1}(j)a_{ij}]b_i(o_t),i=1,2,…,N δt(i)=1iN max[δt1(j)aij]bi(ot)i=1,2,,N
    Ψ t ( i ) = a r g    m a x ⏟ 1 ≤ i ≤ N [ δ t − 1 ( j ) a i j ] , i = 1 , 2 , … , N \Psi_t(i)=arg\,\,\underbrace{max}_{1\leq i\leq N}[\delta_{t-1}(j)a_{ij}],i=1,2,…,N Ψt(i)=arg1iN max[δt1(j)aij]i=1,2,,N

  3. 终止
    P ∗ = m a x ⏟ 1 ≤ i ≤ N δ T ( i ) P^*=\underbrace{max}_{1\leq i\leq N}\delta_{T}(i) P=1iN maxδT(i)
    i T ∗ = a r g    m a x ⏟ 1 ≤ i ≤ N δ T ( i ) i_T^*=arg\,\,\underbrace{max}_{1\leq i\leq N}\delta_{T}(i) iT=arg1iN maxδT(i)

  4. 最优路径回溯。对 t = T − 1 , T − 2 , … , 1 t=T-1,T-2,…,1 t=T1,T2,,1
    i t ∗ = Ψ t + 1 ( i t + 1 ∗ ) i_t^*=\Psi_{t+1}(i_{t+1}^*) it=Ψt+1(it+1)
    求得最优路径 I ∗ = ( i 1 ∗ , i 2 ∗ , … , i T ∗ ) I^*=(i_1^*,i_2^*,…,i_T^*) I=(i1,i2,,iT)

实例

使用前面的例子:
初始状态分布为:
Π = ( 0.2 , 0.4 , 0.4 ) T \Pi=(0.2,0.4,0.4)^T Π=(0.2,0.4,0.4)T

状态转移概率分布矩阵为:

A = ( 0.5 0.2 0.3 0.3 0.5 0.2 0.2 0.3 0.5 ) A= \begin{pmatrix} 0.5 & 0.2 & 0.3 \\ 0.3 & 0.5 & 0.2 \\ 0.2 & 0.3 & 0.5 \\ \end{pmatrix} A= 0.50.30.20.20.50.30.30.20.5

观测状态概率矩阵为:

B = ( 0.5 0.5 0.4 0.6 0.7 0.3 ) B= \begin{pmatrix} 0.5 & 0.5 \\ 0.4 & 0.6 \\ 0.7 & 0.3 \\ \end{pmatrix} B= 0.50.40.70.50.60.3

已知观测序列 O = ( 红,白,红 ) O=({\text{红,白,红}}) O=(红,白,红),试求最优状态序列,即最优路径 I ∗ = ( i 1 ∗ , i 2 ∗ , i 3 ∗ ) I^*=(i_1^*,i_2^*,i_3^*) I=(i1,i2,i3)

初始化
在t=1时,对每一个状态i, i = 1 , 2 , 3 i=1,2,3 i=1,2,3,求状态为i观测我为 o 1 o_1 o1为红的概率,记此概率为 δ 1 ( i ) \delta_1(i) δ1(i),则

δ 1 ( i ) = π i b i ( o 1 ) , i = 1 , 2 , 3 \delta_1(i)=\pi_ib_i(o_1),i=1,2,3 δ1(i)=πibi(o1),i=1,2,3

带入数据
δ 1 ( 1 ) = π 1 b 1 ( o 1 ) = 0.2 × 0.5 = 0.1 \delta_1(1)=\pi_1b_1(o_1)=0.2×0.5=0.1 δ1(1)=π1b1(o1)=0.2×0.5=0.1
δ 1 ( 2 ) = π 2 b 2 ( o 1 ) = 0.4 × 0.4 = 0.16 \delta_1(2)=\pi_2b_2(o_1)=0.4×0.4=0.16 δ1(2)=π2b2(o1)=0.4×0.4=0.16
δ 1 ( 3 ) = π 3 b 3 ( o 1 ) = 0.4 × 0.7 = 0.28 \delta_1(3)=\pi_3b_3(o_1)=0.4×0.7=0.28 δ1(3)=π3b3(o1)=0.4×0.7=0.28

Ψ 1 ( 1 ) = Ψ 1 ( 2 ) = Ψ 1 ( 3 ) = 0 \Psi_1(1)=\Psi_1(2)=\Psi_1(3)=0 Ψ1(1)=Ψ1(2)=Ψ1(3)=0

递推
t=2时,对于每个状态 i , i = 1 , 2 , 3 i,i=1,2,3 i,i=1,2,3,求在t=1时状态为j观测为红并在t=2时刻状态为i观测 o 2 o_2 o2为白的路径的最大概率,记此最大概率为 δ 2 ( i ) \delta_2(i) δ2(i),则

δ t ( i ) =    m a x ⏟ 1 ≤ i ≤ 3 [ δ 1 ( j ) a j i ] b i ( o 2 ) \delta_t(i)=\,\,\underbrace{max}_{1\leq i\leq 3}[\delta_{1}(j)a_{ji}]b_i(o_2) δt(i)=1i3 max[δ1(j)aji]bi(o2)

带入实际数据

δ 2 ( 1 ) =    m a x ⏟ 1 ≤ i ≤ 3 [ δ 1 ( j ) a j 1 ] b 1 ( o 2 ) = m a x ⏟ 1 ≤ i ≤ 3 [ 0.1 × 0.5 , 0.16 × 0.3 , 0.28 × 0.2 ] × 0.5 = 0.028 \delta_2(1)=\,\,\underbrace{max}_{1\leq i\leq 3}[\delta_{1}(j)a_{j1}]b_1(o_2)=\underbrace{max}_{1\leq i\leq 3}[0.1×0.5,0.16×0.3,0.28×0.2]×0.5=0.028 δ2(1)=1i3 max[δ1(j)aj1]b1(o2)=1i3 max[0.1×0.5,0.16×0.3,0.28×0.2]×0.5=0.028

Ψ 2 ( 1 ) = 3 \Psi_2(1)=3 Ψ2(1)=3

δ 2 ( 2 ) =    m a x ⏟ 1 ≤ i ≤ 3 [ δ 1 ( j ) a j 2 ] b 2 ( o 2 ) = m a x ⏟ 1 ≤ i ≤ 3 [ 0.1 × 0.2 , 0.16 × 0.5 , 0.28 × 0.3 ] × 0.6 = 0.0504 \delta_2(2)=\,\,\underbrace{max}_{1\leq i\leq 3}[\delta_{1}(j)a_{j2}]b_2(o_2)=\underbrace{max}_{1\leq i\leq 3}[0.1×0.2,0.16×0.5,0.28×0.3]×0.6=0.0504 δ2(2)=1i3 max[δ1(j)aj2]b2(o2)=1i3 max[0.1×0.2,0.16×0.5,0.28×0.3]×0.6=0.0504

Ψ 2 ( 2 ) = 3 \Psi_2(2)=3 Ψ2(2)=3

δ 2 ( 3 ) =    m a x ⏟ 1 ≤ i ≤ 3 [ δ 1 ( j ) a j 3 ] b 3 ( o 2 ) = m a x ⏟ 1 ≤ i ≤ 3 [ 0.1 × 0.3 , 0.16 × 0.2 , 0.28 × 0.5 ] × 0.3 = 0.042 \delta_2(3)=\,\,\underbrace{max}_{1\leq i\leq 3}[\delta_{1}(j)a_{j3}]b_3(o_2)=\underbrace{max}_{1\leq i\leq 3}[0.1×0.3,0.16×0.2,0.28×0.5]×0.3=0.042 δ2(3)=1i3 max[δ1(j)aj3]b3(o2)=1i3 max[0.1×0.3,0.16×0.2,0.28×0.5]×0.3=0.042

Ψ 2 ( 3 ) = 3 \Psi_2(3)=3 Ψ2(3)=3

同理t=3时

δ 3 ( 1 ) =    m a x ⏟ 1 ≤ i ≤ 3 [ δ 1 ( j ) a j 1 ] b 1 ( o 3 ) = m a x ⏟ 1 ≤ i ≤ 3 [ 0.028 × 0.5 , 0.0504 × 0.3 , 0.042 × 0.2 ] × 0.5 = 0.00756 \delta_3(1)=\,\,\underbrace{max}_{1\leq i\leq 3}[\delta_{1}(j)a_{j1}]b_1(o_3)=\underbrace{max}_{1\leq i\leq 3}[0.028×0.5,0.0504×0.3,0.042×0.2]×0.5=0.00756 δ3(1)=1i3 max[δ1(j)aj1]b1(o3)=1i3 max[0.028×0.5,0.0504×0.3,0.042×0.2]×0.5=0.00756

Ψ 3 ( 1 ) = 2 \Psi_3(1)=2 Ψ3(1)=2

δ 3 ( 2 ) =    m a x ⏟ 1 ≤ i ≤ 3 [ δ 1 ( j ) a j 2 ] b 2 ( o 3 ) = m a x ⏟ 1 ≤ i ≤ 3 [ 0.028 × 0.2 , 0.0504 × 0.5 , 0.042 × 0.3 ] × 0.4 = 0.01008 \delta_3(2)=\,\,\underbrace{max}_{1\leq i\leq 3}[\delta_{1}(j)a_{j2}]b_2(o_3)=\underbrace{max}_{1\leq i\leq 3}[0.028×0.2,0.0504×0.5,0.042×0.3]×0.4=0.01008 δ3(2)=1i3 max[δ1(j)aj2]b2(o3)=1i3 max[0.028×0.2,0.0504×0.5,0.042×0.3]×0.4=0.01008

Ψ 3 ( 2 ) = 2 \Psi_3(2)=2 Ψ3(2)=2

δ 3 ( 3 ) =    m a x ⏟ 1 ≤ i ≤ 3 [ δ 1 ( j ) a j 3 ] b 3 ( o 3 ) = m a x ⏟ 1 ≤ i ≤ 3 [ 0.028 × 0.3 , 0.0504 × 0.2 , 0.042 × 0.5 ] × 0.7 = 0.0147 \delta_3(3)=\,\,\underbrace{max}_{1\leq i\leq 3}[\delta_{1}(j)a_{j3}]b_3(o_3)=\underbrace{max}_{1\leq i\leq 3}[0.028×0.3,0.0504×0.2,0.042×0.5]×0.7=0.0147 δ3(3)=1i3 max[δ1(j)aj3]b3(o3)=1i3 max[0.028×0.3,0.0504×0.2,0.042×0.5]×0.7=0.0147

Ψ 3 ( 3 ) = 3 \Psi_3(3)=3 Ψ3(3)=3

终止

P ∗ P^* P表示最优路径概率,则
P ∗ = m a x ⏟ 1 ≤ i ≤ 3 δ 3 ( i ) = 0.0147 P^*=\underbrace{max}_{1\leq i\leq 3}\delta_{3}(i)=0.0147 P=1i3 maxδ3(i)=0.0147

最优路径终点是 i 3 ∗ i_3^* i3
i 3 ∗ = a r g    m a x ⏟ i [ δ 3 ( i ) ] = 3 i_3^*=arg\,\, \underbrace{max}_{i}[\delta_{3}(i)]=3 i3=argi max[δ3(i)]=3

回溯
由最优路径的终点 i 3 ∗ i_3^* i3,逆向找到 i 2 ∗ i_2^* i2 i 1 ∗ i_1^* i1
t = 2 , i 2 ∗ = Ψ 3 ( i 3 ∗ ) = Ψ 3 ( 3 ) = 3 t=2,i_2^*=\Psi_3(i_3^*)=\Psi_3(3)=3 t=2,i2=Ψ3(i3)=Ψ3(3)=3
t = 1 i 1 ∗ = Ψ 2 ( i 2 ∗ ) = Ψ 2 ( 3 ) = 3 t=1i_1^*=\Psi_2(i_2^*)=\Psi_2(3)=3 t=1i1=Ψ2(i2)=Ψ2(3)=3

从而得到最终的最可能的隐藏状态序列为: 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)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Andy_shenzl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值