隐含马尔科夫模型-前向算法

隐含马尔科夫模型

隐含马尔科夫模型的核心思想是一个状态转至另一个状态存在转移概率,并且这种转移概率可以由前一种状态计算出,即任意t时刻的状态sts_tst只和前一个时间(t−1)(t-1)(t1)的状态st−1s_{t-1}st1相关。它的结果不适合所有应用,但是在大多数情况下是和正确结果近似的,它在机器学习领域有很广发的应用,如机器翻译、语音识别等

前向算法

前向算法是隐含马尔科夫模型的评估算法,即在已知一个观察序列o1,o2,o3....oTo_1,o_2,o_3....o_To1,o2,o3....oT,和模型μ={A,B,n}的条件下,观察序列o的概率P(o∣μ)P(o|μ)P(oμ)

![这里写图片描述](https://img-blog.csdnimg.cn/img_convert/d39b6d0a25976c452028f6b0c22d2586.png)
如果穷尽所有的组合,$S_1,S_2...S_T$,则T时刻有T个状态,共有可能组合$T^T$种,时间复杂度就为$o(n^T)$,这样就会造成指数爆炸情况,为解决这一问题,Baum提出了前向算法。

前向向量

前向向量αt(i)α_t(i)αt(i)指在t时刻,HMM输出序列o1,o2,o3.....oto_1,o_2,o_3.....o_to1,o2,o3.....ot的概率。
当T=1时,输出序列为o1o_1o1,则概率为P(o1∣μ)P(o_1|μ)P(o1μ),假设有三个状态(如下图)1、2、3,输出序列为o1o_1o1,有三种可能一是状态1发出,二是从状态2发出,三是从状态3发出。另外从状态1发出观察值o1o_1o1得概率为b1(o1)b_1(o_1)b1(o1),从状态2发出观察值得概率为b2(o1)b_2(o_1)b2(o1),从状态3发出观察值o1o_1o1得概率为b3(o1)b_3(o_1)b3(o1)。因此可以算出
P(O1∣μ)=π1∗b1(O1)+π2∗b2(O1)+π3∗b3(O1)=α1(1)+α1(2)+α1(3) P(O_1|μ)= π_1*b_1(O_1)+π_2*b_2(O_1) + π_3*b_3(O_1)= α_1(1) + α_1(2) + α_1(3)P(O1μ=π1b1(O1)+π2b2(O1)+π3b3(O1)=α1(1)+α1(2)+α1(3)

![这里写图片描述](https://img-blog.csdnimg.cn/img_convert/1726215f0ced6953622bc653074b3590.png)
当T=2时,输出序列为 $O_1O_2$ ,此时计算概率为

$P(O1O2∣μ)P(O_1O_2|μ)P(O1O2μ)

:假设有三个状态(如下图)1、2、3,输出序列为O1O_1O1,有三种可能一是状态1发出,二是从状态2发出,三是从状态3发出。另外从状态1发出观察值O2O_2O2得概率为b1(O2)b_1(O_2)b1(O2),从状态2发出观察值O2O_2O2得概率为b2(O2)b_2(O_2)b2(O2),从状态3发出观察值 O2O_2O2 得概率为: b3(O2)b_3(O_2)b3(O2) 。要是从状态1发出观察值 O2O_2O2 ,可能从第一时刻的1、2或3状态装换过来,
要是从状态1转换过来,概率为:

α1(1)∗a11∗b1(O2)α_1(1)*a_{11}*b_1(O_2)α1(1)a11b1(O2)

要是从状态2转换过来,概率为:
α1(2)∗a21∗b1(O2)α_1(2)*a_{21}*b_1(O_2)α1(2)a21b1(O2)

,要是从状态3转换过来,概率为:
α1(3)∗a31∗b1(O2)α_1(3)*a_{31}*b_1(O_2)α1(3)a31b1(O2)

因此
P(O1O2,q2=s1∣μ)=α1(1)∗a11∗b1(O2)+α1(2)∗a21∗b1(O2)+α1(3)∗a31∗b1(O2)=α2(1)P(O_1O_2,q_2=s1|μ)= α_1(1)*a_{11}*b_1(O_2) + α_1(2)*a_{21}*b_1(O_2) + α_1(3)*a_{31}*b_1(O_2)=α_2(1)P(O1O2,q2=s1μ=α1(1)a11b1(O2)+α1(2)a21b1(O2)+α1(3)a31b1(O2)=α2(1)

同理:P(O1O2,q2=s2∣μ)=α1(1)∗a12∗b1(O2)+α1(2)∗a22∗b1(O2)+α1(3)∗a32∗b1(O2)=α2(2)P(O_1O_2,q_2=s2|μ)= α_1(1)*a_{12}*b_1(O_2) + α_1(2)*a_{22}*b_1(O_2) + α_1(3)*a_{32}*b_1(O_2)=α_2(2)P(O1O2,q2=s2μ=α1(1)a12b1(O2)+α1(2)a22b1(O2)+α1(3)a32b1(O2)=α2(2)
P(O1O2,q2=s3∣μ)=α1(1)∗a13∗b1(O2)+α1(2)∗a23∗b1(O2)+α1(3)∗a33∗b1(O2)=α2(3)P(O_1O_2,q_2=s3|μ)= α_1(1)*a_{13}*b_1(O_2) + α_1(2)*a_{23}*b_1(O_2) + α_1(3)*a_{33}*b_1(O_2)=α_2(3)P(O1O2,q2=s3μ=α1(1)a13b1(O2)+α1(2)a23b1(O2)+α1(3)a33b1(O2)=α2(3)

所以:P(O1O2∣μ)=P(O1O2,q2=s1∣μ)+P(O1O2,q2=s2∣μ)+P(O1O2,q2=s3∣μ)=α2(1)+α2(2)+α2(3)P(O_1O_2|μ)=P(O_1O_2,q2=s1|μ)+ P(O_1O_2,q2=s2|μ)+ P(O_1O_2,q2=s3|μ)=α2(1) + α2(2) + α2(3)P(O1O2μ=P(O1O2,q2=s1μ+P(O1O2,q2=s2μ+P(O1O2,q2=s3μ=α2(1)+α2(2)+α2(3)

以此类推
前向算法的整个过程:

  1. 初始化:α1(i)=πi∗bi(O1),1≤i≤Nα_1(i) = π_i*b_i(O_1), 1≤i≤Nα1(i)=πibi(O1),1iN 根据初始序列计算第一个时刻的状态概率
  2. 归纳计算 αt+1=(∑i=1Nαt(i)aij)bj(Ot+1),1≤t≤T+1α_{t+1}=(\sum_{i=1}^Nα_t(i)a_{ij})b_j(O_{t+1}),1 \leq t \leq {T+1}αt+1=(i=1Nαt(i)aij)bj(Ot+1),1tT+1
  3. 总纳 P(O∣μ)=∑i=1Nαt(i)P(O|μ)=\sum_{i=1}^Nα_t(i)P(Oμ)=i=1Nαt(i)

参考:www.cnblogs.com/kaituorensheng/archive/2012/12/01/2797230.html

实例分析

题目

假设连续观察3天的海藻湿度为(Dry,Damp, Soggy),求出该观察序列的概率
已知序列:
1. 天气(Sunday、cloudy、rain),四类海藻湿度(Dry,Dryish, Damp, Soggy )
2. 观察状态(结果)序列(Dry,Damp, Soggy)
3. 初始状态序列:Sunny(0.63), Cloudy(0.17),Rainy(0.20);
4. 状态转移矩阵(A->B的概率矩阵)

SundayCloudyRain
Sunday0.50.3750.125
Coludy0.250.1250.625
Rain0.250.3750.375

昨天是晴天,今天是多云的概率为0.375
昨天是多云,今天是晴天的概率为0.25

5.混淆矩阵(海藻湿度和天气的相关性)

DryDryishDampSoggy
Sunday0.60.20.150.05
Coludy0.250.250.250.25
Rain0.050.100.350.50

今天是晴天,能观测到Dryish的概率为0.2

由马尔科夫模型可知,第二天的状态只和第一天的状态有关,同理第三天的状态只和第二天有关。
所以第一天的海藻湿度为Dry的概率:
P(day1−Sunday)=0.63∗0.6=0.378P(day_1-Sunday) = 0.63*0.6 = 0.378P(day1Sunday)=0.630.6=0.378(初始状态*混淆状态)
P(day1−Cloudy)=0.17∗0.25=0.0425P(day_1-Cloudy) = 0.17*0.25=0.0425P(day1Cloudy)=0.170.25=0.0425
P(day1−Rain)=0.2∗0.05=0.01P(day_1-Rain) = 0.2*0.05 = 0.01P(day1Rain)=0.20.05=0.01

继续求第二天的海藻湿度为Damp的概率:
P(day2−Sunday)=(P(day1−Sunday)∗0.5+P(day1−Cloudy)∗0.25+P(day1−Rain)∗0.25)∗0.15=0.03031875P(day_2-Sunday)=(P(day_1-Sunday)*0.5+P(day_1-Cloudy)*0.25+P(day_1-Rain)*0.25)*0.15 = 0.03031875P(day2Sunday)=(P(day1Sunday)0.5+P(day1Cloudy)0.25+P(day1Rain)0.25)0.15=0.03031875
     (ps:最后乘上湿度和天气的关联性)
P(day2−Cloudy)=(P(day1−Sunday)∗0.375+P(day1−Cloudy)∗0.125+P(day1−Rain)∗0.375)∗0.25=0.01336018281250×0.25=0.0033400457031250;P(day_2-Cloudy)=(P(day_1-Sunday)*0.375+P(day_1-Cloudy)*0.125+P(day_1-Rain)*0.375)*0.25=0.01336018281250 × 0.25 = 0.0033400457031250;P(day2Cloudy)=(P(day1Sunday)0.375+P(day1Cloudy)0.125+P(day1Rain)0.375)0.25=0.01336018281250×0.25=0.0033400457031250
P(day2−Rain)=(P(day1−Sunday)∗0.125+P(day1−Cloudy)∗0.625+P(day1−Rain)∗0.375)∗0.35=0.0304703171594726562500×0.35=0.010664611005815429687500;P(day_2-Rain)=(P(day_1-Sunday)*0.125+P(day_1-Cloudy)*0.625+P(day_1-Rain)*0.375)*0.35=0.0304703171594726562500 × 0.35 = 0.010664611005815429687500;P(day2Rain)=(P(day1Sunday)0.125+P(day1Cloudy)0.625+P(day1Rain)0.375)0.35=0.0304703171594726562500×0.35=0.010664611005815429687500

最后求第三天的海藻湿度为Soggy的概率:
P(day3−Sunday)=(P(day2−Sunday)∗0.5+P(day2−Cloudy)∗0.25+P(day2−Rain)∗0.25)∗0.05P(day_3-Sunday)=(P(day_2-Sunday)*0.5+P(day_2-Cloudy)*0.25+P(day_2-Rain)*0.25)*0.05P(day3Sunday)=(P(day2Sunday)0.5+P(day2Cloudy)0.25+P(day2Rain)0.25)0.05

P(day3−Cloudy)=(P(day2−Sunday)∗0.375+P(day2−Cloudy)∗0.125+P(day2−Rain)∗0.375)∗0.25P(day_3-Cloudy)=(P(day_2-Sunday)*0.375+P(day_2-Cloudy)*0.125+P(day_2-Rain)*0.375)*0.25P(day3Cloudy)=(P(day2Sunday)0.375+P(day2Cloudy)0.125+P(day2Rain)0.375)0.25

P(day3−Rain)=(P(day2−Sunday)∗0.125+P(day2−Cloudy)∗0.625+P(day2−Rain)∗0.375)∗0.50P(day_3-Rain)=(P(day_2-Sunday)*0.125+P(day_2-Cloudy)*0.625+P(day_2-Rain)*0.375)*0.50P(day3Rain)=(P(day2Sunday)0.125+P(day2Cloudy)0.625+P(day2Rain)0.375)0.50

所以三天呈现得到海藻状态序列为(Dry,Damp, Soggy)的概率:
P=P(day3−Sunday)+P(day3−Cloudy)+P(day3−Rain)=0.030319P = P(day_3-Sunday)+P(day_3-Cloudy)+P(day_3-Rain) =0.030319P=P(day3Sunday)+P(day3Cloudy)+P(day3Rain)=0.030319

参考:http://blog.youkuaiyun.com/jeiwt/article/details/8076019

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值