HMM算法-求观测序列出现的几率

学习HMM的一些简单总结,具体的内容和推导能够去参考《条件随机场理论综述》,写的很是好。算法

1,离散马尔科夫过程编程

时间和状态都是离散变量,且当前所处的状态只与它以前的一个状态有关(马尔科夫性),这种随机过程即为马尔科夫过程。学习

2,HMM的五个要素spa

HMM能够用一个五元组表示:\(\lambda= (S,K,A,B,\pi)  \)。其中S为状态集合,K为观察集合,A为转移矩阵,B为观察几率矩阵,\(\pi\)为初始状态分布。3d

3,HMM的三个假设blog

(1)t时刻的状态只依赖于t-1时刻qt

(2)t时刻的观测值Ot只依赖于t时刻的状态qt变量

(3)状态与具体时间无关,即转移几率是独立于时间的lambda

4,HMM的三个基本问题im

(1)给定模型,若是和求观测序列o1,o2...ot出现的几率\(P(O|\lambda)\)

(2)给定模型和观测序列,如何找到产生这一序列几率最大的状态序列Q

(3)给定模型和观测序列,如何调整模型的参数,使得产生观测序列的几率最大

5,forward-backward算法

本篇文章总结一下如何解决第一个问题?给定一个观测序列o1,o2,o3..ot,它产生的几率是什么?一个最直接的思路就是把全部可能产生这个序列的状态序列穷举出来,这样天然序列o1o2...on的几率也出来了,可是这样作天然是不行的,由于时间复杂度过高了。。那怎么作呢?forward-backford算法,这实际上是一种动态规划算法,创建在节点与以前以后节点的关系上。

定义forward变量:

\(\alpha_t(i)=P(O_1O_2O_t,q_t=s_i|\lambda)\)

这是部分观测序列与t时刻状态\(s_i\)的联合分布。如何从\(\alpha_t(i)\)推导出\(\alpha_{t+1}(j)\)呢?

 

 虽然推导的过程很复杂,可是\(\alpha_j(t+1)=[\sum_{i=1}^{N}\alpha_i(t)a_{ij}]b_j(O_{t+1})\)确不难理解。t+1时刻的状态j能够从t时刻的任意状态转移而来,因此就有了前半部分的加和\(\sum_{i=1}^{N}\alpha_i(t)a_{ij}\),而后再乘以第二部分的发射几率\(b_j(O_{t+1})\)。

从而也容易推出总体序列O的几率\(P(O|\lambda)=\sum_{i=1}^{N}\alpha_T(i)\)

相似forward变量的定义,backforward变量\(\beta_i(t)\)定义以下:\(\beta_i(t)=P(O_{t+1}...O_T|q_t=s_i,\lambda)\)。这个是部分序列\(O_{t+1}\)到OT,在t时刻状态为i时的条件几率,还记的吗?forword变量是联合几率。一样,也能够获得\(\beta_i(t)\)与\(\beta_{j}(t+1)\)的关系。

 \(P(O|\lambda)\)能够用forward变量和backword变量共同表示:

\(P(O|\lambda) = \sum_{i}^{N}P(q_t=s_i,O|\lambda)\)

而 \(P(q_t=s_i,O|\lambda)=P(O|q_t=s_i,\lambda)P(q_t=s_i|\lambda)\)

\(=P(O_1O_2...O_t...O_T|q_t=s_i,\lambda)P(q_t=s_i|\lambda)\)

\(=P(O_1O_2...O_t|q_t=s_i,\lambda)P(O_{t+1}...O_T|q_t=s_j,\lambda)P(q_t=s_i|\lambda)\)

\(=P(O_1O_2...O_t,q_t=s_j|\lambda)P(O_{t+1}...O_T|q_t=s_j,\lambda)\)

\(=\alpha_i(t)\beta_i(t)\)

因此

\(P(O|\lambda) = \sum_{i}^{N}P(q_t=s_i,O|\lambda)=\sum_{i=1}^{N}\alpha_i(t)\beta_i(t)\)

看来要想求\(P(O|\lambda)\)能够从任何一个t点出发。 

实际问题

编程求解

相关文章
相关标签/搜索