HMM基础-HMM训练-前向后向算法
来源:互联网 发布:js 时间轴 编辑:程序博客网 时间:2024/05/23 20:23
HMM中第三个问题就是如何进行对HMM进行训练A和B
本章主要通过前向-后向(forward-backward)算法或者叫Baum-Welch算法来主要讲解如何对矩阵A和B进行训练
HMM训练描述为:
给定HMM状态集合,和一系列观测序列,如何对A和B进行训练。
符号C(i→j) 记做从状态i转移到状态j的个数,则转移矩阵为:
其中Q为状态集合。
符号β记做后项概率,表示:给定λ,和t时刻状态在j情况下,看到观测序列Ot+1 ...OT的概率
即:
类似前向算法,后向算法可以描述如下:
1.初始化:
2.递归计算:
3.终止:
其后向递归过程如下所示:
符号ξ记做:给定观测序列情况下,t时刻状态为i,t+1时刻状态为j的概率,描述为:
因为:
所以:把X看成qt=i,qt+1=j ,把Y看成O,Z看成λ,则:
其中上式分子符号not-quite-ξ记做:
展开not-quite-ξ可得:
图下图所示:
ξ分母P(O|λ)为:
把分子not-quite-ξ和分母P(O|λ)带入到ξ中,最后可得:
把ξ带入最上面提到C(i->j)中可得aˆij :
根据a来计算ξ的过程为E-step,根据ξ来算a的过程为M-step,E-step和M-step构成了forward-backward算法的过程
以上就是求矩阵A的前向后项算法(forward-backward)的过程。
同样,我们来求矩阵B。
符号γ记做:给定观测序列,t时刻在状态j的概率,数学表示为:
形象的描述如下图所示:
更形象的说γ也叫作状态占用概率(state occupation probabilities )或占有个数(occupation counts )
数学展开,可得:
继续展开,可得:(E-step)
为了计算b,分子为:观测值O为vk ,所有时间上γ相加的和,分母上为,所有时间上γ相加的和
即(M-step):
以上为计算矩阵B的前向后向(forward-backward)计算过程
综上所述,总结如下:
以上为训练HMM矩阵A和B的过程.
实际中,HMM中状态j的发射概率密度函数bj(x)用GMM建模,那么
对应的均值,方差为:
对应的状态转移概率为:
公式推导详细参见:
http://blog.csdn.net/duishengchen/article/details/40113919
http://www.cnblogs.com/xingshansi/p/6584555.html
- HMM基础-HMM训练-前向后向算法
- HMM-前向后向算法
- HMM——前向后向算法
- HMM之前向后向算法
- hmm-前向算法
- hmm-前向算法
- HMM 自学教程(七)前向后向算法
- HMM前向算法,维比特算法,后向算法,前向后向算法代码
- HMM(利用前向后向求概率)
- HMM:前向算法实例
- HMM基础理论-前向算法
- 机器学习笔记(十四)——HMM估计问题和前向后向算法
- 隐马尔可夫模型(HMM)的MATLAB实现——前向后向算法
- HMM-信道模型&前向算法
- HMM:隐马尔科夫模型-前向算法
- HMM前向算法复杂度的分析
- Baumwelch 算法训练HMM
- HMM——前向算法与后向算法
- find_literal.sql
- spring mybates 自增字段返回id
- android学习记录(一)
- Rocketmq整体分析
- 封锁阳光大学
- HMM基础-HMM训练-前向后向算法
- Java面试题系列(1)sql第一题
- HTML5 使用 sessionStorage 进行页面传值
- leetcode419 Battlesships In A Board JAVA
- java字符编码
- thrift的lua实现
- poj Anniversary party(树形dp入门)
- Java异常处理
- boost::shared_ptr