李航-HMM-直接计算法

第10章,隐马尔可夫模型(相关的python开源包是hmmlearn)
本章结构:

= { = { ( ) = { B s u m W e l c h = { 隐马尔可夫模型相关内容=\left\{ \begin{aligned} {概率计算方法=\left\{ \begin{aligned} 直接计算法(计算量过大) \\ 前向算法 \\ 后向算法 \end{aligned} \right.} \\ {学习算法=\left\{ \begin{aligned} 监督学习方法 \\ Bsum-Welch算法\\ \end{aligned} \right.} \\ {预测算法=\left\{ \begin{aligned} 近似算法 \\ 维特比算法 \\ \end{aligned} \right.} \end{aligned} \right.

上述的三个小括号分别用来解决隐马尔科夫模型的三个问题:
(1)概率计算问题
(2)学习问题
(3)预测问题

书上的例子为:

|盒子|1 | 2 |3|4|
|–|--|–|--|
|红球数| 5 | 3 | 6 |8|
|白球数| 5 | 7 | 4 |2|
状态集合:
Q={盒子1,盒子2,盒子3,盒子4}

观测集合:
V={红,白}

初始概率分布 π \pi = ( 0.25 , 0.25 , 0.25 , 0.25 ) T (0.25,0.25,0.25,0.25)^T

状态转移概率分布:

A = [ 0 1 0 0 0.4 0 0.6 0 0 0.4 0 0.6 0 0 0.5 0.5 ] A= \begin{bmatrix} 0 & 1 & 0&0 \\ 0.4 & 0 & 0.6&0 \\ 0&0.4&0&0.6\\ 0&0&0.5&0.5 \end{bmatrix}

观测概率:
B = [ 0.5 0.5 0.3 0.7 0.6 0.4 0.8 0.2 ] B= \begin{bmatrix} 0.5 & 0.5\\ 0.3 & 0.7 \\ 0.6&0.4\\ 0.8&0.2 \end{bmatrix}
观测概率矩阵第一列的意思就是每个盒子能观察到多少红色球.

#概率计算问题

10.2.1直接计算法

模型 λ = ( A , B , π ) \lambda=(A,B,\pi)
"想要的"的观测序列: O = ( o 1 , o 2 , , o T ) O=(o_1,o_2,···,o_T)
根据模型判断上述观测序列出现的概率 P ( O λ ) P(O|\lambda)

P ( I λ ) = π i 1 α i 1 i 2 α i 2 i 3 α i T 1 i T P(I|\lambda)=\pi_{i_1}·\alpha_{i_1i_2}·\alpha_{i_2i_3}···\alpha_{i_{T-1}i_T}
这里的 π i 1 \pi_{i_1} 指的是你在"初始概率分布 π \pi "序列中的第 i 1 i_1 个状态.

####然后是书上原话(start)#####################
对于固定的状态序列 I = ( i 1 , i 2 , , i T ) I=(i_1,i_2,···,i_T) ,观测序列 O = ( o 1 , o 2 , , o T ) O=(o_1,o_2,···,o_T) 的概率是
P ( O I , λ ) = b i 1 ( o 1 ) b i 2 ( o 2 ) b i T ( o T ) P(O|I,\lambda)=b_{i_1}(o_1)b_{i_2}(o_2)···b_{i_T}(o_T)

这个说法很拗口,这个"固定的状态序列"是啥意思?
也就是说整个隐马尔科夫转移过程还没发生,自己YY了一个状态转移序列,想知道这种序列发生的可能性.

上面提到的"观测序列"的意思是:我想要的"这个盒子之间跳转来、跳转去的序列I"输入这个模型 λ \lambda 以后,出来我想要的"球颜色序列O"的概率多大
这里的I:input
这里的O:output
#######然后是书上原话(end)###################

O和I同时出现的联合概率是:
P ( O , I λ ) P(O,I|\lambda)
= P ( O I , λ ) P ( I λ ) =P(O|I,\lambda)·P(I|\lambda)
= π 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 ) =\pi_{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 λ ) P(O|\lambda)
P ( O λ ) = I P ( O I , λ ) P ( I λ ) P(O|\lambda)=\sum_{I}P(O|I,\lambda)P(I|\lambda)
= 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 ) =\sum_{i_1,i_2,···,i_T}\pi_{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)

上面的东西呢,没啥用(因为计算复杂度太高),但是呢,还是要缕清楚,因为这样就知道这个"概率计算算法"是干嘛的了,也就是说:
给个模型,输入个序列(盒子状态序列),出来想要的序列(球颜色序列)概率是多少.

为了收拾这个烂摊子呢,出来了"前向算法"和"后向算法",注意,这两个算法和神经网络中的前向传输、后向传输没有任何关系.

#概率计算问题(完)

猜你喜欢

转载自blog.csdn.net/appleyuchi/article/details/85268845
今日推荐