10_隐马尔科夫模型HMM1_统计学习方法
文章目录
- 一、几个基本概念
- 1、隐马尔可夫模型
- 2、马尔科夫链
- 3、随机过程
- 4、马尔科夫性质
- 二、隐马尔科夫模型
- 1、隐马尔科夫模型的引入
- 2、隐马尔科夫模型定义
- 3、隐马尔科夫模型的两个假设
- 4、观测序列的生成过程
- 5、隐马尔科夫模型的3个基本问题
- 三、概率计算算法
- 1、直接计算法
- 2、前向算法
- 3、后向算法
- 4、一些概率与期望值的计算
- (1)单个状态概率
- (2)两个状态的联合概率
- (3)一些期望
- 四、学习算法
- 五、预测算法
隐马尔科夫模型内容较多,方便阅读,分成2个部分
下接:10_隐马尔科夫模型HMM2_统计学习方法
一、几个基本概念
1、隐马尔可夫模型
隐马尔科夫模型(hidden Markov model,HMM)是关于时序的概率模型,描述由一个隐藏的马尔科夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。
2、马尔科夫链
马尔科夫链,因安德烈·马尔科夫(A.A.Markov,1856-1922)得名,是指数学中具有马尔科夫性质的离散随机过程。
简单实例:
3、随机过程
(1)随机过程是一个时间函数,其随着时间变化而变化;
(2)随机过程的每个时刻上函数值是不确定的、随机的,即每个时刻上函数值按照一定的概率进行分布。
4、马尔科夫性质
每个状态的转移只依赖于之前的n个状态,这个过程被称为一个n阶的模型,其中n是影响转移状态的数目。最简单的马尔科夫链就是一阶过程,每一个状态的转移只依赖于其之前的那一个状态,接下来以讨论一阶马尔科夫过程为主。用数学表达式表示:
P(it+1=qy∣it=qx,it−1=qk,…)=P(it+1=qy∣it=qx)P(i_{t+1}=q_y|i_{t}=q_x,i_{t-1}=q_k,…)= P(i_{t+1}=q_y|i_{t}=q_x)P(it+1=qy∣it=qx,it−1=qk,…)=P(it+1=qy∣it=qx)
- 所有可能的状态集合Q={q1,q2,⋯,qN}Q = \{q_1,q_2,\cdots,q_N\}Q={q1,q2,⋯,qN}
- 长度为TTT的状态序列I=(i1,i2,⋯,iT)I = (i_1,i_2,\cdots,i_T)I=(i1,i2,⋯,iT)
- k为任意时刻
二、隐马尔科夫模型
1、隐马尔科夫模型的引入
马尔科夫链的缺陷:前后关系的缺失,带来了信息的缺失。缺失的关系需要另一条马尔科夫链来传递,即引出隐马尔科夫模型。
比如我们的股市,如果只是观测市场,我们只能知道当天的价格、成交量等信息,但是并不知道当前股市处于什么样的状态(牛市、熊市、震荡、反弹等等),在这种情况下我们有两个状态集合,一个可以观察到的状态集合(股市价格成交量状态等)和一个隐藏的状态集合(股市状况)。
我们希望能找到一个算法可以根据股市价格成交量状况和马尔科夫假设来预测股市的状况。在上面的这些情况下,可以观察到的状态序列和隐藏的状态序列是概率相关的。于是我们可以将这种类型的过程建模为有一个隐藏的马尔科夫过程和与这个隐藏马尔科夫过程概率相关的并且可以观察到的状态集合,就是隐马尔科夫模型。
能观测到的最外侧的涨跌(显性的状态集合),而牛市和熊市没办法直接观测得到为隐式。通过能观测的显性求解出整个双层马尔科夫链集合,这就是隐马尔科夫模型。
2、隐马尔科夫模型定义
隐马尔科夫模型由初始概率分布、状态转移概率分布以及观测概率分布确定。
- 所有可能的状态集合Q={q1,q2,⋯,qN}Q = \{q_1,q_2,\cdots,q_N\}Q={q1,q2,⋯,qN},有N个状态的一阶马尔科夫过程有N2N^2N2次状态转移,它们可以表示成一个状态转移矩阵。
- 长度为TTT的状态序列I=(i1,i2,⋯,iT)I = (i_1,i_2,\cdots,i_T)I=(i1,i2,⋯,iT)
- 所有可能的观测集合V={ν1,ν2,⋯,νM},MV = \{\nu_1,\nu_2,\cdots,\nu_M\},MV={ν1,ν2,⋯,νM},M是可能的观测数
- 长度为TTT的观测序列O=(o1,o2,⋯,oT)O = (o_1,o_2,\cdots,o_T)O=(o1,o2,⋯,oT)
(1)状态转移概率矩阵AAA:
A=[axy]N×N(1)A = \left[ a_{xy}\right]_{N\times N} \tag{1}A=[axy]N×N(1)
其中,
axy=P(it+1=qy∣it=qx),x=1,2,⋯,N;y=1,2,⋯,N(2)a_{xy} = P(i_{t+1}=q_y|i_{t}=q_x),\space x=1,2,\cdots,N;\space y=1,2,\cdots,N \tag{2}axy=P(it+1=qy∣it=qx), x=1,2,⋯,N; y=1,2,⋯,N(2)
是在时刻ttt处于状态qxq_xqx的条件下在时刻t+1t+1t+1转移到状态qyq_yqy的概率。则有
∑y=1Naxy=1(2.1)\sum_{y=1}^N a_{xy} =1 \tag{2.1}y=1∑Naxy=1(2.1)
有P(t+1)=P(t)AP(t+1)=P(t)AP(t+1)=P(t)A,推得P(t+1)=P(1)AtP(t+1)=P(1)A^tP(t+1)=P(1)At,当P(t+1)P(t+1)P(t+1)和P(t)P(t)P(t)的差值在一个很小的范围内,我们则称马尔科夫链达到平稳状态。
(2)观测概率矩阵BBB:
B=[bxk]N×M(3)B = \left[b_{xk} \right]_{N\times M} \tag{3}B=[bxk]N×M(3)
其中,
bxk=P(ot=vk∣it=qx),x=1,2,⋯,N;k=1,2,⋯,M(4)b_{xk} = P(o_{t}=v_k|i_{t}=q_x),\space \space x=1,2,\cdots,N ;k=1,2,\cdots,M\tag{4}bxk=P(ot=vk∣it=qx), x=1,2,⋯,N;k=1,2,⋯,M(4)
是在时刻ttt处于状态qxq_xqx的条件下生成观测vkv_kvk的概率。
(3)Π\PiΠ是初始状态概率向量:
Π=(πx)(5)\Pi = (\pi_x) \tag{5}Π=(πx)(5)
其中,
πx=P(i1=qx),x=1,2,⋯,N(6)\pi_x = P(i_1 = q_x),\space x=1,2,\cdots,N \tag{6}πx=P(i1=qx), x=1,2,⋯,N(6)
是时刻t=1t=1t=1处于状态qxq_xqx的概率。
隐马尔科夫模型由初始状态概率向量Π\PiΠ、状态转移概率矩阵AAA和观测概率矩阵BBB决定。Π\PiΠ和AAA决定状态序列,BBB决定观测序列。因此,隐马尔科夫模型λ\lambdaλ可以用三元符号表示,即
λ=(A,B,Π)(7)\lambda = (A,B,\Pi) \tag{7}λ=(A,B,Π)(7)
3、隐马尔科夫模型的两个假设
(1)齐次马尔科夫性假设,即假设隐藏的马尔科夫链在任意时刻ttt的状态只依赖于其前一时刻的状态,与其他时刻的状态及观测无关,也与时刻ttt无关。保证矩阵A在任意时刻t都是相同的。
P(it∣it−1,ot−1,,…,i1,o1)=P(it∣it−1)(8)P(i_{t}|i_{t-1},o_{t-1},,…,i_{1},o_{1})= P(i_{t}|i_{t-1}) \tag{8}P(it∣it−1,ot−1,,…,i1,o1)=P(it∣it−1)(8)
(2)观测独立性假设,即假设任意时刻的观测只依赖于该时刻的马尔科夫链的状态,与其他观测及状态无关。保证矩阵B在任意时刻t都是相同的。
P(ot∣iT,oT,⋯,it+1,ot+1,it,it−1,ot−1,⋯,i1,o1)=P(ot∣it)(9)P(o_{t}|i_{T},o_{T},\cdots,i_{t+1},o_{t+1},i_{t},i_{t-1},o_{t-1},\cdots,i_{1},o_{1}) = P(o_{t}|i_{t})\tag{9}P(ot∣iT,oT,⋯,it+1,ot+1,it,it−1,ot−1,⋯,i1,o1)=P(ot∣it)(9)
4、观测序列的生成过程
根据隐马尔可夫模型定义,可以将一个长度为TTT的观测序列O=(o1,o2,⋯,oT)O = (o_1,o_2,\cdots,o_T)O=(o1,o2,⋯,oT)的生成过程描述如下:
输入:隐马尔科夫模型λ=(A,B,Π)\lambda = (A,B,\Pi)λ=(A,B,Π),观测序列长度TTT;
输出:观测序列O=(o1,o2,⋯,oT)O = (o_1,o_2,\cdots,o_T)O=(o1,o2,⋯,oT)。
(1)按照初始状态分布Π\PiΠ产生状态i1i_1i1
(2)令t=1t=1t=1
(3)按照状态it=qxi_t = q_xit=qx的观测概率分布bxkb_{x k}bxk生成ot=vko_t = v_kot=vk
(4)按照状态it=qxi_t = q_xit=qx的状态转移概率分布axya_{x y}axy产生状态it+1=qyi_{t+1} = q_yit+1=qy
(5)令t=t+1t=t+1t=t+1;如果t<Tt<Tt<T,转步(3);否则,终止
5、隐马尔科夫模型的3个基本问题
(1)概率计算问题,给定模型λ=(A,B,Π)\lambda = (A,B,\Pi)λ=(A,B,Π)和观测序列O=(o1,o2,⋯,oT)O = (o_1,o_2,\cdots,o_T)O=(o1,o2,⋯,oT),计算在模型λ\lambdaλ下观测序列OOO出现的概率P(O∣λ)P(O|\lambda)P(O∣λ)。
(2)学习问题,已知观测序列O=(o1,o2,⋯,oT)O = (o_1,o_2,\cdots,o_T)O=(o1,o2,⋯,oT),估计模型λ=(A,B,Π)\lambda = (A,B,\Pi)λ=(A,B,Π)参数,使得在该模型下观测序列概率P(O∣λ)P(O|\lambda)P(O∣λ)最大。即用极大似然估计的方法估计参数。
(3)预测问题,也称为解码(decoding)问题。已知模型λ=(A,B,Π)\lambda = (A,B,\Pi)λ=(A,B,Π)和观测序列O=(o1,o2,⋯,oT)O = (o_1,o_2,\cdots,o_T)O=(o1,o2,⋯,oT),求对给定观测序列条件概率P(I∣O)P(I|O)P(I∣O)最大的状态序列I=(i1,i2,⋯,iT)I = (i_1,i_2,\cdots,i_T)I=(i1,i2,⋯,iT)。即给定观测序列,求最有可能的对应的状态序列。
三、概率计算算法
给定模型λ=(A,B,Π)\lambda = (A,B,\Pi)λ=(A,B,Π)和观测序列O=(o1,o2,⋯,oT)O = (o_1,o_2,\cdots,o_T)O=(o1,o2,⋯,oT),计算在模型λ\lambdaλ下观测序列OOO出现的概率P(O∣λ)P(O|\lambda)P(O∣λ)。
1、直接计算法
给定模型λ=(A,B,Π)\lambda = (A,B,\Pi)λ=(A,B,Π)和观测序列O=(o1,o2,⋯,oT)O = (o_1,o_2,\cdots,o_T)O=(o1,o2,⋯,oT),计算观测序列OOO出现的概率P(O∣λ)P(O|\lambda)P(O∣λ)。最直接的方法是按概率公式直接计算,通过列举所有可能的长度为TTT的状态序列I=(i1,i2,⋯,iT)I = (i_1,i_2,\cdots,i_T)I=(i1,i2,⋯,iT),求各个状态序列III与观测序列O=(o1,o2,⋯,oT)O=(o_1,o_2,\cdots,o_T)O=(o1,o2,⋯,oT)的联合概率P(O,I∣λ)P(O,I|\lambda)P(O,I∣λ),然后对所有可能的状态序列求和,得到P(O∣λ)P(O|\lambda)P(O∣λ)。
状态序列I=(i1,i2,⋯,iT)I = (i_1,i_2,\cdots,i_T)I=(i1,i2,⋯,iT)的概率是
P(I∣λ)=πi1ai1i2ai2i3⋯aiT−1iT(10)P(I|\lambda) = \pi_{i_1}a_{i_1 i_2}a_{i_2 i_3}\cdots a_{i_{T-1}\space\space i_{T}} \tag{10}P(I∣λ)=πi1ai1i2ai2i3⋯aiT−1 iT(10)
对固定的状态序列I=(i1,i2,⋯,iT)I = (i_1,i_2,\cdots,i_T)I=(i1,i2,⋯,iT),观测序列O=(o1,o2,⋯,oT)O = (o_1,o_2,\cdots,o_T)O=(o1,o2,⋯,oT)的概率是P(O∣I,λ)P(O|I,\lambda)P(O∣I,λ),
P(O∣I,λ)=bi1(o1)bi2(o2)⋯biT(oT)(11)P(O|I,\lambda) = b_{i_1}(o_1)b_{i_2}(o_2)\cdots b_{i_T}(o_T) \tag{11}P(O∣I,λ)=bi1(o1)bi2(o2)⋯biT(oT)(11)
OOO和III同时出现的联合概率为
P(O,I∣λ)=P(O∣I,λ)P(I∣λ)=πi1bi1(o1)ai1i2bi2(o2)⋯aiT−1iTbiT(oT)(12)\begin{aligned}P(O,I|\lambda) & = P(O|I,\lambda)P(I|\lambda) \\ & = \pi_{i_1}b_{i_1}(o_1) a_{i_1 i_2}b_{i_2}(o_2)\cdots a_{i_{T-1}\space\space i_{T}}b_{i_T}(o_T) \tag{12} \end{aligned}P(O,I∣λ)=P(O∣I,λ)P(I∣λ)=πi1bi1(o1)ai1i2bi2(o2)⋯aiT−1 iTbiT(oT)(12)
然后,对所有可能的状态序列III求和,得到观测序列OOO的概率P(O∣λ)P(O|\lambda)P(O∣λ),即
P(O∣λ)=∑IP(O∣I,λ)P(I∣λ)=∑i1,i2,⋯,iTπi1bi1(o1)ai1i2bi2(o2)⋯aiT−1iTbiT(oT)(13)\begin{aligned}P(O|\lambda) & = \sum_{I} P(O|I,\lambda)P(I|\lambda) \\ & = \sum_{i_1,i_2,\cdots,i_T} \pi_{i_1}b_{i_1}(o_1) a_{i_1 i_2}b_{i_2}(o_2)\cdots a_{i_{T-1}\space\space i_{T}}b_{i_T}(o_T) \tag{13} \end{aligned}P(O∣λ)=I∑P(O∣I,λ)P(I∣λ)=i1,i2,⋯,iT∑πi1bi1(o1)ai1i2bi2(o2)⋯aiT−1 iTbiT(oT)(13)
但是,利用公式(13)计算量很大,NTN^TNT种状态序列,每个状态序列计算2T−12T-12T−1次乘法,整个计算是O(TNT)O(TN^T)O(TNT)阶的,这种算法不可行。
2、前向算法
前向概率,给定隐马尔可夫模型λ\lambdaλ,定义到时刻ttt部分观测序列为o1,o2,⋯,oto_1,o_2,\cdots,o_to1,o2,⋯,ot且状态为qxq_xqx的概率为前向概率,记作
αt(x)=P(o1,o2,⋯,ot,it=qx∣λ)(14)\alpha_t(x) = P(o_1,o_2,\cdots,o_t,i_t =q_x|\lambda) \tag{14}αt(x)=P(o1,o2,⋯,ot,it=qx∣λ)(14)
观测序列概率的前向算法
输入:隐马尔科夫模型λ\lambdaλ,观测序列OOO;
输出:观测序列概率P(O∣λ)P(O|\lambda)P(O∣λ)。
(1)初值。初始化前向概率,是初始时刻的状态it=qxi_t = q_xit=qx和观测o1o_1o1的联合概率。
α1(x)=πxbx(o1),x=1,2,⋯,N(15)\alpha_1(x) = \pi_x b_x(o_1),\space x=1,2,\cdots,N \tag{15}α1(x)=πxbx(o1), x=1,2,⋯,N(15)
(2)递推,对t=1,2,⋯,T−1t = 1,2,\cdots,T-1t=1,2,⋯,T−1,
αt+1(y)=[∑x=1Nαt(x)axy]by(ot+1),x=1,2,⋯,N(16)\alpha_{t+1}(y) = \left[ \sum_{x=1}^N \alpha_t(x) a_{xy}\right]b_y(o_{t+1}),\space x=1,2,\cdots,N \tag{16}αt+1(y)=[x=1∑Nαt(x)axy]by(ot+1), x=1,2,⋯,N(16)
(3)终止
P(O∣λ)=∑y=1NαT(y)(17)P(O|\lambda) = \sum_{y=1}^N\alpha_T(y) \tag{17}P(O∣λ)=y=1∑NαT(y)(17)
步骤(2)是前向概率的递推公式,计算到时刻t+1t+1t+1部分观测序列为o1,o2,⋯,ot,ot+1o_1,o_2,\cdots,o_t,o_{t+1}o1,o2,⋯,ot,ot+1且在时刻t+1t+1t+1处于状态qyq_yqy的前向概率,如下图所示。
- 在式(16)的方括号弧里,既然αt(x)\alpha_t(x)αt(x)是到时刻ttt观测到o1,o2,⋯,oto_1,o_2,\cdots,o_to1,o2,⋯,ot并在时刻ttt处于状态qxq_xqx的前向概率,那么乘积αt(x)axy\alpha_t(x)a_{xy}αt(x)axy就是到时刻ttt观测到o1,o2,⋯,oto_1,o_2,\cdots,o_to1,o2,⋯,ot并在时刻ttt处于状态qxq_xqx而在时刻t+1t+1t+1到达状态qyq_yqy的联合概率。
- 对这个乘积在时刻t的所有可能的N个状态qxq_xqx求和,其结果就是到时刻t观测为o1,o2,⋯,oto_1,o_2,\cdots,o_to1,o2,⋯,ot并在时刻ttt处于状态qxq_xqx而在时刻t+1t+1t+1到达状态qyq_yqy的联合概率。
- 方括弧里的值与观测概率by(ot+1)b_y(o_{t+1})by(ot+1)的乘积恰好是到时刻t+1t+1t+1观测到o1,o2,⋯,ot,ot+1o_1,o_2,\cdots,o_t,o_{t+1}o1,o2,⋯,ot,ot+1并在时刻t+1t+1t+1处于状态qyq_yqy的前向概率αt+1(y)\alpha_{t+1}(y)αt+1(y)。
如下图所示,前向算法实际是基于“状态序列的路径结构”递推计算P(O∣λ)P(O|\lambda)P(O∣λ)的算法。前向算法高效的关键是其局部计算前向概率,然后利用路径结构将前向概率“递推”到全局,得到P(O∣λ)P(O|\lambda)P(O∣λ)。具体地,在时刻t=1t=1t=1,计算α1(x)\alpha_1(x)α1(x)的N个值(x=1,2,⋯,N)(x=1,2,\cdots,N)(x=1,2,⋯,N);在各个时刻t=1,2,⋯,T−1t=1,2,\cdots,T-1t=1,2,⋯,T−1,计算αt+1(y)\alpha_{t+1}(y)αt+1(y)的N个值(y=1,2,⋯,N)(y=1,2,\cdots,N)(y=1,2,⋯,N),而且每个αt+1(y)\alpha_{t+1}(y)αt+1(y)的计算利用前一时刻N个αt(x)\alpha_t(x)αt(x)。减少计算量的原因在于每一次计算直接引用前一个时刻的计算结果,避免重复计算。这样,利用前向概率计算P(O∣λ)P(O|\lambda)P(O∣λ)的计算量是O(N2T)O(N^2T)O(N2T)阶的,而不是直接计算的O(TNT)O(TN^T)O(TNT)阶
3、后向算法
后向概率:给定隐马尔科夫模型λ\lambdaλ,定义在时刻ttt状态为qxq_xqx的条件下,从t+1t+1t+1到T的部分观测序列为ot+1,ot+2,⋯,oTo_{t+1},o_{t+2},\cdots,o_{T}ot+1,ot+2,⋯,oT的概率为后向概率,记作
βt(x)=P(ot+1,ot+2,⋯,oT∣it=qx,λ)(18)\beta_t(x) = P(o_{t+1},o_{t+2},\cdots,o_{T}|i_t = q_x,\lambda)\tag{18}βt(x)=P(ot+1,ot+2,⋯,oT∣it=qx,λ)(18)
可以用递推的方法求得后向概率βt(x)\beta_t(x)βt(x)及观测序列概率P(O∣λ)P(O|\lambda)P(O∣λ)。
观测序列概率的后向算法
输入:隐马尔科夫模型λ\lambdaλ,观测序列OOO;
输出:观测序列概率P(O∣λ)P(O|\lambda)P(O∣λ)。
(1)初始化后向概率,对最终时刻的所有状态qyq_yqy规定βT(y)=1\beta_T(y) =1βT(y)=1。
βT(y)=1,y=1,2,⋯,N(19)\beta_T(y) = 1,y = 1,2,\cdots,N \tag{19}βT(y)=1,y=1,2,⋯,N(19)
PS:概率为1的原因是本来还需要看看时刻TTT后面有什么东西,但因为最后一个时刻TTT后面已经没有时刻,即不需要再观测某个东西,所以你随便给个什么都行,我不在乎。此解释来自博客,后向概率看书在这里卡壳了,按之前的学习方法停下来找博客,看优秀的人怎么解释后向概率,也就是这篇博客让我理解了后向概率,上面的图片也是根据博客里面的图片自己重新制作的。
(2)对t=T−1,T−2,⋯,1t=T-1,T-2,\cdots,1t=T−1,T−2,⋯,1
βt(x)=∑y=1Naxyby(ot+1)βt+1(y),x=1,2,⋯,N(20)\beta_t(x) = \sum_{y=1}^N a_{xy}b_y(o_{t+1})\beta_{t+1}(y),x = 1,2,\cdots,N \tag{20}βt(x)=y=1∑Naxyby(ot+1)βt+1(y),x=1,2,⋯,N(20)
PS:这一步是根据t+1t+1t+1的后向概率βt+1(y)\beta_{t+1}(y)βt+1(y)算tt\spacet 时刻的后向概率βt(x)\beta_{t}(x)βt(x),因此:
βt(x)\beta_{t}(x)βt(x) = 第tt\spacet 时刻xxx状态转移到第t+1t+1t+1时刻yyy状态的概率axya_{xy}axy * 第t+1t+1t+1时刻yyy状态给出o(t+1)o(t+1)o(t+1) 观测的概率by(ot+1)by(o_{t+1})by(ot+1) * 第t+1t+1t+1时刻的后向概率βt+1(y)\beta_{t+1}(y)βt+1(y)。
(3)
P(O∣λ)=∑x=1Nπxbx(o1)β1(x)(21)P(O|\lambda) = \sum_{x=1}^N \pi_x b_x(o_1)\beta_1(x) \tag{21}P(O∣λ)=x=1∑Nπxbx(o1)β1(x)(21)
利用前向概率和后向概率的定义可以将观测序列概率P(O∣λ)P(O|\lambda)P(O∣λ)统一写成
P(O∣λ)=∑x=1N∑y=1Nαt(x)axyby(ot+1)βt+1(y)(22)P(O|\lambda) = \sum_{x=1}^N \sum_{y=1}^N \alpha_{t}(x) a_{xy}b_y(o_{t+1})\beta_{t+1}(y) \tag{22}P(O∣λ)=x=1∑Ny=1∑Nαt(x)axyby(ot+1)βt+1(y)(22)
此式当t=1t=1t=1和t=T−1t = T-1t=T−1时分别为式(17)和式(21)。
4、一些概率与期望值的计算
(1)单个状态概率
给定模型λ\lambdaλ和观测OOO,在时刻tt\spacet 处于状态qxq_xqx的概率,记
γt(x)=P(it=qx∣O,λ)(23)\gamma_t(x) = P(i_t = q_x|O,\lambda) \tag{23}γt(x)=P(it=qx∣O,λ)(23)
可以通过前向后向概率计算。事实上,
γt(x)=P(it=qx∣O,λ)=P(it=qx,O∣λ)P(O∣λ)(23.1)\gamma_t(x) = P(i_t = q_x|O,\lambda) = \dfrac{P(i_t = q_x,O|\lambda)}{P(O|\lambda)} \tag{23.1}γt(x)=P(it=qx∣O,λ)=P(O∣λ)P(it=qx,O∣λ)(23.1)
由前向概率αt(x)\alpha_t(x)αt(x)和后向概率βt(x)\beta_t(x)βt(x)定义可知:
αt(x)βt(x)=P(it=qx,O∣λ)(23.2)\alpha_t(x)\beta_t(x) = P(i_t = q_x,O|\lambda) \tag{23.2}αt(x)βt(x)=P(it=qx,O∣λ)(23.2)
可以得到:
P(O∣λ)=∑x=1NP(it=qx,O∣λ)=∑x=1Nαt(x)βt(x)=∑x=1N∑y=1Nαt(x)axyby(ot+1)βt+1(y)P(O|\lambda) = \sum_{x=1}^N P(i_t = q_x,O|\lambda) = \sum_{x=1}^N \alpha_t(x)\beta_t(x) = \sum_{x=1}^N \sum_{y=1}^N \alpha_{t}(x) a_{xy}b_y(o_{t+1})\beta_{t+1}(y)P(O∣λ)=x=1∑NP(it=qx,O∣λ)=x=1∑Nαt(x)βt(x)=x=1∑Ny=1∑Nαt(x)axyby(ot+1)βt+1(y)
这个可以解释式(22)。
进一步得到:
γt(x)=αt(x)βt(x)P(O∣λ)=αt(x)βt(x)∑y=1Nαt(y)βt(y)(24)\gamma_t(x) = \dfrac{\alpha_t(x)\beta_t(x)}{P(O|\lambda)} = \dfrac{\alpha_t(x)\beta_t(x)}{ \sum_{y=1}^N \alpha_t(y)\beta_t(y)} \tag{24}γt(x)=P(O∣λ)αt(x)βt(x)=∑y=1Nαt(y)βt(y)αt(x)βt(x)(24)
PS:这个的确是求隐状态序列的一种方式,但这种有个问题——求出的隐状态之间互相独立,即:没有考虑到第t+1t+1t+1时刻的隐状态是由第tt\spacet 时刻的隐状态转移过来的情况。换言之:这样求得的隐状态是“每个隐状态都是仅在当前时刻最优,可每个隐状态都没考虑到全局情况”。
(2)两个状态的联合概率
给定模型λ\lambdaλ和观测OOO,在时刻tt\spacet 处于状态qxq_xqx且在时刻t+1t+1t+1处于状态qyq_yqy的概率,记
ξt(x,y)=P(it=qx,it+1=qy∣O,λ)(25)\xi_t(x,y) = P(i_t = q_x,i_{t+1} = q_y|O,\lambda) \tag{25}ξt(x,y)=P(it=qx,it+1=qy∣O,λ)(25)
可以通过前向后向概率计算:
ξt(x,y)=P(it=qx,it+1=qy,O∣λ)P(O∣λ)=P(it=qx,it+1=qy,O∣λ)∑x=1N∑y=1NP(it=qx,it+1=qy,O∣λ)(25.1)\xi_t(x,y) = \dfrac{P(i_t = q_x,i_{t+1} = q_y,O|\lambda)}{P(O|\lambda)} = \dfrac{P(i_t = q_x,i_{t+1} = q_y,O|\lambda)}{\sum_{x=1}^N \sum_{y=1}^N P(i_t = q_x,i_{t+1} = q_y,O|\lambda)} \tag{25.1}ξt(x,y)=P(O∣λ)P(it=qx,it+1=qy,O∣λ)=∑x=1N∑y=1NP(it=qx,it+1=qy,O∣λ)P(it=qx,it+1=qy,O∣λ)(25.1)
由上式和式(22)可得
P(it=qx,it+1=qy,O∣λ)=αt(x)axyby(ot+1)βt+1(y)(25.2)P(i_t = q_x,i_{t+1} = q_y,O|\lambda) = \alpha_{t}(x) a_{xy}b_y(o_{t+1})\beta_{t+1}(y) \tag{25.2}P(it=qx,it+1=qy,O∣λ)=αt(x)axyby(ot+1)βt+1(y)(25.2)
经过上面数学等式的推导并不太严谨,从意义上说明下为什么是这么几项的乘积,第一项αt(x)\alpha_t(x)αt(x)是保证在第t时刻的状态为qxq_xqx,axya_{xy}axy就是t时刻到t+1时刻的状态转移概率,by(ot+1)b_y(o_{t+1})by(ot+1)是为了保证t+1时刻的观测为ot+1o_{t+1}ot+1,βt+1(y)\beta_{t+1}(y)βt+1(y)就是t+1时刻后的观测序列概率。
所以
ξt(x,y)=αt(x)axyby(ot+1)βt+1(y)∑x=1N∑y=1NP(it=qx,it+1=qy,O∣λ)(26)\xi_t(x,y) = \dfrac{\alpha_{t}(x) a_{xy}b_y(o_{t+1})\beta_{t+1}(y)}{\sum_{x=1}^N \sum_{y=1}^N P(i_t = q_x,i_{t+1} = q_y,O|\lambda)}\tag{26}ξt(x,y)=∑x=1N∑y=1NP(it=qx,it+1=qy,O∣λ)αt(x)axyby(ot+1)βt+1(y)(26)
(3)一些期望
1)在观测OOO下状态qxq_xqx出现的期望值
∑t=1Tγt(x)(27)\sum_{t=1}^T \gamma_t(x) \tag{27}t=1∑Tγt(x)(27)
2)在观测OOO下由状态qxq_xqx转移的期望值
∑t=1T−1γt(x)(28)\sum_{t=1}^{T-1} \gamma_t(x) \tag{28}t=1∑T−1γt(x)(28)
结合式(37)进行理解
3)在观测OOO下状态qxq_xqx转移到状态qyq_yqy的期望值
∑t=1T−1ξt(x,y)(29)\sum_{t=1}^{T-1} \xi_t(x,y) \tag{29}t=1∑T−1ξt(x,y)(29)
四、学习算法
见10_隐马尔科夫模型HMM2_统计学习方法
五、预测算法
见10_隐马尔科夫模型HMM2_统计学习方法
参考资料
- 统计学习方法——李航
- 隐马尔科夫模型详解
- 02-NLP-05-隐式马尔科夫链
- 隐马尔可夫(HMM)、前/后向算法
10_隐马尔科夫模型HMM1_统计学习方法相关推荐
- 10_隐马尔科夫模型HMM2_统计学习方法
文章目录 四.学习算法 1.监督学习方法 2.非监督学习方法(Baum-Welch算法) 五.预测算法 1.近似算法 2.维特比算法 (1)最优路径特性 (2)两个变量 (3)维特比算法流程 隐马尔科 ...
- 隐马尔科夫模型HMM(一)HMM模型
2019独角兽企业重金招聘Python工程师标准>>> 隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理 ...
- 第十九课.隐马尔科夫模型
目录 隐马尔科夫模型的结构 马尔科夫链与隐马尔科夫模型 实例 HMM的要素 模型的性质 推理问题:HMM的状态解码 隐状态解码问题 最大路径概率与维特比算法 使用维特比算法解码 实例演示 基于Pyth ...
- 隐马尔科夫模型之Baum-Wech算法
隐马尔科夫模型之Baum-Wech算法 https://blog.csdn.net/u014688145/article/details/53046765 Baum-Wech算法之EM算法 https ...
- 机器学习知识点(二十五)Java实现隐马尔科夫模型HMM之jahmm库
1.隐马尔可夫模型HMM的应用场景,关乎于序列和状态变化的都可以. 发现java有可库,专为开发HMM,可惜只能在CSDN上有得下载. 2.jahmm是java开发隐马尔科夫模型的一个j ...
- 隐马尔科夫模型HMM自学 (3)
Viterbi Algorithm 本来想明天再把后面的部分写好,可是睡觉今天是节日呢?一时情不自禁就有打开电脑.......... 找到可能性最大的隐含状态序列 崔晓源 翻译 多数情况下,我们都希望 ...
- 隐马尔科夫模型HMM自学 (2)
HMM 定义 崔晓源 翻译 HMM是一个三元组 (,A,B). the vector of the initial state probabilities; the state transitio ...
- 隐马尔科夫模型HMM自学(1)
介绍 崔晓源 翻译 我们通常都习惯寻找一个事物在一段时间里的变化规律.在很多领域我们都希望找到这个规律,比如计算机中的指令顺序,句子中的词顺序和语音中的词顺序等等.一个最适用的例子就是天气的预测. 首 ...
- 【NLP】用于语音识别、分词的隐马尔科夫模型HMM
大家好,今天介绍自然语言处理中经典的隐马尔科夫模型(HMM).HMM早期在语音识别.分词等序列标注问题中有着广泛的应用. 了解HMM的基础原理以及应用,对于了解NLP处理问题的基本思想和技术发展脉络有 ...
最新文章
- linux备份svn仓库脚本,SVN服务备份操作步骤分享
- 《高性能网站建设指南》笔记-2 规则1——减少HTTP请求
- python爬虫经典段子_Python爬虫实战(1):爬取糗事百科段子
- 【LeetCode算法题库】Day5:Roman to Integer Longest Common Prefix 3Sum
- Pandas数据结构简介
- C 语言中std::array的神奇用法总结
- c# 保存和打开文件的方法
- Jsp+Ssm+Mysql实现的进销存管理系统
- HTML5新增的表单元素有哪些?
- 你真的会发朋友圈吗?
- find结合rm删除或mv移动文件的方法
- python全栈_010_Python3基本数据类型--元组
- Android常用的 adb shell命令
- 尾气冒黑烟是什么问题_汽车排气管冒黑烟,怎么回事?
- c语言编程一个登陆界面设计,怎么用C语言编写个登陆界面?
- css实现一个正方形
- 拿什么拯救你,我的校园网——校园网优化之单线多拨
- 大沱湾水电站拦河闸坝设计
- 自学IT后的第一篇博文
- 提取epub文件中的图片名字,重命名
热门文章
- 第三周作业2——效能测试
- C# 利用反射动态创建对象[摘录]
- 外贸网站建设(转自xmfish)
- 再谈共相式GIS和ArcObjects
- impala的详细介绍--图文描述
- 【Scala】使用Scala语言定义函数和函数使用(比较两个数的大小代码)
- sql管理器指定服务器名字,如何修改sql server 服务管理器 服务器名称
- 暗黑破坏神java魔法护身,发个实用的贴!!暗黑+1+2技能护身符合成,望大家顶下,能加精...
- springboot做网站_SpringBoot项目实战(3):整合Freemark模板
- linux删除文件夹命令6,Linux下创建、删除文件和文件夹命令