✅ 操作成功!

hmm模型

发布时间:2023-06-07 作者:admin 来源:文学

hmm模型

hmm模型

喜得千金祝福语-聊城安全教育平台登录入口

2023年2月22日发(作者:温度计种类)

HMM隐马尔可夫模型MATLAB

HMM隐马尔可夫模型

Intro

维基百科定义:隐马尔可夫模型⽤来描述⼀个含有隐含未知参数的,⽽马尔可夫过程是是⼀个具备了的,当⼀个在给定现在状态及所有过去

状态情况下,其未来状态的条件仅依赖于当前状态;换句话说,在给定现在状态时,它与过去状态(即该过程的历史路径)是的,那么此即

具有马尔可夫性质。

MatlabHMM定义:

AhiddenMarkovmodel(HMM)isoneinwhichyouobserveasequenceofemissions,butdonotknowthesequenceofstates

esofhiddenMarkovmodelsseektorecoverthesequenceofstates

fromtheobserveddata.

⼈话(个⼈理解):

我们可以做⼀个假设:世界上的很多随机现象,⽐如天⽓(晴天或是下⾬天),看似随机其实背后都是有其真正的原因,我们假设这些随机

表象背后是由数个真正的原因所决定的,⽽且每⼀个状态只与上⼀个状态相关(今天的天⽓只与昨天天⽓背后的隐藏状态有关),我们称满

⾜这样假设的模型为马尔可夫模型。我们在这⾥称表象(晴天或是下⾬天)为emissions(发射)或者theobserveddata,称背后真正的原因

为hiddenstate(隐藏状态)。之所以将表象称为发射,是因为⼀个表象是由⼀个隐藏状态“发射”⽽来,每⼀天都是由⼀个隐藏状态产⽣,⽽每

⼀个隐藏状态都可能产⽣其他的表象,产⽣表象的概率矩阵被称为发射矩阵B。每⼀天的隐藏状态之间也存在转移概率,此概率矩阵被称为

转移矩阵A。初始隐藏状态的概率矩阵被称为π

于是这就是隐马尔可夫模型(HMM)的重要三个矩阵A,B,π

隐马尔可夫模型提出以下问题:

给定的发射序列,求最可能的状态序列

给定的发射序列,你将如何估计模型的转移概率和输出概率?

模型⽣成给定序列的先验概率是多少?

在给定序列中某个状态时,模型的后验概率是多少?

HiddenMarkovmodelsraisethefollowingquestions:

Givenasequenceofemissions,whatisthemostlikelystatepath?

Givenasequenceofemissions,howcanyouestimatetransitionandemissionprobabilitiesofthemodel?

Whatistheforwardprobabilitythatthemodelgeneratesagivensequence?

Whatistheposteriorprobabilitythatthemodelisinaparticularstateatanypointinthesequence?

模型需要指定⼀个转移矩阵TRANS和⼀个发射矩阵EMIS,TRANS(i,j)是隐藏状态i转移到j的概率,EMIS(i,j)是序列seq在隐藏状态i时发射出符号j

的概率。

设N为隐藏状态的状态个数,M为发射序列(emissions)中元素(symbol)可能的值的个数,则TRANS矩阵⼤⼩为N×N,EMIS矩阵⼤⼩为N×M

时间复杂度,再设V为发射序列(emissions)中元素(symbol)的维数,则易知隐藏状态x(t)转移到x(t+1)复杂度为N×N,隐藏状态x(t)发射⼀个

元素y(t)的复杂度为N×M×V

实现

MATLAB中提供了相关的⼯具箱

⽣成测试数列

输出发射序列seq和序列状态states。

测试状态序列

函数使⽤算法Viterbi计算模型⽣成序列seq最有可能经过的状态序列

likelystates序列的长度和seq相同。

测试hmmviterbi的准确度可以将序列likelystates和原状态序列states⽐较

[seq,states]=hmmgenerate(1000,TRANS,EMIS);

likelystates=hmmviterbi(seq,TRANS,EMIS);

sum(states==likelystates)/1000

此样例可知准确度为82%

估算转移矩阵TRANS和发射矩阵EMIS

函数和可以通过发射序列seq估算模型的转移矩阵TRANS和发射矩阵EMIS。

使⽤hmmestimate函数时需要序列的states(即在⽣成测试序列时的返回值states)

如果不知道序列的states并且对于转移矩阵TRANS和发射矩阵EMIS有初步猜想,可以可以使⽤hmmtrain函数来估算序列的转移矩阵TRANS和发

射矩阵EMIS

hmmtrain使⽤Baum-Welch迭代算法,通过改变TRANS_GUESS和EMIS_GUESS以便让模型更有可能⽣成观察序列seq。当两个连续迭代中的矩阵

彼此公差很⼩的时候,算法停⽌。

如果算法在默认值为100的最⼤迭代次数内未能达到此公差,则算法将停⽌,hmmtrain将返回TRANS_EST和EMIS_EST的最后⼀个值,并发出未

达到公差的警告。

如果算法未能达到所需的公差,请使⽤以下命令增加最⼤迭代次数的默认值:

其中,maxiter是算法执⾏的最⼤步数。

使⽤以下命令更改公差的默认值:

其中,tol是公差的期望值。增加tol的值会使算法更快地停⽌,但结果不太准确。

有两个因素会降低hmmtrain输出矩阵的可靠性:

该算法收敛到⼀个局部极⼤值,该极⼤值不代表真实的过渡矩阵和发射矩阵。如果您怀疑这⼀点,请对矩阵TRANS_EST和EMIS_EST使

⽤不同的初始猜测。

序列seq可能太短,⽆法正确训练矩阵。如果您怀疑这⼀点,请对seq使⽤更长的序列。

估算先验后验概率

可以通过函数计算已经发射的序列seq在某⼀历史状态下的后验概率

输出值PSTATES是⼀个M-by-L(M乘L)矩阵,这⾥M是状态的数量,L是序列seq的长度。PSTATES(i,j)是模型在状态i时⽣成序列seq中符号j的

条件概率。

更详细的介绍:

PSTATES=hmmdecode(seq,TRANS,EMIS)可以根据隐马尔可夫(HMM)模型,计算出序列seq后⾯状态的可能性PSTATES。后续状态的可能性

是k和i的条件概率(给定观察序列的符号sym)。你应该通过指定⼀个转移矩阵TRANS和⼀个发射矩阵EMIS来使⽤模型。TRANS(i,j)是状态i转移

到j的概率,EMIS(k,seq)是序列seq由状态k发射出的概率。

(输出值PSTATES的介绍见上)

PSTATES=hmmdecode(seq,TRANS,EMIS)calculatestheposteriorstateprobabilities,PSTATES,ofthesequenceseq,fromahidden

teriorstateprobabilitiesaretheconditionalprobabilitiesofbeingatstatekatstepi,giventheobserved

sequenceofsymbols,cifythemodelbyatransitionprobabilitymatrix,TRANS,andanemissionsprobabilitymatrix,

(i,j)(k,seq)istheprobabilitythatsymbolseqisemittedfrom

statek.

注意:函数hmmdecode在第⼀次发射之前,状态1从step0开始。hmmdecode根据模型从状态1开始计算PSTATES中的概率。

**Note**Thefunctionhmmdecodebeginswiththemodelinstate1atstep0,odecomputesthe

probabilitiesinPSTATESbasedonthefactthatthemodelbeginsinstate1.

[PSTATES,logpseq]=hmmdecode(...)返回给定转移矩阵TRANS和发射矩阵EMIS下的对数概率logpseq

ans=

0.8200

[TRANS_EST,EMIS_EST]=hmmestimate(seq,states)

[TRANS_EST2,EMIS_EST2]=hmmtrain(seq,TRANS_GUESS,EMIS_GUESS)

hmmtrain(seq,TRANS_GUESS,EMIS_GUESS,'maxiterations',maxiter)

hmmtrain(seq,TRANS_GUESS,EMIS_GUESS,'tolerance',tol)

PSTATES=hmmdecode(seq,TRANS,EMIS)

PSTATES=hmmdecode(seq,TRANS,EMIS)

[PSTATES,logpseq]=hmmdecode(...)

[PSTATES,logpseq,FORWARD,BACKWARD,S]=hmmdecode(...)

hmmdecode(...,'Symbols',SYMBOLS)

[PSTATES,logpseq]=hmmdecode(...)returnslogpseq,thelogarithmoftheprobabilityofsequenceseq,giventransitionmatrix

TRANSandemissionmatrixEMIS.

[PSTATES,logpseq,FORWARD,BACKWARD,S]=hmmdecode(...)返回由S缩放后的先验概率和后验概率

[PSTATES,logpseq,FORWARD,BACKWARD,S]=hmmdecode(...)returnstheforwardandbackwardprobabilitiesofthe

sequencescaledbyS.

hmmdecode(...,'Symbols',SYMBOLS)指定了发射的符号。SYMBOLS可以是⼀个数值数组、字符串数组或者是⼀个包含符号的cellarray。默认的符

号是整数1到N,N是可能的发射数量。

hmmdecode(...,'Symbols',SYMBOLS)Scanbeanumericarray,astringarray,

aultsymbolsareintegers1throughN,whereNisthenumberofpossible

emissions.

后记

评价:不如Pythonhmmlearn,MATLAB再见

其中,关于矩阵的指定():

基本上来说,对于这个问题我们没有⼀种简单直接的答案。相反的,经验告诉我们⽆论是使⽤随机(subjecttothestochasticandthe

nonzerovalueconstraints)还是通过先验概率和转移矩阵的初始估计,都⾜以在⼏乎所有情况下对参数进⾏重新调整。

但是……(未翻译,参见原⽂)

可以通过多种⽅式获得矩阵参数

1.⼿动将观测序列分割为状态,并在状态内平均观测值

2.⽤平均值对观测值进⾏最⼤似然分割

3.带聚类的分段k-均值分段

Basically,d,experiencehasshownthateitherrandom

(subjecttothestochasticandthenonzerovalueconstraints)oruniforminitialestimatesofthepriorprobabilitiesandthe

transitionmatrixisadequateforgivingusefulreestimatesoftheseparametersinalmostallcases.

However,fortheemissionmatrix,experiencehasshownthatgoodinitialestimatesarehelpfulinthediscretesymbolcase,and

areessential(whendealingwithmultiplemixtures)inthecontinuousdistributioncase.

Suchinitialestimatescanbeobtainedinanumberofways,including:

1)manualsegmentationoftheobservationsequencesintostateswithaveragingobservationswithinstates,

2)maximumlikelihoodsegmentationofobservationswithaveraging,

3)segmentalk-meanssegmentationwithclustering,

etc.

Processingmath:100%

👁️ 阅读量:0