隐含马尔科夫模型
隐含马尔科夫模型的核心思想是一个状态转至另一个状态存在转移概率,并且这种转移概率可以由前一种状态计算出,即任意t时刻的状态sts_tst只和前一个时间(t−1)(t-1)(t−1)的状态st−1s_{t-1}st−1相关。它的结果不适合所有应用,但是在大多数情况下是和正确结果近似的,它在机器学习领域有很广发的应用,如机器翻译、语音识别等
前向算法
前向算法是隐含马尔科夫模型的评估算法,即在已知一个观察序列o1,o2,o3....oTo_1,o_2,o_3....o_To1,o2,o3....oT,和模型μ={A,B,n}的条件下,观察序列o的概率P(o∣μ)P(o|μ)P(o∣μ)
前向向量
前向向量α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∣μ)=π1∗b1(O1)+π2∗b2(O1)+π3∗b3(O1)=α1(1)+α1(2)+α1(3)
$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)∗a11∗b1(O2)
要是从状态2转换过来,概率为:
α1(2)∗a21∗b1(O2)α_1(2)*a_{21}*b_1(O_2)α1(2)∗a21∗b1(O2)
,要是从状态3转换过来,概率为:
α1(3)∗a31∗b1(O2)α_1(3)*a_{31}*b_1(O_2)α1(3)∗a31∗b1(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)∗a11∗b1(O2)+α1(2)∗a21∗b1(O2)+α1(3)∗a31∗b1(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)∗a12∗b1(O2)+α1(2)∗a22∗b1(O2)+α1(3)∗a32∗b1(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)∗a13∗b1(O2)+α1(2)∗a23∗b1(O2)+α1(3)∗a33∗b1(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(i)=πi∗bi(O1),1≤i≤Nα_1(i) = π_i*b_i(O_1), 1≤i≤Nα1(i)=πi∗bi(O1),1≤i≤N 根据初始序列计算第一个时刻的状态概率
- 归纳计算 α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),1≤t≤T+1
- 总纳 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的概率矩阵)
Sunday | Cloudy | Rain | |
---|---|---|---|
Sunday | 0.5 | 0.375 | 0.125 |
Coludy | 0.25 | 0.125 | 0.625 |
Rain | 0.25 | 0.375 | 0.375 |
昨天是晴天,今天是多云的概率为0.375
昨天是多云,今天是晴天的概率为0.25
5.混淆矩阵(海藻湿度和天气的相关性)
Dry | Dryish | Damp | Soggy | |
---|---|---|---|---|
Sunday | 0.6 | 0.2 | 0.15 | 0.05 |
Coludy | 0.25 | 0.25 | 0.25 | 0.25 |
Rain | 0.05 | 0.10 | 0.35 | 0.50 |
今天是晴天,能观测到Dryish的概率为0.2
由马尔科夫模型可知,第二天的状态只和第一天的状态有关,同理第三天的状态只和第二天有关。
所以第一天的海藻湿度为Dry的概率:
P(day1−Sunday)=0.63∗0.6=0.378P(day_1-Sunday) = 0.63*0.6 = 0.378P(day1−Sunday)=0.63∗0.6=0.378(初始状态*混淆状态)
P(day1−Cloudy)=0.17∗0.25=0.0425P(day_1-Cloudy) = 0.17*0.25=0.0425P(day1−Cloudy)=0.17∗0.25=0.0425
P(day1−Rain)=0.2∗0.05=0.01P(day_1-Rain) = 0.2*0.05 = 0.01P(day1−Rain)=0.2∗0.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(day2−Sunday)=(P(day1−Sunday)∗0.5+P(day1−Cloudy)∗0.25+P(day1−Rain)∗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(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(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(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;
最后求第三天的海藻湿度为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(day3−Sunday)=(P(day2−Sunday)∗0.5+P(day2−Cloudy)∗0.25+P(day2−Rain)∗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(day3−Cloudy)=(P(day2−Sunday)∗0.375+P(day2−Cloudy)∗0.125+P(day2−Rain)∗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(day3−Rain)=(P(day2−Sunday)∗0.125+P(day2−Cloudy)∗0.625+P(day2−Rain)∗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(day3−Sunday)+P(day3−Cloudy)+P(day3−Rain)=0.030319
参考:http://blog.youkuaiyun.com/jeiwt/article/details/8076019