您的当前位置:首页MatLa工具箱b马尔可夫模型的MatLab程序

MatLa工具箱b马尔可夫模型的MatLab程序

2023-08-19 来源:爱问旅游网
MatLa工具箱b马尔可夫模型的MatLab程序

普查工具箱包括5个与隐马尔可夫模型相干的函数:

hmmgenerate从一个马尔可夫模型发生一个事态序列和输出序列;

hmmestimate计算迁移和输出的极大似然估计;

hmmtrain从一个输出序列计算迁移和输出概率的极大似然估计; hmmviterbi计算一个隐马尔可夫模型最可能的事态改变过程; hmmdecode计算一个给定输出序列的后验事态概率。 下面局部推荐如何利用这些函数来分析隐马尔可夫模型。 1.发生一个测验序列

下面代码发生上面简介中模型的迁移和输出矩阵: TRANS=[.9.1;.05.95;];

EMIS=[1/6,1/6,1/6,1/6,1/6,1/6;... 7/12,1/12,1/12,1/12,1/12,1/12];

要从模型发生一个随机的事态序列和输出序列,利用hmmgenerate:

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

输出中,seq是输出序列,states是事态序列。hmmgenerate在第0步从事态1开始,在第一步迁移到事态i1

,并归来i1作为事态的第一个入口。 2.估计事态序列

给定了迁移和输出矩阵TRANS和EMIS,函数hmmviterbi利用Viterbi算法计算模型给定输出序列seq最有可能

穿越的事态序列:

likelystates=hmmviterbi(seq,TRANS,EMIS);

likelystates是和seq一样长的序列。计算hmmvertibi的精度如下:

sum(states==likelystates)/length(states) ans=

0.8680

3.估计迁移和输出矩阵

函数hmmestimate和hmmtrain用于估计给定输出序列seq的迁移和输出矩阵TRANS和EMIS。

利用hmmestimate

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

0.14520.15160.15810.19680.15810.1903 0.58410.07540.09860.08120.08410.0768

由上面利用措施可知,hmmestimate函数必需预先懂得了获得输出序列seq,以及获得此收获的事态改变序

列。

利用hmmtrain

万一不懂得事态序列,然而懂得TRANS和EMIS的初始推断,那就能够利用hmmtrain来估计TRANS和EMIS。

假想已知如下初始推断: TRANS_GUESS=[.85.15;.1.9];

EMIS_GUESS=[.17.16.17.16.17.17;.6.08.08.08.0808]; TRANS和EMIS的估计如下:

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

TRANS_EST2= 0.92070.0793 0.03700.9630 EMIS_EST2=

0.17920.14370.14360.18550.15090.1971 0.57740.07750.10420.08400.08590.0710

hmmtrain利用迭代算法来不时修正TRANS_GUESS和EMIS_GUESS,使得每一步修正获得的矩阵都更加可能发生观测序列seq。目前后两个两次迭代矩阵的改变在一个小的容错范围内时,迭代静止。万一算法无法到达容错的范围,则迭代到达定然次数时就会静止,并归来一个警告提醒。默认的最大迭代次数为100。

万一算法达不到目标偏差范围,则能够穿越添置迭代次数和/或加大容错偏差值来使其获得较轻便收获:

maxiter

hmmtrain(seq,http://www..com/doc/a48759454.html, TRANS_GUESS,EMIS_GUESS,'maxiterations',maxiter)

tol

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

波及hmmtrain输出的矩阵可靠性的两点因素:

(1)算法收敛于局部极值,这点能够利用不同的初始推断矩阵来试探处理;

(2)序列seq太短而无法很好的训练矩阵,能够试探利用较长的序列。

4.估计后验事态概率(不太会意)

一个输出序列seq的后验事态概率是在特定事态下的模型发生在seq中一个输出的条件概率。假定seq曾经给出,你能够利用hmmdecode获得后验事态概率。

PSTATES=hmmdecode(seq,TRANS,EMIS)

输出为一个M*N的矩阵。M是事态的个数,L是seq的长度。PSTATES(i,j)是模型在事态i时,发生seq第j个输出的条件概率。

因篇幅问题不能全部显示,请点此查看更多更全内容