HMM MATLAB Toolbox应用

来源:互联网 发布:淘宝人工服务号码多少 编辑:程序博客网 时间:2024/05/01 20:01

一、比较全面的MATLAB自带HMM Toolbox的分析介绍,可以参考http://blog.csdn.net/whiteinblue/article/details/40625291。
hmmgenerate: 已知转移矩阵A和混淆矩阵B,随机生成定制长度的观察序列和隐层序列。
hmmestimate: 已知观察序列和隐层序列,最大似然估计转移矩阵A和混淆矩阵B。
1)hmmgenerate:已知转移矩阵A和混淆矩阵B,随机生成定制长度的观察序列和隐层序列。
[seq, states]=hmmgenerate(len,TRANS,EMIS)
len: 观察序列和隐层序列的长度
TRANS:转移矩阵A
EMIS:混淆矩阵B
[seq, states]=hmmgenerate(len,TRANS,EMIS,’Symbols’,{‘One’,’Two’},’Statenames’,{‘1’,’2’,’3’})
Symbols: 观察序列的符号
Statenames:隐层序列的符号
2) hmmestimate: 已知观察序列和隐层序列,最大似然估计转移矩阵A和混淆矩阵B。
[seq, states] = hmmgenerate(len,TRANS,EMIS)
[TRANS1, EMIS1] = hmmestimate(seq,states)
只能输入一组观察序列和隐层序列,不能对比较多组的观察序列和隐层序列进行估计。
3)hmmtrain: 已知隐层序列,初始猜测矩阵A和B,然后最大似然估计转移矩阵A和混淆矩阵B。
seq = hmmgenerate(len, TRANS, EMIS);
[estTR, estE] = hmmtrain(seq, initTR, initE);
initTR, initE分别为初始猜测A和B。其中输入seq就是隐层序列,还是seq越长,hmmtrain对A和B的估计结果越准确。
- 和产生的训练数据有关,如果一直是同一组训练数据,肯定train的结果是一样的。
- 如果是每次随机产生训练数据的话,肯定是产生的数据长度越长,越能反应A和B的特点。
- 这个hmmtrain受initTR和initE的影响很大,估计的A和B基本在initTR和initE周围浮动。
4) hmmviterbi: 已知矩阵A,B和观察序列,给出生成观察序列最可能的隐层序列。seqv和statesv是随机产生的,但是estStates是估计的最可能产生观察序列的隐层序列。
[seqv, statesv] = hmmgenerate(100, TRANS, EMIS);
estStates = hmmviterbi(seqv, TRANS, EMIS);
5) hmmdecode: 计算观察序列的后验状态概率,计算第i个状态在第j步出现的概率。所以,hmmdecode得到的后验状态概率是num(states)*len的矩阵。
[seqd, statesd] = hmmgenerate(100, TRANS, EMIS);
pStates = hmmdecode(seqd, TRANS, EMIS);

Conclusion:通过具体实验我们发现matlab工具箱中提供的函数,在很多情况下不能够很好的估计结果,而且现象的随机性越大,估计误差越大;这主要是由于观察样本不足和函数算法本身的优化问题,因为viterbi等hmm算法,都是局部寻优算法,很多时候,并不是全局的最优算法;所以在目前情况下,可以通过增加观察序列的个数和改进算法来提高估计的准确率。

二、我需要解决的问题是,在有多组隐层序列的基础上计算 状态的先验概率和转移矩阵,或者是在有多组观察序列的基础上计算 状态的先验概率,转移矩阵和混淆矩阵。

1 0