HMM预测算法——Viterbi算法

来源:互联网 发布:听音识曲软件 编辑:程序博客网 时间:2024/05/17 04:54
               **HMM预测算法——Viterbi算法**  

HMM是一个生成模型,表示状态序列和观测序列的联合分布,但是状态序是隐藏的,不可观测的。
Viterbi算法实际上用动态规划(dynamic programming)求HMM预测问题,用DP求概率最大路径,即寻找满足观测序列意义上最优隐含的状态序列。
(一)Viterbi算法可以分为两步:
第一步:从t=1开始,依次找到t=(1,2,,,T)时刻状态为i的各路径的最大概率。当t=T时,就可以得到最优路径的概率P*(t=T的最大概率)及其终结点;
第二步:从开始,由后向前逐步回溯求得结点,得到最优路径。
(二)Viterbi算法重要步骤详解
首先定义两个变量 这里写图片描述这里写图片描述(分别读“德尔塔”、“可赛”)。表示在观测时刻t状态为i的所以单个路径中概率最大值
这里写图片描述
定义在t时刻状态为i的所以单个路径中概率最大的路径的第t-1个结点。表示的是一个由其上一次状态值产生的状态。

定义为所以路径中对应的最大终结点的值,即最大的那个状态值

下面贴上维特比算法(来自李航教授的《统计学习方法》)
(三)Viterbi算法
这里写图片描述
(四)Viterbi算法R语言中简单例子
因为我都是基于R来作数据分析的,所以简单的在R里面学习下Viterbi算法,可以在RStudio中利用“F1”和“F2”的帮助文档和源码更进来快速学习。

# Initialise HMMhmm = initHMM(c("A","B"), c("L","R"), transProbs=matrix(c(.6,.4,.4,.6),2),              emissionProbs=matrix(c(.6,.4,.4,.6),2))print(hmm)# Sequence of observationsobservations = c("L","L","R","R")# Calculate Viterbi pathviterbi = viterbi(hmm,observations)print(viterbi)

(五)扩展思考
1、HMM中计算概率问题与Viterbi中的递推关系式很类似,他们有联系吗?
2、HMM与CRF条件随机场,最大熵模型之间的关系。
3、概率上下文无关文法是HMM的进一步扩展。
(六)学习总结
学习的目的不仅仅只是掌握了Viterbi这个算法,更应该通过该算法去理解算法在模型中的运用的方法和设计的思想,学会在类似的问题上举一反三。下面是我对这块的知识小总结,也是我的小心得,希望能得到前辈们的批评和指导。
1、HMM的3个基本问题总结
概率计算问题
直接计算法、向前-向后算法
学习问题
监督学习(极大似然估计)、非监督学习(Baum-Welch或EM算法)
预测问题
近似算法、Viterbi算法
2、学习算法和模型没有什么捷径,见到公式就拿笔推推,见到算法就上机运行,然后真正的应用到应用问题中(这你才可以说,这玩意你理解了,至于能不能更深入前移学习,那需要下更多的功夫)。
3、DP和贪心算法在最优解问题上的异同,在理解DP中的递推表达式中,其中的回溯具体是怎样查找路径的,不能就只是看着牛人的成果自我感觉会了。

参考文献
[1] 悉尼科大徐亦达博士的机器学习公开课中关于HMM的部分
[2] 李航教授的《统计学习方法》第十章
[3] 《7月算法》里周博老师机器学习视频讲解

2 0
原创粉丝点击