机器学习——隐马尔科夫(HHM)原理
机器学习——隐马尔科夫(HHM)模型原理
1 从马尔科夫模型到隐马尔科夫模型
1.1 马尔科夫过程引入
首先,我们先给出一张图:
在上面的图里,给出的是一个链式的结构,结构中的每一个节点称之为一个状态。每一个状态QiQ_iQi的取值是一个范围[S0,Sn][S_0,S_n][S0,Sn],我们称之为状态空间。并且,每一个状态QiQ_iQi的取值与之前状态的取值有关。也就是说QiQ_iQi在状态空间的和Q1,Q2,..Qi−1Q_1,Q_2,..Q_{i-1}Q1,Q2,..Qi−1的取值有关。我们将这种状态随着时间向前推进,状态的取值与之前状态的取值有关的过程称为马尔科夫随机过程。我们用概率来表示一下这个过程就是:
P(Qi=Si)=P(Qi=Sj∣Q1=Si∈[S0,Sn],Q2=Si∈[S0,Sn],...,Qi−1=Si∈[S0,Sn])P(Q_i=S_i)=P(Q_i=S_j|Q_1=S_i∈[S_0,S_n],Q_2=S_i∈[S_0,S_n],...,Q_{i-1}=S_i∈[S_0,S_n])P(Qi=Si)=P(Qi=Sj∣Q1=Si∈[S0,Sn],Q2=Si∈[S0,Sn],...,Qi−1=Si∈[S0,Sn])
其中Qi−1=Si∈[S0,Sn]Q_{i-1}=S_i∈[S_0,S_n]Qi−1=Si∈[S0,Sn]表示状态QiQ_iQi的取值SiS_iSi属于样本空间的某一个。现在我们做出一个强假设,假设当前状态的取值仅仅和前一个状态的取值有关。用公式表示就是:
P(Qi=Si)=P(Qi=Sj∣Qi−1=Si∈[S0,Sn])P(Q_i=S_i)=P(Q_i=S_j|Q_{i-1}=S_i∈[S_0,S_n])P(Qi=Si)=P(Qi=Sj∣Qi−1=Si∈[S0,Sn])
我们将其称为一阶马尔科夫过程。如果状态空间SiS_iSi是离散的值,我们就称其为离散的一阶马尔科夫过程。
或许上面的描述过于抽象化,下面我们举一个例子来解释这个过程,假设有如下三个状态和状态转移矩阵:
首先,我们假设状态空间为[S1,S2,S3][S_1,S_2,S_3][S1,S2,S3]
状态S1:名词(N)
状态S2:动词(V)
状态S3:形容词(adj)
假设状态Q1Q_1Q1的取值为S1S_1S1,状态Q2Q_2Q2的取值为S2S_2S2,状态Q3Q_3Q3的取值为S3S_3S3,状态Q4Q_4Q4的取值为S3S_3S3,那么我们现在要确定Q5Q_5Q5为状态的S1S_1S1的概率就是:
P(Q5=S1)=P(Q5=Sj∣Q1=S1,Q2=S2,Q3=S3,Q4=S3)P(Q_5=S_1)=P(Q_5=S_j|Q_1=S_1,Q_2=S_2,Q_{3}=S_3,Q_4=S_3)P(Q5=S1)=P(Q5=Sj∣Q1=S1,Q2=S2,Q3=S3,Q4=S3)
下面,我们在具有给出一个状态转移的矩阵
[S1S2S3S10.30.50.2S20.50.30.2S30.40.20.4]\left[ \begin{matrix} &S_1&S_2&S_3\\ S_1&0.3 & 0.5 & 0.2 \\ S_2&0.5 & 0.3 & 0.2\\ S_3&0.4 & 0.2 & 0.4 \\ \end{matrix} \right] ⎣⎢⎢⎡S1S2S3S10.30.50.4S20.50.30.2S30.20.20.4⎦⎥⎥⎤
转移矩阵的概念是,从某一个状态SiS_iSi转移到另外一个状态SjS_jSj的概率。在我们上面的式子中:
P(Q5=Sj)=P(Q5=Sj∣Q1=S1,Q2=S2,Q3=S3,Q4=S3)P(Q_5=S_j)=P(Q_5=S_j|Q_1=S_1,Q_2=S_2,Q_{3}=S_3,Q_4=S_3)P(Q5=Sj)=P(Q5=Sj∣Q1=S1,Q2=S2,Q3=S3,Q4=S3)
假设Q1Q_1Q1状态的是确定的S1S_1S1,那么从状态值S1S_1S1转移的到Q2Q_2Q2对应的状态值S2S_2S2的概率为0.5,同理从S2S_2S2转移到Q3Q_3Q3状态的状态值S3S_3S3的概率为0.2,从S3S_3S3转移到Q4Q_4Q4状态的状态值S3S_3S3的概率为0.4,则
P(Q5=S1)=P(Q5=Sj∣Q1=S1,Q2=S2,Q3=S3,Q4=S3)=0.5∗0.2∗0.4P(Q_5=S_1)=P(Q_5=S_j|Q_1=S_1,Q_2=S_2,Q_{3}=S_3,Q_4=S_3)\\ =0.5*0.2*0.4P(Q5=S1)=P(Q5=Sj∣Q1=S1,Q2=S2,Q3=S3,Q4=S3)=0.5∗0.2∗0.4
如果是一阶马尔科夫过程,并且已经确定了Q4=S3Q_4=S_3Q4=S3,则可以确定概率为:
P(Q5=Sj)=P(Q5=Sj∣Q4=S3)=0.4P(Q_5=S_j)=P(Q_5=S_j|Q_4=S_3)=0.4P(Q5=Sj)=P(Q5=Sj∣Q4=S3)=0.4
1.2、 隐马尔科夫模型
在上述马尔科夫模型中,每一个状态的代表的是一个可以直接观察的事件(比如,上面的每个状态对应的是一个的词性)。在隐马尔科夫模型中,我们不能知道模型所经过的状态序列,只知道状态转移的概率函数。同时,对于这个状态所产生的事件也是一个随机的函数。还是上面的例子。现在已知的是状态S1,S2,S3转移的概率。但是对于每一个状态的Si,其可以产生多个多种词性。即
状态S1:名词(N)、动词(V)、形容词(A)
状态S2:名词(N)、动词(V)、形容词(A)
状态S3:名词(N)、动词(V)、形容词(A)
HMM的转移过程如图所示:
在这里,我们把由各个状态产生的实际O称为可观测序列。
在HMM模型中,当计算到某一个事件序列产生的概率的时候,我们至少需要到三个部分,第一个部分是初始状态的概率,第二个是状态之间转移的概率,第三个是有状态产生事件的概率。对于以上三个部分,我们分别使用π,A,Bπ,A,Bπ,A,B三个矩阵来表示。那么也就是说,一个常规的隐马尔科夫练可以表示为:
{π,A,B}\{π,A,B\}{π,A,B}
2 HMM模型推导过程
对于HMM模型的求解过程,通常是从三个问题开始的,我们下面分别对这三个问题进行一一的推导和求解。
2.1 估计问题
2.1.1 问题描述
给定一个观察序列O={O1,O2,...OT}O=\{O_1,O_2,...O_T\}O={O1,O2,...OT}和HMM模型μ={π,A,B}μ=\{π,A,B\}μ={π,A,B},如何计算观察序列O的概率?
对于这个问题,首先我们要明确的是对于每一个可以观测的数据而言,其可以用任何一个状态Si来生成。
2.1.2 问题推导
对于第一个可以观测的数据O1O_1O1而言,整个模型生成O1O_1O1的概率是各个状态生成O1O_1O1的概率之和。也就是∑Q1=S1SpbQ1(j)∑_{Q_1=S_1}^{S_{p}}b_{Q_1}(j)∑Q1=S1SpbQ1(j),同时由于模型是以一定的概率来生成初始状态Q1Q_1Q1的,那么也就是说,整个模型生成第一个可观测元素的概率为:
P(O1∣μ)=∑Q1=S1Spπ(Q1)∗BQ1(O1)P(O_1|μ)=∑_{Q_1=S_1}^{S_{p}}π(Q_1)*B_{Q_1}(O_1)P(O1∣μ)=Q1=S1∑Spπ(Q1)∗BQ1(O1)
对于可观测序列的第二个元素O2O_2O2而言,首先是由第一个状态Q1Q_1Q1转移到第二个状态Q2Q_2Q2,在有状态Q2Q_2Q2来生成的。由于状态Q2Q_2Q2的取值范围是{S0,S1,...Sp−1}\{S_0,S_1,...S_{p-1}\}{S0,S1,...Sp−1},那么,有状态Q2Q_2Q2生成可以观测的元素O2O_2O2的概率就是各个状态生成O2O_2O2的概率和,用数学表达式表示就是:
∑Q2=S1SpbQ2(j)∑_{Q_2=S_1}^{S_{p}}b_{Q_2}(j)Q2=S1∑SpbQ2(j)。
同时,我们还需要考虑到的时,Q2Q_2Q2是由Q1Q_1Q1转移过来的。那么,我们就必须要考虑到状态转移的概率。对于Q2Q_2Q2状态的任意一个取值SiS_iSi而言,产生这个状态的概率是由Q1Q_1Q1的任意一个取值产生的,那么模型产生SiS_iSi的概率,就为:
∑Q1=S1Spπ(Q1)AQ1Si∑_{Q_1=S_1}^{S_{p}}π(Q_1)A_{Q_1S_i}Q1=S1∑Spπ(Q1)AQ1Si
则,由状态Q1Q_1Q1转移到状态Q2Q_2Q2的概率为:
∑Q1=S1Spπ(Q1)∑Q2=S1SpAQ1Q2∑_{Q_1=S_1}^{S_{p}}π(Q_1)∑_{Q_2=S_1}^{S_{p}}A_{Q_1Q_2}Q1=S1∑Spπ(Q1)Q2=S1∑SpAQ1Q2
则,由μ生成可观测元素O1,O2O_1,O_2O1,O2的概率为:
∑Q1=S1Spπ(Q1)BQ1(O1)∑Q2=S1SpAQ1Q2BQ2(O2)∑_{Q_1=S_1}^{S_{p}}π(Q_1)B_{Q_1}(O_1)∑_{Q_2=S_1}^{S_{p}}A_{Q_1Q_2}B_{Q_2}(O_2)Q1=S1∑Spπ(Q1)BQ1(O1)Q2=S1∑SpAQ1Q2BQ2(O2)
依次类推,可观测序列的第三个元素O3O_3O3产生的概率也是首先状态Q3Q_3Q3的所有的取值SiS_iSi生成O3O_3O3的概率和,同时考虑从状态Q1,Q2Q_1,Q_2Q1,Q2转移到Q3Q_3Q3的概率,就可以推导出产生O1,O2,O3O_1,O_2,O_3O1,O2,O3的概率为:
∑Q1=S1Spπ(Q1)BQ1(O1)∑Q2=S1SpAQ1Q2BQ2(O2)∑Q3=S1SpAQ2Q3BQ3(O3)∑_{Q_1=S_1}^{S_{p}}π(Q_1)B_{Q_1}(O_1)∑_{Q_2=S_1}^{S_{p}}A_{Q_1Q_2}B_{Q_2}(O_2)∑_{Q_3=S_1}^{S_{p}}A_{Q_2Q_3}B_{Q_3}(O_3)Q1=S1∑Spπ(Q1)BQ1(O1)Q2=S1∑SpAQ1Q2BQ2(O2)Q3=S1∑SpAQ2Q3BQ3(O3)
不断递推之后,我们可以知道生成整个序列的概率为:
∑Q1=S1Spπ(Q1)BQ1(O1)∑Q2=S1SpAQ1Q2BQ2(O2).....∑QT=S1SpAQT−1QTBQT(OT)∑_{Q_1=S_1}^{S_{p}}π(Q_1)B_{Q_1}(O_1)∑_{Q_2=S_1}^{S_{p}}A_{Q_1Q_2}B_{Q_2}(O_2).....∑_{Q_T=S_1}^{S_{p}}A_{Q_{T-1}Q_T}B_{Q_T}(O_T)Q1=S1∑Spπ(Q1)BQ1(O1)Q2=S1∑SpAQ1Q2BQ2(O2).....QT=S1∑SpAQT−1QTBQT(OT)
上面的递推公式我们可以很容易的就确定。但是,这里存在的问题在于,如果我们想要获得观测序列的概率值,我们就必须穷尽所有的状态序列。也就是(p)T(p)^T(p)T。为了更好的解决这个问题,提出了前向算法,过程描述如下:
首先定义:
αt(i)=P(O1,O2,...Ot,Qt=Si∣μ)α_t(i)=P(O_1,O_2,...O_t,Q_t=S_i|μ)αt(i)=P(O1,O2,...Ot,Qt=Si∣μ)
该公式主要描述的是假设已经通过μ生成了{O1,O2,...Ot−1O_1,O_2,...O_{t-1}O1,O2,...Ot−1}的观测序列,同时在t时刻转移到SiS_iSi状态,并由SiS_iSi状态生成OtO_tOt的概率值。
当第一个时刻的时候有:
α1(i)=P(O1,Q1=Si∣μ)=π(Si)Bi(O1)α_1(i)=P(O_1,Q_1=S_i|μ)=π(S_i)B_i(O_1)α1(i)=P(O1,Q1=Si∣μ)=π(Si)Bi(O1)
同理我们可以定义出t+1时刻:
αt+1(j)=P(O1,O2,...Ot,Ot,Qt+1=Sj∣μ)α_{t+1}(j)=P(O_1,O_2,...O_t,O_t,Q_{t+1}=S_j|μ)αt+1(j)=P(O1,O2,...Ot,Ot,Qt+1=Sj∣μ)
进一步,我们可以推导出
αt+1(j)=P(O1,O2,...Ot,Ot+1,Qt+1=Sj∣μ)=∑i=1pαt(i)AijBj(Ot+1)α_{t+1}(j)=P(O_1,O_2,...O_t,O_{t+1},Q_{t+1}=S_j|μ)=∑_{i=1}^pα_t(i)A_{ij}B_j(O_{t+1})αt+1(j)=P(O1,O2,...Ot,Ot+1,Qt+1=Sj∣μ)=i=1∑pαt(i)AijBj(Ot+1)
根据递推公式,我们可以确定最后一个时刻T的时候,有:
αT(j)=P(O1,O2,...OT,QT=Sj∣μ)=∑i=1pαT−1(i)AijBj(OT)α_{T}(j)=P(O_1,O_2,...O_T,Q_{T}=S_j|μ)=∑_{i=1}^pα_{T-1}(i)A_{ij}B_j(O_{T})αT(j)=P(O1,O2,...OT,QT=Sj∣μ)=i=1∑pαT−1(i)AijBj(OT)
最后,对与整可观测序列的概率,就是对于各个αT(j)α_{T}(j)αT(j)求和,用公式表达就是:
P(O∣μ)=∑j=1pP(O1,O2,...OT,QT=Sj∣μ)=∑j=1PαT(j)P(O|μ)=∑_{j=1}^pP(O_1,O_2,...O_T,Q_{T}=S_j|μ)=∑_{j=1}^Pα_{T}(j)P(O∣μ)=j=1∑pP(O1,O2,...OT,QT=Sj∣μ)=j=1∑PαT(j)
我们用一个图来描述一下上面的过程:
前一列是t时刻所有可能的状态SiS_iSi,后一列是t+1时刻的SjS_jSj状态。也就是我们在计算t+1时刻的SjS_jSj状态的时候,已经考虑到了t时刻的所有状态。
2.1.3 算法过程
- 初始化第一个时刻的α,也就是:
α1(i)=P(O1,Q1=Si∣μ)=π(Si)Bi(O1)α_1(i)=P(O_1,Q_1=S_i|μ)=π(S_i)B_i(O_1)α1(i)=P(O1,Q1=Si∣μ)=π(Si)Bi(O1) - 归纳计算
αt+1(j)=P(O1,O2,...Ot,Ot+1,Qt+1=Sj∣μ)=∑i=1pαt(i)AijBj(Ot+1)α_{t+1}(j)=P(O_1,O_2,...O_t,O_{t+1},Q_{t+1}=S_j|μ)=∑_{i=1}^pα_t(i)A_{ij}B_j(O_{t+1})αt+1(j)=P(O1,O2,...Ot,Ot+1,Qt+1=Sj∣μ)=i=1∑pαt(i)AijBj(Ot+1) - 最后求和
P(O∣μ)=∑j=1pP(O1,O2,...OT,QT=Sj∣μ)=∑j=1PαT(j)P(O|μ)=∑_{j=1}^pP(O_1,O_2,...O_T,Q_{T}=S_j|μ)=∑_{j=1}^Pα_{T}(j)P(O∣μ)=j=1∑pP(O1,O2,...OT,QT=Sj∣μ)=j=1∑PαT(j)
2.2 最优序列
2.2.1 问题描述
我们知道,每一个可以观测的元素是由一个状态生成的,在已知观测序列和HMM模型的条件下,我们应该如何选择一个最优的状态序列,使得由该状态序列生成的可观测序列的概率最大?用数学的形式描述就是:
maxE(Q)=max(π(SQ1)BSQ1(O1)AQ1Q2BSQ2(O2)AQ2Q3).....AQT−1QTBSQT(OT))max E(Q)=max(π(S_{Q1})B_{S_{Q1}}(O_1)A_{Q_1Q_2}B_{S_{Q2}}(O_2)A_{Q_2Q_3}).....A_{Q_{T-1}Q_T}B_{S_{Q_T}}(O_T))maxE(Q)=max(π(SQ1)BSQ1(O1)AQ1Q2BSQ2(O2)AQ2Q3).....AQT−1QTBSQT(OT))
对于每一个QiQ_iQi可以取状态空间S中的某一个状态。
2.2.2 问题推导
对于求解这个问题,我们采用的是维特比算法,其数学推导过程如下:
首先,我们给出如下的递推公式:
δt(i)=max(P(Q1,Q2,....Qt−1,Qt=Si,O1,O2,...Ot))δ_t(i)=max(P(Q_1,Q_2,....Q_{t-1},Q_t=S_i,O_1,O_2,...O_t))δt(i)=max(P(Q1,Q2,....Qt−1,Qt=Si,O1,O2,...Ot))
我们来简单的解释以下这个公式,这个公式的意义在于在t时刻的时候,当该时刻取状态SiS_iSi的时候能够获取到的关于可观测的序列的最大概率。如下图所示:
如上图所示,前面的一列是t-1时刻的可能取的所有状态,后一列是t时刻的j状态,对于j状态而言,可以由前一个时刻的可以取的任意一个状态转移过来,上述的公式的作用就是用来寻找概率最大的状态。图中所示的就是S2S_2S2。
在了解了上述公式的意义之后,我们开始逐步的递推,在这里,我们新增加一个函数用来回溯:
首先是第一步:
δ1(i)=π(Si)BSi(O1)δ_1(i)=π(S_i)B_{S_i}(O_1)δ1(i)=π(Si)BSi(O1)
Ψ1(i)=0,i∈[1,p]Ψ_1(i)=0,i∈[1,p]Ψ1(i)=0,i∈[1,p]
然后是第二步:
δ2(j)=max(δ1(i)ASiSjBSj(O2)),i∈[1,p]δ_2(j)=max(δ_1(i)A_{S_iS_j}B_{S_j}(O_2)),i∈[1,p]δ2(j)=max(δ1(i)ASiSjBSj(O2)),i∈[1,p]
Ψ2(j)=max(δ1(i)ASiSj),i∈[1,p]Ψ_2(j)=max(δ_1(i)A_{S_iS_j}),i∈[1,p]Ψ2(j)=max(δ1(i)ASiSj),i∈[1,p]
依次类推到第t+1步为:
δt+1(j)=max(δt(i)ASiSjBSj(Ot+1)),i∈[1,p]δ_{t+1}(j)=max(δ_t(i)A_{S_iS_j}B_{S_j}(O_{t+1})),i∈[1,p]δt+1(j)=max(δt(i)ASiSjBSj(Ot+1)),i∈[1,p]
Ψt+1(j)=max(δt(i)ASiSj),i∈[1,p]Ψ_{t+1}(j)=max(δ_t(i)A_{S_iS_j}),i∈[1,p]Ψt+1(j)=max(δt(i)ASiSj),i∈[1,p]
到最后一步的时候:
δT(j)=max(δt−1(i)ASiSjBSj(OT)),i∈[1,p]δ_{T}(j)=max(δ_{t-1}(i)A_{S_iS_j}B_{S_j}(O_{T})),i∈[1,p]δT(j)=max(δt−1(i)ASiSjBSj(OT)),i∈[1,p]
ΨT(j)=max(δt−1(i)ASiSj),i∈[1,p]Ψ_{T}(j)=max(δ_{t-1}(i)A_{S_iS_j}),i∈[1,p]ΨT(j)=max(δt−1(i)ASiSj),i∈[1,p]
最后,我们找到概率最大的一条状态链为:
maxE(Q)=max(δT(j)),j∈[1,p]max E(Q)=max(δ_{T}(j)),j∈[1,p]maxE(Q)=max(δT(j)),j∈[1,p]
2.2.3 算法描述
- 初始化:
δ1(i)=π(Si)BSi(O1)δ_1(i)=π(S_i)B_{S_i}(O_1)δ1(i)=π(Si)BSi(O1)
Ψ1(i)=0,i∈[1,p]Ψ_1(i)=0,i∈[1,p]Ψ1(i)=0,i∈[1,p] - 归纳计算:
δt+1(j)=max(δt(i)ASiSjBSj(Ot+1)),i∈[1,p]δ_{t+1}(j)=max(δ_t(i)A_{S_iS_j}B_{S_j}(O_{t+1})),i∈[1,p]δt+1(j)=max(δt(i)ASiSjBSj(Ot+1)),i∈[1,p]
Ψt+1(j)=max(δt(i)ASiSj),i∈[1,p]Ψ_{t+1}(j)=max(δ_t(i)A_{S_iS_j}),i∈[1,p]Ψt+1(j)=max(δt(i)ASiSj),i∈[1,p] - 获取最大路径:
δT(j)=max(δt−1(i)ASiSjBSj(OT)),i∈[1,p]δ_{T}(j)=max(δ_{t-1}(i)A_{S_iS_j}B_{S_j}(O_{T})),i∈[1,p]δT(j)=max(δt−1(i)ASiSjBSj(OT)),i∈[1,p]
ΨT(j)=max(δt−1(i)ASiSj),i∈[1,p]Ψ_{T}(j)=max(δ_{t-1}(i)A_{S_iS_j}),i∈[1,p]ΨT(j)=max(δt−1(i)ASiSj),i∈[1,p]
maxE(Q)=max(δT(j)),j∈[1,p]max E(Q)=max(δ_{T}(j)),j∈[1,p]maxE(Q)=max(δT(j)),j∈[1,p] - 路径回溯
Qt=Ψt+1(Qt+1)Q_t=Ψ_{t+1}(Q_{t+1})Qt=Ψt+1(Qt+1)
2.3 参数估计问题
2.3.1 问题描述
给定可观测序列O1,O2,...OTO_1,O_2,...O_TO1,O2,...OT,如何确定HMM模型中的参数π,A,B来使得产生可观测序列的概率最大?
2.3.2 问题推导
我们首先给出两个定义:
θt(i)=P(O1,O2,...Ot,Qt=Si∣μ)θ_t(i)=P(O_1,O_2,...O_t,Q_t=S_i|μ)θt(i)=P(O1,O2,...Ot,Qt=Si∣μ)
βt(i)=P(Ot+1,Ot+1,...OT∣Qt=Si,μ)β_t(i)=P(O_{t+1},O_{t+1},...O_T|Q_t=S_i,μ)βt(i)=P(Ot+1,Ot+1,...OT∣Qt=Si,μ)
根据上面的定义,我们可以确定的是:
βT(i)=1,i∈[1,p]β_T(i)=1, i∈[1,p]βT(i)=1,i∈[1,p]
βt(i)=∑j=1pAijβt+1(j)Bj(Ot+1),t∈[1,T−1]β_t(i)=∑_{j=1}^pA_{ij}β_{t+1}(j)B_j(O_{t+1}),t∈[1,T-1]βt(i)=j=1∑pAijβt+1(j)Bj(Ot+1),t∈[1,T−1]
- 首先,我们随机化HMM的参数π,A
- 然后我们计算:
ξt(i,j)=P(Qt=Si,Qt+1=Sj∣O,μ)=θt(i)Aijβt+1(j)Bj(Ot+1)ξ_t(i,j)=P(Q_t=S_i,Q_{t+1}=S_j|O,μ)=θ_t(i)A_{ij}β_{t+1}(j)B_j(O_{t+1})ξt(i,j)=P(Qt=Si,Qt+1=Sj∣O,μ)=θt(i)Aijβt+1(j)Bj(Ot+1)
进一步推导之后有:
ξt(i,j)=P(Qt=Si,Qt+1=Sj,O∣μ)P(O∣μ)=θt(i)Aijβt+1(j)Bj(Ot+1)P(O∣μ)=θt(i)Aijβt+1(j)Bj(Ot+1)∑i=1p∑j=1pθt(i)AijBj(Ot+1)βt+1(j)ξ_t(i,j)=\frac{P(Q_t=S_i,Q_{t+1}=S_j,O|μ)}{P(O|μ)}=\frac{θ_t(i)A_{ij}β_{t+1}(j)B_j(O_{t+1})}{P(O|μ)}\\ =\frac{θ_t(i)A_{ij}β_{t+1}(j)B_j(O_{t+1})}{∑_{i=1}^p∑_{j=1}^pθ_t(i)A_{ij}B_j(O_{t+1})β_{t+1}(j)}ξt(i,j)=P(O∣μ)P(Qt=Si,Qt+1=Sj,O∣μ)=P(O∣μ)θt(i)Aijβt+1(j)Bj(Ot+1)=∑i=1p∑j=1pθt(i)AijBj(Ot+1)βt+1(j)θt(i)Aijβt+1(j)Bj(Ot+1)
则定义:
γt(i)=P(Qt=Si,O∣μ)=∑j=1pξt(i,j)γ_t(i)=P(Q_t=S_i,O|μ)=∑_{j=1}^pξ_t(i,j)γt(i)=P(Qt=Si,O∣μ)=j=1∑pξt(i,j)
3. 根据上面的计算,我们可以计算出:
π(Si)=γ1(i)π(S_i)=γ_1(i)π(Si)=γ1(i)
Aij=∑t=1T−1ξt(i,j)∑t=1T−1γt(i)A_{ij}=\frac{∑_{t=1}^{T-1}ξ_t(i,j)}{∑_{t=1}^{T-1}γ_t(i)}Aij=∑t=1T−1γt(i)∑t=1T−1ξt(i,j)
4. 对于B矩阵的计算可以采用的是
Bj(Ok)=∑t=1Tγt(j)∗δt(Ok)∑t=1Tγt(j)B_j(O_k)=\frac{∑_{t=1}^Tγ_t(j)*δ_t(O_k)}{∑_{t=1}^Tγ_t(j)}Bj(Ok)=∑t=1Tγt(j)∑t=1Tγt(j)∗δt(Ok)
3、总结
在明确了HMM模型的三个问题之后,我们就可以根训练数据来训练HMM的相关参数π,A,B。对于测试数据而言,根据维特比算法,可以确定最优的状态转移序列和整个序列的概率值。
3.1 参考文献
- 浙江大学《机器学习》
- 宗成庆 《统计自然语言处理》
机器学习——隐马尔科夫(HHM)原理相关推荐
- 机器学习-隐马尔科夫python实现及数学原理讲解
文章目录 1. 隐马尔科夫 2. 直观分析 3. 数学原理 4. 实现 4.1 代码 1. 隐马尔科夫 隐马尔可夫模型(hidden Markov model,HMM)是关于时序的概率模型,描述由 ...
- 隐马尔科夫模型原理解析
隐马尔科夫模型是(hidden Markov model,HMM)是可用于标注问题的统计学习模型,描述由隐藏的马尔科夫链随机生成观测序列的过程. 隐马尔可夫模型(hidden Markov model ...
- 视频教程-隐马尔科夫算法:中文分词神器-深度学习
隐马尔科夫算法:中文分词神器 在中国知网从事自然语言处理和知识图谱的开发,并负责带领团队完成项目,对深度学习和机器学习算法有深入研究. 吕强 ¥49.00 立即订阅 扫码下载「CSDN程序员学院APP ...
- 机器学习基础 HMM模型(隐马尔科夫)
文章目录 一.马尔科夫链 1. 简介 2. 经典举例 3. 小结 二.HMM简介 1. 简单案例 2. 三个基本问题 三.HMM模型基础 1. 什么样的问题需要HMM模型 2. HMM模型的定义 3. ...
- 机器学习笔记(十三)——隐马尔科夫模型
一.隐马尔科夫模型 在马尔科夫模型中,每一个状态代表了一个可以观察的事件,所以,马尔科夫模型有时称为可视马尔科夫模型(visible Markov model,VMM),这在某种程度上限制了模型的适应 ...
- 【火炉炼AI】机器学习044-创建隐马尔科夫模型
[火炉炼AI]机器学习044-创建隐马尔科夫模型 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2 ...
- 隐马尔科夫模型模型:原理、实现
文章目录 引入 盒子模型与盒子问题(urn problem) 随机过程 索引集 状态空间 采样函数 增量 马尔可夫链与马尔可夫过程 隐马尔科夫模型定义 示例--帮助理解 精灵.盒子与球 天气估计 原理 ...
- 机器学习-- > 隐马尔科夫模型(HMM)
博客内容将首发在微信公众号"跟我一起读论文啦啦",上面会定期分享机器学习.深度学习.数据挖掘.自然语言处理等高质量论文,欢迎关注! 本篇博文将详细总结隐马模型相关知识,理解该模型有 ...
- 机器学习知识点(二十五)Java实现隐马尔科夫模型HMM之jahmm库
1.隐马尔可夫模型HMM的应用场景,关乎于序列和状态变化的都可以. 发现java有可库,专为开发HMM,可惜只能在CSDN上有得下载. 2.jahmm是java开发隐马尔科夫模型的一个j ...
最新文章
- MySQL基础篇:数据类型
- eclipse+webservice开发实例
- 介绍一个免费的采用人工智能放大老照片的在线网站
- Ubuntu18.04 安装搜狗输入法后无法启动的问题
- 同步助手iphone4_88 元淘来的 iPhone 4 降级到 iOS 6,甚至还能跑 “大型游戏”
- wcf中如何Host多个WCF服务?
- current_session_context_class
- php dp0,DOS批处理中%cd%与%~dp0的区别详解
- 【BZOJ 1036】树的统计【树链剖分模板】
- ImageAI的介绍(2)
- Mac上的三款时钟屏保
- Issue during builing Android app with ant under Win7
- Palantir Gotham初探
- Dell服务器进入双系统按键,dell进bios按什么键 戴尔进bios的方法
- vlan的几种划分方式
- K2P padavan固件下宽带与IPTV融合
- 蒲公英wifi怎么卸载干净_蒲公英wifi怎么卸载干净
- echarts-箱线图(盒须图)
- 性能测试基础及loadRunner的使用(超详细)
- Windows Server 远程桌面连接不上问题解决
热门文章
- 复现 S2ANet RTX 2080Ti
- 智能电网技术:奥克尼群岛电力解决方案
- 判断安卓苹果IOS自动跳转到对应链接下载地址升级版
- 【有源滤波】滤波基础知识
- 周末随笔 | 笔耕者的悲哀 —— 盗亦无道
- Android 动态分区详解(七) overlayfs 与 adb remount 操作
- 错误ImportError: cannot import name ‘PILLOW_VERSION‘ from ‘PIL‘
- 现代中医与传统中医的差别
- C++小练习(原题+题解)
- springboot+i8n国际化