机器学习 - 隐马尔科夫模型(4)- 预测算法

本文介绍隐马尔科夫模型(HMM)中的预测算法,包括近似算法和维特比算法。近似算法通过在每个时刻选择最有可能的状态来生成状态序列,而维特比算法使用动态规划寻找概率最大的状态序列。通过实例展示了维特比算法的具体计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

机器学习 - 隐马尔科夫模型(4)- 预测算法

根据训练好的模型对测试数据进行预测,下面介绍应用在预测阶段的近似算法以及维特比算法。

  • 近似算法

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

    1. 算法过程

      给定 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=1iNarg 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)

    2. 特点

      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 iT1,iT2,...,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,...,it1maxP(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,...,it1maxP(it+1=i,it,...,i1,ot+1,...,o1λ)1jNmax[δt(j)aji]bi(ot+1)i=1,2,...,Nt=1,2,...,T1


    定义在时刻 t 状态为 i 的所有单个路径 ( i 1 , i 2 , . . . , i t − 1 ) (i_1,i_2,...,i_{t-1}) (i1,i2,...,it1) 中概率最大的路径的第 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)=1jNarg max[δt1(j)aji]i=1,2,...,N

    1. 算法过程

      输入:模型 λ = ( 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)=0i=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)=1jNmax[δt1(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)=1jNarg max[δt1(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=1jNmaxδ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=1jNarg 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)

    2. 举例

      模型 λ = ( 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.5B=()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.50.2=0.1δ1(2)=0.40.4=0.16δ1(3)=0.28

      ψ 1 ( i ) = 0 , i = 1 , 2 , 3 ψ_1(i)=0,i=1,2,3 ψ1(i)=0i=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)====1j3max[0.10.50.160.30.280.2]0.51j3max[0.050.0480.056]0.50.0560.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===1jNmaxδ3(i)max[0.007560.010080.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^* i2i1

      在 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=(i1i2i3)=(333)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值