声明:本文主要介绍Matlab2011b中 Statistics Toolbox工具箱里与隐马尔科夫模型相关的函数及其用法(请勿与其它HMM工具箱混淆)。本文的主要内容来自Matlab 2011b的帮助文档,为作者自学笔记。水平有限,笔记粗糙,本着“交流探讨,知识分享”的宗旨,,希望对HMM感兴趣的同学有些许帮助,欢迎指教,共同进步。
变量说明:
设有M个状态,N个符号Markov模型。
TRANS:对应状态转移矩阵,大小为M*M,表示各状态相互转换的概率,TRANS(i,j)表示从状态i转换到状态j的概率。
EMIS:对应符号生成矩阵,又叫混淆矩阵,观察符号概率分布。EMIS(i,j)代表在状态i时,产生符号j的概率。
函数介绍:
hmmgenerate— Generates a sequence of states and emissions from a Markov model
从一个马尔科夫模型产生状态序列和输出序列,该序列具有模型所表达的随机性特征。
A random sequence seq of emission symbols
A random sequence states of states
用法:
[seq,states] = hmmgenerate(len,TRANS,EMIS)
hmmgenerate(…,’Symbols’,SYMBOLS)hmmgenerate(…,’Statenames’,STATENAMES)
示例:
trans = [0.95,0.05; 0.10,0.90];
emis= [1/6 1/6 1/6 1/6 1/6 1/6;
1/10 1/10 1/10 1/10 1/10 1/2];
[seq,states] = hmmgenerate(100,trans,emis)
[seq,states] =hmmgenerate(100,trans,emis,…
‘Symbols’,{‘one’,’two’,’three’,’four’,’five’,’six’},…
‘Statenames’,{‘fair’;’loaded’})
估计状态序列:Estimatingthe State Sequence
hmmviterbi— Calculates the most probable state path for a hidden Markov model
Given the transition and emission matricesTRANS and EMIS, the functionhmmviterbiuses the Viterbi algorithm to compute the most likely sequence of states themodel would go through to generate a given sequence seq of emissions:
给定状态转移矩阵TRANS和混淆矩阵EMIS,hmmviterbi使用Viterbi算法计算该模型最相似的状态序列。
用法:
STATES = hmmviterbi(seq,TRANS,EMIS)hmmviterbi(…,’Symbols’,SYMBOLS)hmmviterbi(…,’Statenames’,STATENAMES)
示例:
likelystates = hmmviterbi(seq, TRANS,EMIS);
trans = [0.95,0.05;
0.10,0.90];
emis = [1/6 1/6 1/6 1/6 1/6 1/6;
1/10 1/10 1/10 1/10 1/10 1/2];
[seq,states] = hmmgenerate(100,trans,emis);
estimatedStates =hmmviterbi(seq,trans,emis);
[seq,states] =hmmgenerate(100,trans,emis,…
‘Statenames’,{‘fair’;’loaded’});
estimatesStates = hmmviterbi(seq,trans,emis,…
‘Statenames’,{‘fair’;’loaded’});
hmmestimate和hmmtrain用于通过给定的输出序列估计转移矩阵TRANS和混淆矩阵EMIS。
hmmestimate— Calculates maximum likelihood estimates of transition and emissionprobabilities from a sequence of emissions and a known sequence of states
通过一个输出序列和已知的状态序列,计算转移概率和输出概率的最大似然估计。
用法:
[TRANS,EMIS] = hmmestimate(seq,states)hmmestimate(…,’Symbols’,SYMBOLS)hmmestimate(…,’Statenames’,STATENAMES)hmmestimate(…,’Pseudoemissions’,PSEUDOE)hmmestimate(…,’Pseudotransitions’,PSEUDOTR)
示例:
通过已知的输出序列和状态序列估计出转移状态和混淆矩阵。
[TRANS_EST, EMIS_EST] = hmmestimate(seq,states)
TRANS_EST =
0.89890.1011
0.05850.9415
EMIS_EST =
0.17210.1721 0.1749 0.16120.1803 0.1393
0.58360.0741 0.0804 0.07890.0726 0.1104
都懒得写日记来记录,可见内心底对旅行是多么的淡漠。