前面一篇介绍了隐马尔科夫模型的基本的一些概念,篇主要介绍三个问题的具体解决方法。如果对于概念不太理解的可以参考前一篇博客HMM模型基本概念,本篇博客主要介绍对于三个问题的主要推倒,内容主要基于统计学习方法这本书,但是在上面加上了一些自己的理解。下面一一介绍三个问题以及解决的办法。
概率问题
给定模型λ=(A,B,π)λ=(A,B,π)。
直接计算法
直接计算法说白了就是暴力计算每一种情况的可能。对于所有可能的状态序列II,即:
这种计算的缺点在于计算量很大,时间复杂度为O(TNT)O(TNT)。
前向后向算法
前向后向算法的核心是利用动态规划的思想减少计算的时间复杂度。
图1
前向算法
前向概率 给定隐马尔可夫模型λλ的概率为前向概率,记作
然后可以递推求出前向概率αt(i)αt(i)
盒子 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
红球数 | 5 | 3 | 6 | 8 |
白球数 | 5 | 7 | 4 | 2 |
那么这个前向概率到底是什么意思呢?估计好多人还是看的一脸懵逼。还是以之前的盒子与球模型,观测序列为O={红,红,白,白,红}O={红,红,白,白,红}。即前面观测序列为[红,红,白],第三次丑的白色球是从盒子1中抽出的概率。
下面是对前向算法的形式化推导。
输入:隐马尔科夫模型λλ;
输出:观测序列概率P(O|λ)P(O|λ);
1.初值
即求第一个观测值对应的状态为ii的概率
2.递推,对t=1,2,…,T-1,
3.终止
上面这段公式推导的思想为,先求观测值为o1o1求和就能够得到上述(3)式。其递推过程图如下:
图2
前向算法就是利用这种方式将时间复杂度从O(TNT)O(TNT),至于降低的原因是减少直接利用了前面的计算结果,避免了每一次都需要重新计算。
还是以盒子与球模型为例,λ=(A,B,π)λ=(A,B,π).
设T=3T=3
1.计算初值
2.递推计算
同理可以得到
3.终止
前向算法清楚了,其实后向概率也就清楚了。其本质就是和前向算法的思想是一样的,只不过方向相反,从后往前计算。以下图为例,先计算的是qtqt的概率,以此类推。下面直接给出定义以及推导。
后向算法
后向概率的概率为后向概率,记作