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

Posted 栋次大次

tags:

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

代码:6.1发布
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} \\mathcal{N}\\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}=\\frac{C(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 ) \\hat{a}_{i j}=\\frac{C(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)=\\mathcal{N}\\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 −

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

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

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

隐马尔科夫模型HMM详解

隐马尔科夫模型HMM详解

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

HMM隐马尔科夫模型及MATLAB实现