一个隐马尔可夫模型(HMM)是一种观察排放序列,但不知道模型生成排放所经过的状态序列。隐马尔可夫模型的分析试图从观测数据中恢复状态序列。
作为一个例子,考虑一个有两种状态和六种可能排放的马尔可夫模型。模型的用途:
一个红色骰子,有六个面,标记为1到6。
一个绿色的骰子,有12条边,其中5条被标记为2到6,而其余7条被标记为1。
一个加权的红硬币,正面的概率是。9反面的概率是。1。
绿色加权硬币,正面的概率是。95反面的概率是。05。
该模型根据以下规则从集合{1,2,3,4,5,6}中创建一个数字序列:
首先滚动红色骰子,写下出现的数字,也就是发射量。
抛红色硬币,并做以下其中之一:
如果结果是正面,掷红色骰子并写下结果。
如果结果是反面,掷绿色骰子并写下结果。
在随后的每一步中,你抛的硬币颜色与你在前一步中掷出的骰子颜色相同。如果硬币正面朝上,就像前一步一样掷相同的骰子。如果硬币反面朝上,换到另一个骰子。
该模型的状态图有两种状态,红色和绿色,如下图所示。
您可以通过滚动与该状态相同颜色的骰子来确定该状态的发射量。你可以通过投掷与状态相同颜色的硬币来决定到下一个状态的转变。
转换矩阵为:
排放矩阵为:
模型并不隐藏,因为您可以从硬币和骰子的颜色中知道状态序列。然而,假设有人在没有向你展示骰子或硬币的情况下产生了排放。你所看到的是排放的顺序。如果您开始看到比其他数字更多的1,您可能会怀疑模型处于绿色状态,但您不能确定,因为您无法看到正在滚动的骰子的颜色。
隐马尔可夫模型提出了以下问题:
给定一系列排放,最有可能的状态路径是什么?
给定一个排放序列,如何估计模型的转移和排放概率?
是什么转发概率模型生成一个给定的序列?
是什么后验概率模型在序列中的任意点处于特定状态?
与隐马尔可夫模型相关的统计学和机器学习工具箱™函数有:
hmmgenerate
-从马尔可夫模型中生成一系列状态和排放
hmmestimate
-从排放序列和已知状态序列中计算过渡和排放概率的最大似然估计
hmmtrain
-从排放序列计算过渡和排放概率的最大似然估计
hmmviterbi
-计算隐藏马尔可夫模型的最可能状态路径
hmmdecode
-计算一系列排放的后验概率
本节将展示如何使用这些函数来分析隐马尔可夫模型。
下面的命令为中描述的模型创建转换和发射矩阵隐马尔科夫模型(HMM)简介:
反式=[。9。1;. 05 .95];Emis =[1/6, 1/6, 1/6, 1/6, 1/6, 1/6, 1/6;…7/12, 1/12, 1/12, 1/12, 1/12, 1/12, 1/12];
要从模型中生成状态和排放的随机序列,使用hmmgenerate
:
[seq,州]= hmmgenerate(1000年,反式工作);
输出seq
是排放和产出的顺序吗州
是状态的序列。
hmmgenerate
从状态1的第0步开始,过渡到状态我1在第一步,并返回我1作为第一个条目州
.要改变初始状态,请看改变初始状态分布.
给出了转移矩阵和发射矩阵反式
和工作
,函数hmmviterbi
使用Viterbi算法来计算模型最可能经过的状态序列,以生成给定序列seq
的排放:
likelystates = hmmviterbi(seq, TRANS, EMIS);
likelystates
一个序列的长度和seq
.
检验…的准确性hmmviterbi
,计算实际序列的百分比州
这和序列是一致的likelystates
.
Sum (states== likeelystates)/1000 ans = 0.8200
在这种情况下,最有可能的状态序列与随机序列一致的概率为82%。
的函数hmmestimate
和hmmtrain
估计过渡和排放矩阵反式
和工作
给定一个序列seq
的排放。
使用hmmestimate
.这个函数hmmestimate
要求你知道状态的顺序州
模型去了通过生成seq
.
下面取排放和状态序列,并返回过渡和排放矩阵的估计:
[TRANS_EST, EMIS_EST] = hmmestimate(seq, states) TRANS_EST = 0.8989 0.1011 0.0585 0.9415 EMIS_EST = 0.1721 0.1721 0.1749 0.1612 0.1803 0.1393 0.5836 0.0741 0.0804 0.0789 0.0726 0.1104
你可以将输出与原始的跃迁和发射矩阵进行比较,反式
和工作
:
emis = 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.5833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833
使用hmmtrain
.如果你不知道状态的顺序州
,但你有最初的猜测反式
和工作
,你仍然可以估计反式
和工作
使用hmmtrain
.
假设您有以下的初步猜测反式
和工作
.
TRANS_GUESS =[。85 .15点;。1。9);EMIS_GUESS =[。17.16.17.16.17.17;.6 .08 .08 .08 .08 08];
你估计反式
和工作
如下:
[TRANS_EST2, EMIS_EST2] = hmmtrain(seq, TRANS_GUESS, EMIS_GUESS) 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
hmmtrain
使用迭代算法来改变矩阵TRANS_GUESS
和EMIS_GUESS
因此,在每一步中,调整后的矩阵更有可能生成观察到的序列,seq
.当两个连续迭代的矩阵在一个小的公差内时,算法停止。
如果算法在最大迭代次数内未能达到此公差,其默认值为One hundred.
,算法暂停。在这种情况下,hmmtrain
的最后一个值TRANS_EST
和EMIS_EST
并发出警告,说没有达到容忍。
如果算法不能达到期望的容忍值,则使用命令增加最大迭代次数的默认值:
hmmtrain (seq TRANS_GUESS、EMIS_GUESS maxiterations,麦克斯特)
在哪里麦克斯特
为算法执行的最大步数。
使用命令更改默认的容忍值:
hmmtrain(seq, TRANS_GUESS, EMIS_GUESS, 'tolerance', tol)
在哪里托尔
为期望的公差值。增加…的价值托尔
使算法暂停更快,但结果不太准确。
两个因素降低了的输出矩阵的可靠性hmmtrain
:
该算法收敛到一个不代表真实跃迁矩阵和发射矩阵的局部极大值。如果你怀疑这一点,对矩阵使用不同的初始猜测TRANS_EST
和EMIS_EST
.
序列seq
可能太短而不能正确训练矩阵。如果你怀疑这一点,使用较长的序列seq
.
发射序列的后验状态概率seq
模型在生成符号时处于特定状态的条件概率是多少seq
,考虑到seq
就会发出。计算后态概率hmmdecode
:
PSTATES = hmmdecode (seq,反式工作)
输出PSTATES
是一个米——- - - - - -l矩阵,米状态数是和吗l为长度seq
.PSTATES (i, j)
模型处于状态的条件概率是多少我
当它产生j
th的象征seq
,考虑到seq
就会发出。
hmmdecode
在第一次排放之前,从第0步处于状态1的模型开始。PSTATES(我,1)
为模型在接下来的步骤1中处于状态I的概率。要改变初始状态,请看改变初始状态分布.
返回序列概率的对数seq
,使用的第二个输出参数hmmdecode
:
[PSTATES, logpseq] = hmmdecode (seq,反式工作)
随着序列长度的增加,序列的概率趋于0,而足够长的序列的概率小于计算机所能表示的最小正数。hmmdecode
返回避免此问题的概率的对数。
默认情况下,Statistics和Machine Learning Toolbox隐藏的Markov模型函数从状态1开始。换句话说,初始状态的分布所有的概率质量都集中在状态1。为了分配一个不同的概率分布,p= (p1,p2、……p米),米初始状态,执行以下操作:
创建一个米+ 1 -米+1扩充转移矩阵, 形式如下:
在哪里T是真转移矩阵。第一列 包含米+ 1 0。p和必须为1。
创建一个米+ 1 -N增强发射矩阵, ,其形式如下:
如果转移矩阵和发射矩阵反式
和工作
,您可以使用以下命令创建增广矩阵:
TRANS_HAT = [0 p;0(大小(反式,1),1)反式);EMIS_HAT =[0(1、大小(工作,2));工作);
hmmdecode
|hmmestimate
|hmmgenerate
|hmmtrain
|hmmviterbi