本文是我学习李航老师的《统计学习方法》的学习笔记。
概率计算法
计算观测序列概率 P ( O ∣ λ ) P(O|λ) P(O∣λ)的前向与后向算法。
1.直接计算法
给定模型 λ = ( A , B , π ) λ=(A,B,π) λ=(A,B,π)和和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),计算观测序列O出现的概率 P ( O ∣ λ ) P(O|λ) P(O∣λ),最直接的方法就是按概率公式直接计算。通过列举所有可能的长度为T的状态序列 I = ( i 1 , i 2 , . . . , i T ) I=(i_1,i_2,...,i_T) I=(i1,i2,...,iT),对各个状态序列 I I I与观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT)的联合概率 P ( O , I ∣ λ ) P(O,I|λ) P(O,I∣λ),然后对所有可能的状态序列求和,得到 P ( O ∣ λ ) P(O|λ) P(O∣λ).
状态序列
I
=
(
i
1
,
i
2
,
.
.
.
,
i
T
)
I=(i_1,i_2,...,i_T)
I=(i1,i2,...,iT)的概率是:
P
(
I
∣
λ
)
=
π
i
1
a
i
1
i
2
a
i
2
i
3
.
.
.
a
i
T
−
1
i
T
P(I|λ)=π_{i_1}a_{i_1i_2}a_{i_2i_3}...a_{i_{T-1}i_{T}}
P(I∣λ)=πi1ai1i2ai2i3...aiT−1iT
对固定的状态序列
I
=
(
i
1
,
i
2
,
.
.
.
,
i
T
)
I=(i_1,i_2,...,i_T)
I=(i1,i2,...,iT),观测序列
O
=
(
o
1
,
o
2
,
.
.
.
,
o
T
)
O=(o_1,o_2,...,o_T)
O=(o1,o2,...,oT)的概率是:
P
(
O
∣
I
,
λ
)
=
b
i
1
(
o
1
)
b
i
2
(
o
2
)
.
.
.
b
i
T
(
o
T
)
P(O|I,λ)=b_{i_1}(o_1)b_{i_2}(o_2)...b_{i_T}(o_T)
P(O∣I,λ)=bi1(o1)bi2(o2)...biT(oT)
O
O
O和
I
I
I同时出现的概率为
P
(
O
,
I
∣
λ
)
=
P
(
O
∣
I
,
λ
)
P
(
I
∣
λ
)
=
π
i
1
b
i
1
(
o
1
)
a
i
1
i
2
b
i
2
(
o
2
)
.
.
.
a
i
T
−
1
i
T
b
i
T
(
o
T
)
P(O,I|λ)=P(O|I,λ)P(I|λ)= π_{i_1}b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)...a_{i_{T-1}i_{T}}b_{i_T}(o_T)
P(O,I∣λ)=P(O∣I,λ)P(I∣λ)=πi1bi1(o1)ai1i2bi2(o2)...aiT−1iTbiT(oT)
然后,对所有可能的状态序列I求和,得到观测序列O的概率
P
(
O
∣
λ
)
P(O|λ)
P(O∣λ),即
P
(
O
,
I
∣
λ
)
=
∑
I
P
(
O
∣
I
,
λ
)
P
(
I
∣
λ
)
=
∑
i
1
,
i
2
,
.
.
.
,
i
T
π
i
1
b
i
1
(
o
1
)
a
i
1
i
2
b
i
2
(
o
2
)
.
.
.
a
i
T
−
1
i
T
b
i
T
(
o
T
)
P(O,I|λ)=\sum_{I} P(O|I,λ)P(I|λ)=\sum_{i_1,i_2,...,i_T}π_{i_1}b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)...a_{i_{T-1}i_{T}}b_{i_T}(o_T)
P(O,I∣λ)=I∑P(O∣I,λ)P(I∣λ)=i1,i2,...,iT∑πi1bi1(o1)ai1i2bi2(o2)...aiT−1iTbiT(oT)
但是计算量很大,是 O ( T N N ) O(TN^N) O(TNN)阶的,这种算法不可行。