_隐马尔可夫模型_(HMM)是一个在你观察到的输出顺序,但不知道状态序列模型产生输出的过程。隐马尔可夫模型的分析试图从观察到的数据中恢复状态序列。算法
例如,考虑具备两个状态和六个可能输出的马尔可夫模型。该模型使用:函数
该模型使用如下规则从集合{一、二、三、四、五、6}中建立数字序列:测试
投掷红色硬币并执行如下操做之一:spa
该模型的状态图具备红色和绿色两种状态,以下图所示。code
实现")blog
您能够经过滚动具备与状态相同颜色的骰子来肯定状态的发射。您能够经过翻转与状态相同颜色的硬币来肯定到下一个状态的过渡。rem
转换矩阵为:get
T = [0.90.050.10.95]it
输出矩阵为:class
实现")
该模型不是隐藏的,由于您能够从硬币和骰子的颜色知道状态的顺序。可是,假设其余人 没有向您显示骰子或硬币。您所看到的只是输出的顺序。若是开始看到的数字比其余数字多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];
要从模型生成状态和发射的随机序列 :
输出seq
是序列,输出states
是状态序列。
likelystates
是与长度相同的序列seq
。
要测试的准确性hmmviterbi
。
sum(states==likelystates)/1000 ans = 0.8200
在这种状况下,最有可能的状态序列在82%的时间内与随机序列一致。
===
返回转换矩阵和输出矩阵的估计值:
您能够将输出与原始 矩阵进行比较, TRANS
而且EMIS
:
TRANS TRANS = 0.9000 0.1000 0.0500 0.9500 EMIS EMIS = 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.5833 0.0833 0.0833 0.0833 0.0833 0.0833
假设您对TRANS
和 有如下初步猜想EMIS
。
TRANS_GUESS = [.85 .15; .1 .9]; EMIS_GUESS = [.17 .16 .17 .16 .17 .17;.6 .08 .08 .08 .08 08];
您估计TRANS
并EMIS
以下:
TRANS_EST2 = 0.2286 0.7714 0.0032 0.9968 EMIS_EST2 = 0.1436 0.2348 0.1837 0.1963 0.2350 0.0066 0.4355 0.1089 0.1144 0.1082 0.1109 0.1220
若是算法在最大迭代次数(默认值为)内未能达到此容差100
,则算法将暂停。
若是算法未能达到所需的容差,请使用如下命令增长最大迭代次数的默认值:
其中,maxiter
是算法执行的最大步骤数。
输出PSTATES
为_M_ × _L_矩阵,其中_M_为状态数,_L_为的长度seq
。PSTATES(i,j)
是条件几率,该模型处于状态i
时,它产生j
的 seq
给出的是,seq
。
要返回序列几率的对数seq
,请使用第二个输出参数hmmdecode
:
随着序列长度的增长,序列的几率趋于0 。
默认状况下, 隐藏的Markov模型函数从状态1开始。换句话说,初始状态的分布将其全部几率质量都集中在状态1处。要分配不一样的几率分布,_p_ = [ _p _1,_p _2,...,_p __M_ ],到_M个_初始状态,执行如下操做:
若是转换矩阵和发射矩阵分别为TRANS
和EMIS
,则可使用如下命令来建立加强矩阵:
TRANS_HAT = [0 p; zeros(size(TRANS,1),1) TRANS]; EMIS_HAT = [zeros(1,size(EMIS,2)); EMIS];