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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37352167/article/details/86523813

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

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

  • 近似算法

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

    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 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

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

    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 ,得到最优路径。

    引入两个变量 δ 和 ψ:


    定义在时刻 t 状态为 i 的所有单个路径 ( i 1 , i 2 , . . . , i t ) (i_1,i_2,...,i_t) 中概率最大值为:

    δ 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 + 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 状态为 i 的所有单个路径 ( i 1 , i 2 , . . . , i t 1 ) (i_1,i_2,...,i_{t-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

    1. 算法过程

      输入:模型 λ = ( 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 ) i = 1 , 2 , . . . , N δ_1(i)=π_ib_i(o_1),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-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-1 时刻最有可能的状态)

      3)终止

      P = 1 j N m a x δ T ( i ) P^*=\mathop{}_{1\le j \le N}^{max}δ_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)]

      4)回溯最优路径,对 t=T-1,T-2,…,1

      i t = ψ t + 1 ( i t + 1 ) i^*_t=ψ_{t+1}(i^*_{t+1})

      5)求得最优路径

      I = ( i 1 , i 2 , . . . , i T ) I^*=(i_1^*,i_2^*,...,i_T^*)

    2. 举例

      模型 λ = ( A , B , Π ) λ=(A,B,Π) ,已知观测序列 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)

      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 ( 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

      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 ) = 3 ψ_2(1)=3

      由状态 1,2,3 转移到状态 2 的最大概率:

      δ 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


      对 t=3 时

      由状态 1,2,3 转移到状态 1 的最大概率:

      δ 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

      由状态 1,2,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}

      最优路径的终点是:

      i 3 = i a r g   m a x [ δ 3 ( i ) ] = 3 i_3^*=\mathop{}_{i}^{arg~max}[δ_3(i)]=3

      4)回溯最优路径

      由最优路径终点 i 3 i_3^* ,逆向找到 i 2 i 1 i_2^*,i_1^*

      在 t=2 时: i 2 = ψ 3 ( i 3 ) = ψ 3 ( 3 ) = 3 i_2^*=ψ_3(i_3^*)=ψ_3(3)=3

      在 t=1 时: i 1 = ψ 2 ( i 2 ) = ψ 2 ( 3 ) = 3 i_1^*=ψ_2(i_2^*)=ψ_2(3)=3

      5)得到最优路径

      I = ( i 1 i 2 i 3 ) = ( 3 3 3 ) I^*=(i_1^*,i_2^*,i_3^*)=(3,3,3)

猜你喜欢

转载自blog.csdn.net/weixin_37352167/article/details/86523813