用matlab解决马尔可夫模型,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.9065 0.0935

0.0406 0.9594

EMIS_EST =