




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
隐马尔可夫模型中的Viterbi算法先用一句话来简单描述一下:给出一个观测序列o1,o2,o3 .,我们希望找到观测序列背后的隐藏状态序列s1, s2, s3, .;Viterbi以它的发明者名字命名,正是这样一种由动态规划的方法来寻找出现概率最大的隐藏状态序列(被称为Viterbi路径)的算法。这里需要抄一点有关隐马可夫序列(HMM,Hidden Markov Model)的书页来解释一下观测序列和隐藏状态序列。首先从最简单的离散Markov过程入手,我们知道,Markov随机过程具有如下的性质:在任意时刻,从当前状态转移到下一个状态的概率与当前状态之前的那些状态没有关系。所以,我们可以用一个状态转移概率矩阵来描述它。假设我们有n个离散状态S1, S2,Sn,我们可以构造一个矩阵A,矩阵中的元素aij表示从当前状态Si下一时刻迁移到Sj状态的概率。但是在很多情况下,Markov模型中的状态是我们观察不到的。例如,容器与彩球的模型:有若干个容器,每个容器中按已知比例放入各色的彩球(这样,选择了容器后,我们可以用概率来预测取出各种彩球的可能性);我们做这样的实验,实验者从容器中取彩球先选择一个容器,再从中抓出某一个球,只给观察者看球的颜色;这样,每次取取出的球的颜色是可以观测到的,即o1, o2,,但是每次选择哪个容器是不暴露给观察者的,容器的序列就组成了隐藏状态序列S1, S2,Sn。这是一个典型的可以用HMM描述的实验。HMM有几个重要的任务,其中之一就是期望通过观察序列来猜测背后最有可能的隐藏序列。在上面的例子中,就是找到我们在实验中最有可能选择到的容器序列。Viterbi正是用来解决这个问题的算法。HMM另外两个任务是:a) 给定一个HMM,计算一个观测序列出现的可能性;b)已知一个观测序列,HMM参数不定,如何优化这些参数使得观测序列的出现概率最大。解决前一个问题可以用与Viberbi结构非常类似的Forward算法来解决(实际上在下面合二为一),而后者可以用Baum-Welch/EM算法来迭代逼近。从Wiki上抄一个例子来说明Viterbi算法。假设你有一个朋友在外地,每天你可以通过电话来了解他每天的活动。他每天只会做三种活动之一Walk, Shop, Clean。你的朋友从事哪一种活动的概率与当地的气候有关,这里,我们只考虑两种天气Rainy, Sunny。我们知道,天气与运动的关系如下:RainySunnyWalk0.10.6Shop0.40.3Clean0.50.1例如,在下雨天出去散步的可能性是0.1。而天气之前互相转换的关系如下,(从行到列)RainySunnyRainy0.70.3Sunny0.40.6例如,从今天是晴天而明天就开始下雨的可能性是0.4 。同时为了求解问题我们假设初始情况:通话开始的第一天的天气有0.6的概率是Rainy,有0.4概率是Sunny。OK,现在的问题是,如果连续三天,你发现你的朋友的活动是:Walk-Shop-Clean;那么,如何判断你朋友那里这几天的天气是怎样的?解决这个问题的python伪代码如下:def forward_viterbi(y, X, sp, tp, ep): T = for state in X: # prob. V. path V. prob. Tstate = (spstate, state, spstate) for output in y: U = for next_state in X: total = 0 argmax = None valmax = 0 for source_state in X: (prob, v_path, v_prob) = Tsource_state p = epsource_stateoutput * tpsource_statenext_state prob *= p v_prob *= p total += prob if v_prob valmax: argmax = v_path + next_state valmax = v_prob Unext_state = (total, argmax, valmax) T = U # apply sum/max to the final states: total = 0 argmax = None valmax = 0 for state in X: (prob, v_path, v_prob) = Tstate total += prob if v_prob valmax: argmax = v_path valmax = v_prob return (total, argmax, valmax)几点说明:1、算法对于每一个状态要记录一个三元组:(prob, v_path, v_prob),其中,prob是从开始状态到当前状态所有路径(不仅仅 是最有可能的viterbi路径)的概率加在一起的结果(作为算法附产品,它可以输出一个观察序列在给定HMM下总的出现概率,即forward算法的输出),v_path是从开始状态一直到当前状态的viterbi路径,v_prob则是该路径的概率。 2、算法开始,初始化T (T是一个Map,将每一种可能状态映射到上面所说的三元组上) 3、三重循环,对每个一活动y,考虑下一步每一个可能的状态next_state,并重新计算若从T中的当前状态state跃迁到next_state概率会有怎样的变化。跃迁主要考虑天气转移(tpsource_statenext_state)与该天气下从事某种活动(epsource_stateoutput)的联合概率。所有下一步状态考虑完后,要从T中找出最优的选择viterbi路径即概率最大的viterbi路径,即上面更新Map U的代码Unext_state = (total, argmax, valmax)。 4、算法最后还要对T中的各种情况总结,对total求和,选择其中一条作为最优的viterbi路径。 5、算法输出四个天气状态,这是因为,计算第三天的概率时,要考虑天气转变到下一天的情况。 6、通过程序的输出可以帮助理解这一过程: observation=Walk next_state=Sunny state=Sunny p=0.36 triple=(0.144,Sunny-,0.144) state=Rainy p=0.03 triple=(0.018,Rainy-,0.018) Update USunny=(0.162,Sunny-Sunny-,0.144) next_state=Rainy state=Sunny p=0.24 triple=(0.096,Sunny-,0.096) state=Rainy p=0.07 triple=(0.042,Rainy-,0.042) Update URainy=(0.138,Sunny-Rainy-,0.096)observation=Shop next_state=Sunny state=Sunny p=0.18 triple=(0.02916,Sunny-Sunny-,0.02592) state=Rainy p=0.12 triple=(0.01656,Sunny-Rainy-,0.01152) Update USunny=(0.04572,Sunny-Sunny-Sunny-,0.02592) next_state=Rainy state=Sunny p=0.12 triple=(0.01944,Sunny-Sunny-,0.01728) state=Rainy p=0.28 triple=(0.03864,Sunny-Rainy-,0.02688) Update URainy=(0.05808,Sunny-Rainy-Rainy-,0.02688)observation=Clean next_state=Sunny state=Sunny p=0.06 triple=(0.0027432,Sunny-Sunny-Sunny-,0.0015552) state=Rainy p=0.15 triple=(0.008712,Sunny-Rainy-Rainy-,0.004032) Update USunny=(0.0114552,Sunny-Rainy-Rainy-Sunny-,0.004032) next_state=Rainy state=Sunny p=0.04 triple=(0.0018288,Sunny-Sunny-Sunny-,0.0010368) state=Rainy p=0.35 triple=(0.020328,Sunny-Rainy-Rainy-,0.009408) Update URainy=(0.0221568,Sunny-Rainy-Rainy-Rainy-,0.009408)final triple=(0.033612,Sunny-Rainy-Rainy-Rainy-,0.009408)所以,最终的结果是,朋友那边这几天最可能的天气情况是Sunny-Rainy-Rainy-Rainy,它有0.009408的概率出现。而我们算法的另一个附带的结论是,我们所观察到的朋友这几天的活动序列:Walk-Shop-Clean在我们的隐马可夫模型之下出现的总概率是0.033612。附:c+主要代码片断void forward_viterbi(const vector & ob, viterbi_triple_t & vtriple). /alias map& sp = start_prob; mapstring, map & tp = transition_prob; mapstring, map & ep = emission_prob; / initialization InitParameters(); map T; for (vector:iterator it = states.begin(); it != states.end(); +it) . viterbi_triple_t foo; b = sp*it; foo.vpath.push_back(*it); foo.vprob = sp*it; T*it = foo; map U; double total = 0; vector argmax; double valmax = 0; double p = 0; for (vector:const_iterator itob = ob.begin(); itob != ob.end(); +itob) . cout observation= *itob endl; U.clear(); for (vector:iterator itNextState = states.begin(); itNextState != states.end(); +itNextState) . cout next_state= *itNextState endl; total = 0; argmax.clear(); valmax = 0; for (vector:iterator itSrcState = states.begin(); itSrcState != states.end(); +itSrcState) . cout state= *itSrcState endl; viterbi_triple_t foo = T*itSrcState; p = ep*itSrcState*itob * tp*itSrcState*itNextState; cout p= p endl; b *= p; foo.vprob *= p; cout triple= foo valmax) . foo.vpath.push_back(*itNextState); argmax = foo.vpath; valmax = foo.vprob; U*itNextState = viterbi_triple_t(total, argmax, valmax); cout Update U *itNextState = U*itNextState endl; T.swap(U); total = 0; argmax.clear(); valmax = 0; for (vector:iterator itState = st
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生药学试题及答案填空题
- 数字安全环境下国家安全威胁的多维度评估方法-洞察及研究
- 高频接地施工合同范本(3篇)
- 高空作业施工拆卸合同(3篇)
- 宠物领养与送养双方权益保障协议书
- 时尚街区品牌店面转租合作协议范本
- 自动驾驶汽车与移动应用的深度协同-洞察及研究
- 城市轨道交通材料运输及进度控制合同
- 高效个人购房贷款及专业担保服务合同
- 国际工程项目承包与咨询服务合同
- 档案公司借阅管理制度
- 药店医保考试试题及答案
- 2025年中考历史总复习中国古代史专题复习资料
- 单用途卡资金管理制度
- 雾化吸入治疗护理常规
- 全友家居加盟合同范本
- 地理-法国课件-2024-2025学年湘教版地理七年级下册
- 国际贸易学(第五版)课后题参考答案 金泽虎
- 2025年全国成人高考语文试题及答案
- 【镇江】2025年江苏镇江市高等专科学校公开招聘工作人员5人笔试历年典型考题及考点剖析附带答案详解
- 员工社保补贴合同协议
评论
0/150
提交评论