隐马尔科夫模型HMM详解——python实现

Posted 栋次大次

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了隐马尔科夫模型HMM详解——python实现相关的知识,希望对你有一定的参考价值。

目录

代码地址:https://gitee.com/liangcd/speech_learning/tree/master/HMM
HMM基本概念、概率计算、预测算法请看上一篇文章,感谢您的阅读!

学习算法

已知观测序列 O = ( o 1 , o 2 , … , o T ) , b j ( o t ) = ∑ m = 1 M c j m N ( o t ; μ j m , Σ j m ) O=\\left(o_1, o_2, \\ldots, o_T\\right), b_j\\left(o_t\\right)=\\sum_m=1^M c_j m \\mathcalN\\left(o_t ; \\mu_j m, \\Sigma_j m\\right) O=(o1,o2,,oT),bj(ot)=m=1McjmN(ot;μjm,Σjm),估计GMM-HMM参数 λ \\lambda λ,使 P ( O ∣ λ ) P(O|\\lambda) P(Oλ)最大。参数 λ \\lambda λ包括:

  • 初始状态概率向量 π = ( π i ) \\pi = (\\pi_i) π=(πi)

  • 转移概率矩阵 A = [ a i j ] N × N A=[a_ij]_N\\times N A=[aij]N×N

  • 状态 j j j的GMM参数 ( c j m , μ j m , Σ j m ) (c_jm,\\mu_jm,\\Sigma_jm) (cjm,μjm,Σjm), j = 1 , 2 , . . . , N ; m = 1 , . . . , M j=1,2,...,N; m=1,...,M j=1,2,...,N;m=1,...,M表示GMM分量标号。

Viterbi学习算法

如果已知状态-观测对齐序列,每个观测 o t o_t ot对应一个具体的状态,状态-观测对齐序列可通过Viterbi解码算法得到,也可通过人工标注得到。知道每个观测对应的状态,则:

π i \\pi_i πi可通过最大似然估计得到:

  • C ( i ) C(i) C(i)表示初始状态为 i i i 的次数
  • π ^ i = C ( i ) ∑ k C ( k ) \\widehat\\pi_i=\\fracC(i)\\sum_k C(k) π i=kC(k)C(i)

a i j a_ij aij也可通过最大似然估计得到:

  • C ( i → j ) C(i \\rightarrow j) C(ij)表示从状态 i i i到状态 j j j的转移次数
  • a ^ i j = C ( i → j ) ∑ k C ( i → k ) \\hata_i j=\\fracC(i \\rightarrow j)\\sum_k C(i \\rightarrow k) a^ij=kC(ik)C(ij)

可得每个状态 j j j对应的观测集合 Z j = ( y 1 , y 2 , … , y N ) Z_j=\\left(y_1, y_2, \\ldots, y_N\\right) Zj=(y1,y2,,yN),每个状态对应一个GMM,也就得到了每个GMM对应的观测集合 Z j = ( y 1 , y 2 , … , y N ) Z_j=\\left(y_1, y_2, \\ldots, y_N\\right) Zj=(y1,y2,,yN)

问题:用viterbi算法得到对齐序列需要用到模型参数 λ \\lambda λ,最初的 λ \\lambda λ怎么得到?

当GMM只有一个分量 b j ( o t ) = N ( o t ; μ j , Σ j ) b_j\\left(o_t\\right)=\\mathcalN\\left(o_t ; \\mu_j, \\Sigma_j\\right) bj(ot)=N(ot;μj,Σj) ∣ Z j ∣ |Z_j| Zj表示 Z j Z_j Zj的元素个数,则:

μ ^ j = ∑ o t ∈ Z j o t ∣ Z j ∣ \\hat\\mu_j=\\frac\\sum_o_t \\in Z_j o_t\\left|Z_j\\right| μ^j=ZjotZjot
Σ ^ j = ∑ o t ∈ Z j ( o t − μ ^ j ) ( o t − μ ^ j

以上是关于隐马尔科夫模型HMM详解——python实现的主要内容,如果未能解决你的问题,请参考以下文章

隐马尔科夫模型HMM详解——python实现

Python实现HMM(隐马尔可夫模型)

隐马尔科夫模型HMM详解

隐马尔科夫模型HMM详解

隐马尔可夫模型(HMM)详解

大道至简机器学习算法之隐马尔科夫模型(Hidden Markov Model, HMM)详解---学习问题:Baum-Welch算法推导