向前向后算法forwardbackwardalgorithm.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
向前向后算法forwardbackwardalgorithm

向前-向后算法(forward-backward algorithm)本文承接上篇博客《隐马尔可夫模型及的评估和解码问题》,用到的概念和例子都是那里面的。学习问题在HMM模型中,已知隐藏状态的集合S,观察值的集合O,以及一个观察序列(o1,o2,...,on),求使得该观察序列出现的可能性最大的模型参数(包括初始状态概率矩阵π,状态转移矩阵A,发射矩阵B)。这正好就是EM算法要求解的问题:已知一系列的观察值X,在隐含变量Y未知的情况下求最佳参数θ*,使得:在中文词性标注里,根据为训练语料,我们观察到了一系列的词(对应EM中的X),如果每个词的词性(即隐藏状态)也是知道的,那它就不需要用EM来求模型参数θ了,因为Y是已知的,不存在隐含变量了。当没有隐含变量时,直接用maximum likelihood就可以把模型参数求出来。预备知识首先你得对下面的公式表示认同。以下都是针对相互独立的事件,P(A,B)=P(B|A)*P(A)P(A,B,C)=P(C)*P(A,B|C)=P(A,C|B)*P(B)=P(B,C|A)*P(A)P(A,B,C,D)=P(D)*P(A,B|D)*P(C|A)=P(D)*P(A,B|D)*P(C|B)P(A,B|C)=P(D1,A,B|C)+P(D2,A,B|C) ? ? D1,D2是事件D的一个全划分理解了上面几个式子,你也就能理解本文中出现的公式是怎么推导出来的了。EM算法求解我们已经知道如果隐含变量Y是已知的,那么求解模型参数直接利用Maximum Likelihood就可以了。EM算法的基本思路是:随机初始化一组参数θ(0),根据后验概率Pr(Y|X;θ)来更新Y的期望E(Y),然后用E(Y)代替Y求出新的模型参数θ(1)。如此迭代直到θ趋于稳定。在HMM问题中,隐含变量自然就是状态变量,要求状态变量的期望值,其实就是求时刻ti观察到xi时处于状态si的概率,为了求此概率,需要用到向前变量和向后变量。向前变量向前变量?是假定的参数它表示t时刻满足状态,且t时刻之前(包括t时刻)满足给定的观测序列的概率。令初始值归纳法计算最后计算复杂度向后变量向后变量? ? ? ? ? ? ? ?它表示在时刻t出现状态,且t时刻以后的观察序列满足的概率。初始值归纳计算E-Step定义变量为t时刻处于状态i,t+1时刻处于状态j的概率。? ? ? ??定义变量表示t时刻呈现状态i的概率。实际上? ?? ??? ???是从其他所有状态转移到状态i的次数的期望值。是从状态i转移出去的次数的期望值。是从状态i转移到状态j的次数的期望值。M-Step是在初始时刻出现状态i的频率的期望值,是从状态i转移到状态j的次数的期望值 ?除以??从状态i转移出去的次数的期望值,是在状态j下观察到活动为k的次数的期望值??除以??从其他所有状态转移到状态j的次数的期望值,?然后用新的参数再来计算向前变量、向后变量、和。如此循环迭代,直到前后两次参数的变化量小于某个值为止。下面给出我的java代码: 1importjava.io.BufferedReader; 2importjava.io.File; 3importjava.io.FileReader; 4importjava.io.IOException; 5importjava.util.Arrays; 6importjava.util.HashMap; 7importjava.util.LinkedList; 8importjava.util.List; 9importjava.util.Map; 10importjava.util.Map.Entry; 11 12/** 13 * 隐马尔可夫模型参数学习。14 *15 * @Author:zhangchaoyang 16 * @Since:2015年4月4日17 * @Version:1.018*/ 19publicclassHmmLearn { 20 21privateintstateCount;// 状态的个数 22private MapString, Integer observeIndexMap = newHashMapString, Integer();// 观察值及其索引编号 23/** 24 * 通过学习得到的模型参数 25*/ 26privatedouble[] stateProb;// 初始状态概率矩阵 27privatedouble[][] stateTrans;// 状态转移矩阵 28privatedouble[][] emission;// 混淆矩阵 29 30private ListString observeSeqs = newLinkedListString();// 训练集中

文档评论(0)

ctuorn0371 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档