机器学习——隐马尔可夫模型

    xiaoxiao2025-03-14  49

    隐马尔可夫模型

    定义概率计算算法直接计算法前向算法后向算法 学习算法监督学习方法Baum-Welch 算法 预测算法近似算法维特比算法 参考文献 隐马尔可夫模型可用于 标注问题,属于 生成模型,在语音识别、自然语言处理、生物信息、模式识别等领域有着广泛的应用。

    定义

    隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。隐藏的马尔可夫链随机生成的状态的序列,称为状态序列。每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列。序列的每一个位置又可以看作是一个时刻。

    隐马尔可夫模型的形式定义如下: 设 Q Q Q 是所有可能的状态的集合, V V V 是所有可能的观测的集合: A = { q 1 , q 2 , . . . , q N } ,        V = { v 1 , v 2 , . . . , v M } A=\{q_1,q_2,...,q_N\},\;\;\;V=\{v_1,v_2,...,v_M\} A={q1,q2,...,qN},V={v1,v2,...,vM}其中, N N N 是可能的状态数, M M M 是可能的观测数。

    I I I 是长度为 T T T 的状态序列, O O O 是对应的观测序列: I = { i 1 , i 2 , . . . , i T } ,        O = { o 1 , o 2 , . . . , o T } I=\{i_1,i_2,...,i_T\},\;\;\;O=\{o_1,o_2,...,o_T\} I={i1,i2,...,iT},O={o1,o2,...,oT} A A A 是状态转移概率矩阵: A = [ a i j ] N × N A=[a_{ij}]_{N\times N} A=[aij]N×N其中, a i j = P ( i t + 1 = q j ∣ i t = q i ) a_{ij}=P(i_{t+1}=q_j|i_t=q_i) aij=P(it+1=qjit=qi) i = 1 , 2 , . . . , N ; j = 1 , 2 , . . . , N i=1,2,...,N;j=1,2,...,N i=1,2,...,N;j=1,2,...,N,是在时刻 t t t 处于状态 q i q_i qi 的条件下在时刻 t + 1 t+1 t+1 转移到状态 q j q_j qj 的概率。

    B B B 是观测概率矩阵: B = [ b j ( k ) ] N × M B=[b_j(k)]_{N\times M} B=[bj(k)]N×M其中, b j ( k ) = P ( o t = v k ∣ i t = q j ) b_j(k)=P(o_t=v_k|i_t=q_j) bj(k)=P(ot=vkit=qj) k = 1 , 2 , . . . , M ; j = 1 , 2 , . . . , N k=1,2,...,M; j=1,2,...,N k=1,2,...,M;j=1,2,...,N,是在时刻 t t t 处于状态 q j q_j qj 的条件下生成观测 v k v_k vk 的概率。

    π \pi π 是初始状态概率向量: π = ( π i ) \pi=(\pi_i) π=(πi)其中, π i = P ( i 1 = q i ) \pi_i=P(i_1=q_i) πi=P(i1=qi) i = 1 , 2 , . . . , N i=1,2,...,N i=1,2,...,N 是时刻 t = 1 t=1 t=1 处于状态 q i q_i qi 的概率。

    隐马尔可夫模型有初始状态概率向量 π \pi π、状态转移概率矩阵 A A A 和观测概率矩阵 B B B 决定。 π \pi π A A A 决定状态序列, B B B 决定观测序列。因此,隐马尔可夫模型 λ \lambda λ 可以用三元符号表示,即: λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π) A , B , π A,B,\pi A,B,π 称为隐马尔可夫模型的三要素。状态转移概率矩阵 A A A 与初始状态概率向量 π \pi π 确定了隐藏的马尔可夫链,生成不可观测的状态序列。观测概率矩阵 B B B 确定了如何从状态生成观测,与状态序列综合确定了如何产生观测序列。

    基本假设:

    齐次马尔可夫性假设,即假设隐藏的马尔可夫链在任意时刻 t t t 的状态只依赖于其前一时刻的状态,与其他时刻的状态及观测无关,也与时刻 t t t 无关: P ( i t ∣ i t − 1 , o t − 1 , . . . , i 1 , o 1 ) = P ( i t ∣ i t − 1 ) ,        t = 1 , 2 , . . . , T P(i_t|i_{t-1},o_{t-1},...,i_1,o_1)=P(i_t|i_{t-1}),\;\;\;t=1,2,...,T P(itit1,ot1,...,i1,o1)=P(itit1),t=1,2,...,T观测独立性假设,即假设任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其他观测即状态无关: P ( o t ∣ i T , o T , i T − 1 , o T − 1 , . . . , i t + 1 , o t + 1 , i t , i t − 1 , o t − 1 , . . , i 1 , o 1 ) = P ( o t ∣ i t ) P(o_t|i_T,o_T,i_{T-1},o_{T-1},...,i_{t+1},o_{t+1},i_t,i_{t-1},o_{t-1},..,i_1,o_1)=P(o_t|i_t) P(otiT,oT,iT1,oT1,...,it+1,ot+1,it,it1,ot1,..,i1,o1)=P(otit)

    概率计算算法

    概率计算问题,就是给定模型 λ = ( 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),计算在模型 λ \lambda λ 下观测序列 O O O 出现的概率 P ( O ∣ λ ) P(O| \lambda) P(Oλ)

    直接计算法

    最直接的方法是按概率公式直接计算,通过列举所有可能的长度为 T T T 的状态序列 I = ( i 1 , i 2 , . . . , i T ) I=(i_1,i_2,...,i_T) I=(i1,i2,...,iT),求各个状态序列 I I I 与观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT) 的联合概率 P ( O , I ∣ λ ) P(O,I| \lambda) P(O,Iλ),然后对所有可能的状态序列求和,得到 P ( O ∣ λ ) P(O| \lambda) P(Oλ)

    但是这样的计算量很大,是 O ( T N T ) O(TN^T) O(TNT) 阶的,这种算法不可行。

    前向算法

    前向概率:给定隐马尔可夫模型 λ \lambda λ,定义到时刻 t t t 部分观测序列为 o 1 , o 2 , . . . , o t o_1,o_2,...,o_t o1,o2,...,ot 且状态为 q i q_i qi 的概率为前向概率,记作: α t ( i ) = P ( o 1 , o 2 , . . . , o t , i t = q i ∣ λ ) \alpha_t(i)=P(o_1,o_2,...,o_t,i_t=q_i|\lambda) αt(i)=P(o1,o2,...,ot,it=qiλ)可以递推地求得前向概率 α t ( i ) \alpha_t(i) αt(i) 即观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ)

    观测序列概率的前向算法: 输入:隐马尔可夫模型 λ \lambda λ,观测序列 O O O; 输出:观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ)

    初值: α 1 ( i ) = π i b i ( o 1 ) ,        i = 1 , 2 , . . . , N \alpha_1(i)=\pi_ib_i(o_1),\;\;\;i=1,2,...,N α1(i)=πibi(o1),i=1,2,...,N递推:对 t = 1 , 2 , . . . , T − 1 t=1,2,...,T-1 t=1,2,...,T1 α t + 1 ( i ) = [ ∑ j = 1 N α t ( j ) a j i ] b i ( o t + 1 ) ,        i = 1 , 2 , . . . , N \alpha_{t+1}(i)=\left[\sum_{j=1}^N\alpha_t(j)a_{ji}\right]b_i(o_{t+1}),\;\;\;i=1,2,...,N αt+1(i)=[j=1Nαt(j)aji]bi(ot+1),i=1,2,...,N终止: P ( O ∣ λ ) = ∑ i = 1 N α T ( i ) P(O|\lambda)=\sum_{i=1}^N\alpha_T(i) P(Oλ)=i=1NαT(i) 其中,步骤1初始化前向概率,是初始时刻的状态 i 1 = q i i_1=q_i i1=qi 和观测 o 1 o_1 o1 的联合概率。步骤2是前向概率的递推公式,计算到时刻 t + 1 t+1 t+1 部分观测序列为 o 1 , o 2 , . . . , o t , o t + 1 o_1,o_2,...,o_t,o_{t+1} o1,o2,...,ot,ot+1 且在时刻 t + 1 t+1 t+1 处于状态 q i q_i qi 的前向概率。对乘积在时刻 t t t 的所有可能的 N N N 个状态 q j q_j qj 求和,其结果就是到时刻 t t t 观测为 o 1 , o 2 , . . . , o t o_1,o_2,...,o_t o1,o2,...,ot 并在时刻 t + 1 t+1 t+1 处于状态 q i q_i qi 的联合概率。

    前向算法能够减少计算量的原因在于每一次计算直接引用前一个时刻的计算结果,避免重复计算。专业,前向概率计算 P ( O ∣ λ ) P(O|\lambda) P(Oλ) 的计算量是 O ( N 2 T ) O(N^2T) O(N2T) 阶的。

    后向算法

    后向概率:给定隐马尔可夫模型 λ \lambda λ,定义在时刻 t t t 状态为 q i q_i qi 的条件下,从 t + 1 t+1 t+1 T T T 的部分观测序列为 o t + 1 , o t + 2 , . . . , o T o_{t+1},o_{t+2},...,o_T ot+1,ot+2,...,oT 的概率为后向概率,记作: β t ( i ) = P ( o t + 1 , o t + 2 , . . . , o T ∣ i t = q i , λ ) \beta_t(i)=P(o_{t+1},o_{t+2},...,o_T|i_t=q_i,\lambda) βt(i)=P(ot+1,ot+2,...,oTit=qi,λ) 观测序列概率的后向算法: 输入:隐马尔可夫模型 λ \lambda λ,观测序列 O O O; 输出:观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ)

    β T ( i ) = 1 ,        i = 1 , 2 , . . . , N \beta_T(i)=1,\;\;\;i=1,2,...,N βT(i)=1,i=1,2,...,N t = T − 1 , T − 2 , . . . , 1 t=T-1,T-2,...,1 t=T1,T2,...,1: β t ( i ) = ∑ j = 1 N a i j b j ( o t + 1 ) β t + 1 ( j ) ,        i = 1 , 2 , . . . , N \beta_t(i)=\sum_{j=1}^Na_{ij}b_j(o_{t+1})\beta_{t+1}(j),\;\;\;i=1,2,...,N βt(i)=j=1Naijbj(ot+1)βt+1(j),i=1,2,...,N P ( O ∣ λ ) = ∑ i = 1 N π i b i ( o 1 ) β 1 ( i ) P(O|\lambda)=\sum_{i=1}^N\pi_ib_i(o_1)\beta_1(i) P(Oλ)=i=1Nπibi(o1)β1(i) 其中,步骤1初始化后向概率,由于后向概率是基于模型参数和最终状态是 q i q_i qi的基础上定义的,因此最终的时刻 T T T 所有状态是确定的,即 β T ( i ) = 1 \beta_T(i)=1 βT(i)=1。步骤2是后向概率的递推公式,为了计算在时刻 t t t 状态为 q i q_i qi 条件下时刻 t + 1 t+1 t+1 之后的观测序列为 o t + 1 , o t + 2 , . . . , o T o_{t+1},o_{t+2},...,o_T ot+1,ot+2,...,oT 的后向概率 β t ( i ) \beta_t(i) βt(i),只需考虑在时刻 t + 1 t+1 t+1 所有可能的 N N N 个状态 q j q_j qj 的转移概率(即 a i j 项 a_{ij}项 aij),以及在此状态下的观测 o t + 1 o_{t+1} ot+1 的观测概率(即 b j ( o t + 1 ) b_j(o_{t+1}) bj(ot+1)),然后考虑状态 q j q_j qj 之后的观测序列的后向概率(即 β t + 1 ( j ) \beta_{t+1}(j) βt+1(j)项)。

    利用前向概率和后向概率的定义可以将观测序列概率统一写成: P ( O ∣ λ ) = ∑ i = 1 N ∑ j = 1 N α t ( i ) a i j b j ( o t + 1 ) β t + 1 ( j ) ,        t = 1 , 2 , . . . , T − 1 P(O|\lambda)=\sum_{i=1}^N\sum_{j=1}^N\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j),\;\;\;t=1,2,...,T-1 P(Oλ)=i=1Nj=1Nαt(i)aijbj(ot+1)βt+1(j),t=1,2,...,T1此式当 t = 1 t=1 t=1 t = T − 1 t=T-1 t=T1 时分别为前两个式子。

    学习算法

    已知观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),估计模型 λ \lambda λ 参数,使得在该模型下观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ) 最大。根据训练数据是包括观测序列和对应的状态序列还是只有观测序列,可以分别由监督学习与非监督学习实现。

    监督学习方法

    假设已给训练数据包含 S S S 个长度相同的观测序列和对应的状态序列 { ( O 1 , I 1 ) , ( O 2 , I 2 ) , . . . ( O S , I S ) } \{(O_1,I_1),(O_2,I_2),...(O_S,I_S)\} {(O1,I1),(O2,I2),...(OS,IS)},那么可以利用极大似然估计法来估计隐马尔可夫模型的参数。具体方法如下:

    转移概率 a i j a_{ij} aij 的估计: 设样本中时刻 t t t 处于状态 i i i,时刻 t + 1 t+1 t+1 转移到状态 j j j 的频数为 A i j A_{ij} Aij,那么 a ^ i j = A i j ∑ j = 1 N A i j ,        i = 1 , 2 , . . . , N ; j = 1 , 2 , . . . , N \hat a_{ij}=\frac{A_{ij}}{\sum_{j=1}^NA_{ij}},\;\;\;i=1,2,...,N;j=1,2,...,N a^ij=j=1NAijAij,i=1,2,...,N;j=1,2,...,N观测概率 b j ( k ) b_j(k) bj(k) 的估计: 设样本中状态为 j j j 并观测为 k k k 的频数是 B j k B_{jk} Bjk,那么 b ^ j ( k ) = B j k ∑ k = 1 M B j k ,        j = 1 , 2 , . . . , N ; k = 1 , 2 , . . . , M \hat b_j(k)=\frac{B_{jk}}{\sum_{k=1}^MB_{jk}},\;\;\;j=1,2,...,N;k=1,2,...,M b^j(k)=k=1MBjkBjk,j=1,2,...,N;k=1,2,...,M初始状态概率 π i \pi_i πi 的估计: 为 S S S 个样本中初始状态为 q i q_i qi 的频率

    Baum-Welch 算法

    如果只有观测序列,而没有对应的状态序列,这是可以采用非监督学习的Baum-Welch算法(也就是EM算法)。将观测序列数据看作观测数据 O O O,状态序列数据看作不可观测的隐数据 I I I,那么马尔可夫模型事实上是一个含有隐变量的概率模型: P ( O ∣ λ ) = ∑ I P ( O ∣ I , λ ) P ( I ∣ λ ) P(O|\lambda)=\sum_IP(O|I,\lambda)P(I|\lambda) P(Oλ)=IP(OI,λ)P(Iλ) Baum-Welch算法: 输入:观测数据 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT); 输出:隐马尔可夫模型参数。

    初始化 对 n = 0 n=0 n=0,选取 a i j ( 0 ) , b j ( k ) ( 0 ) , π i ( 0 ) a_{ij}^{(0)},b_j(k)^{(0)},\pi_i^{(0)} aij(0),bj(k)(0),πi(0),得到模型 λ ( 0 ) = ( A ( 0 ) , B ( 0 ) , π ( 0 ) ) \lambda^{(0)}=(A^{(0)},B^{(0)},\pi ^{(0)}) λ(0)=(A(0),B(0),π(0))。递推,对 n = 1 , 2 , . . . , n=1,2,..., n=1,2,..., a i j ( n + 1 ) = ∑ t = 1 T − 1 ξ t ( i , j ) ∑ t = 1 T − 1 γ t ( i )   b j ( k ) ( n + 1 ) = ∑ t = 1 , o t = v k T γ t ( j ) ∑ t = 1 T γ t ( j )   π i ( n + 1 ) = γ 1 ( i ) a_{ij}^{(n+1)}=\frac{\sum_{t=1}^{T-1}\xi_t(i,j)}{\sum_{t=1}^{T-1}\gamma_t(i)} \\ ~\\ b_j(k)^{(n+1)}=\frac{\sum_{t=1,o_t=v_k}^T\gamma_t(j)}{\sum_{t=1}^T\gamma_t(j)} \\ ~\\ \pi_i^{(n+1)}=\gamma_1(i) aij(n+1)=t=1T1γt(i)t=1T1ξt(i,j) bj(k)(n+1)=t=1Tγt(j)t=1,ot=vkTγt(j) πi(n+1)=γ1(i)其中 γ t ( i ) = α t ( i ) β t ( i ) P ( O ∣ λ ) = α t ( i ) β t ( i ) ∑ j = 1 N α t ( j ) β t ( j )   ξ t ( i , j ) = α t ( i ) a i j b j ( o t + 1 ) β t + 1 ( j ) ∑ i = 1 N ∑ j = 1 N α t ( i ) a i j b j ( o t + 1 ) β t + 1 ( 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)} \\ ~\\ \xi_t(i,j)=\frac{\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j)}{\sum_{i=1}^N\sum_{j=1}^N\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j)} γt(i)=P(Oλ)αt(i)βt(i)=j=1Nαt(j)βt(j)αt(i)βt(i) ξt(i,j)=i=1Nj=1Nαt(i)aijbj(ot+1)βt+1(j)αt(i)aijbj(ot+1)βt+1(j)终止。得到模型参数 λ ( n + 1 ) = ( A ( n + 1 ) , B ( n + 1 ) , π ( n + 1 ) ) \lambda^{(n+1)}=(A^{(n+1)},B^{(n+1)},\pi^{(n+1)}) λ(n+1)=(A(n+1),B(n+1),π(n+1))

    预测算法

    已知模型 λ = ( 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),求对该给定观测序列,条件概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ) 最大的状态序列 I = ( i 1 , i 2 , . . , i T ) I=(i_1,i_2,..,i_T) I=(i1,i2,..,iT)。即给定观测序列,求对应的最有可能的状态序列。

    近似算法

    近似算法的思想是,在每个时刻 t t 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 O O,在时刻 t t 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 t t 最有可能的状态 i t ∗ i_t^* it 是: i t ∗ = arg ⁡ max ⁡ 1 ≤ i ≤ N [ γ t ( i ) ] ,        t = 1 , 2 , . . . , T i_t^*=\arg\max_{1\leq i\leq N}[\gamma_t(i)],\;\;\;t=1,2,...,T it=arg1iNmax[γt(i)],t=1,2,...,T从而得到状态序列 I ∗ = ( i 1 ∗ , i 2 ∗ , . . , i T ∗ ) I^*=(i_1^*,i_2^*,..,i_T^*) I=(i1,i2,..,iT)

    维特比算法

    维特比算法是用动态规划求概率最大路径,这时一条路径对应着一个状态序列。首先导入两个变量 δ \delta δ ψ \psi ψ。定义在时刻 t t t 状态为 i i i 的所有单个路径 ( i 1 , i 2 , . . . , i t ) (i_1,i_2,...,i_t) (i1,i2,...,it) 中概率最大值为: δ t ( i ) = max ⁡ 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)=\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,...,it1maxP(it=i,it1,...,i1,ot,...,o1λ),i=1,2,...,N由定义可得变量 δ \delta δ 的递推公式: δ t + 1 ( i ) = max ⁡ i 1 , i 2 , . . . , i t P ( i t + 1 = i , i t , . . . , i 1 , o t + 1 , . . . , o 1 ∣ λ ) = max ⁡ 1 ≤ j ≤ N [ δ t ( j ) a j i ] b i ( o t + 1 ) ,        i = 1 , 2 , . . . , N ; t = 1 , 2 , . . . , T − 1 \delta_{t+1}(i)=\max_{i_1,i_2,...,i_t}P(i_{t+1}=i,i_t,...,i_1,o_{t+1},...,o_1|\lambda) \\ =\max_{1\leq j\leq N}[\delta_t(j)a_{ji}]b_i(o_{t+1}),\;\;\;i=1,2,...,N;t=1,2,...,T-1 δt+1(i)=i1,i2,...,itmaxP(it+1=i,it,...,i1,ot+1,...,o1λ)=1jNmax[δt(j)aji]bi(ot+1),i=1,2,...,N;t=1,2,...,T1定义在时刻 t t t 状态为 i i i 的所有单个路径 ( i 1 , i 2 , . . . , i t − 1 , i ) (i_1,i_2,...,i_{t-1},i) (i1,i2,...,it1,i) 中概率最大的路径的第 t − 1 t-1 t1 个结点为: ψ t ( i ) = arg ⁡ max ⁡ 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] ,        i = 1 , 2 , . . . , N \psi_t(i)=\arg\max_{1\leq j\leq N}[\delta_{t-1}(j)a_{ji}],\;\;\;i=1,2,...,N ψt(i)=arg1jNmax[δt1(j)aji],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 ( i ) = π i b i ( o 1 ) ,        i = 1 , 2 , . . . , N ψ 1 ( i ) = 0 ,        i = 1 , 2 , . . . , N \delta_1(i)=\pi_ib_i(o_1),\;\;\;i=1,2,...,N \\ \psi_1(i)=0,\;\;\;i=1,2,...,N δ1(i)=πibi(o1),i=1,2,...,Nψ1(i)=0,i=1,2,...,N递推。对 t = 2 , 3 , . . . , T t=2,3,...,T t=2,3,...,T δ t ( i ) = max ⁡ 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] b i ( o t ) ,        i = 1 , 2 , . . . , N ψ t ( i ) = arg ⁡ max ⁡ 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] ,        i = 1 , 2 , . . . , N \delta_t(i)=\max_{1\leq j\leq N}[\delta_{t-1}(j)a_{ji}]b_i(o_t),\;\;\;i=1,2,...,N \\ \psi_t(i)=\arg\max_{1\leq j\leq N}[\delta_{t-1}(j)a_{ji}],\;\;\;i=1,2,...,N δt(i)=1jNmax[δt1(j)aji]bi(ot),i=1,2,...,Nψt(i)=arg1jNmax[δt1(j)aji],i=1,2,...,N终止 P ∗ = max ⁡ 1 ≤ i ≤ N δ T ( i ) i T ∗ = arg ⁡ max ⁡ 1 ≤ i ≤ N [ δ T ( i ) ] P^*=\max_{1\leq i\leq N}\delta_T(i) \\ i_T^*=\arg\max_{1\leq i\leq N}\left[\delta_T(i)\right] P=1iNmaxδT(i)iT=arg1iNmax[δT(i)]最优路径回溯。对 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)

    参考文献

    [1] 李航. 统计学习方法. 清华大学出版社. 2012

    最新回复(0)