主要内容

隐马尔可夫模型

隐马尔科夫模型(HMM)简介

一个隐马尔可夫模型(HMM)是一种观察排放序列,但不知道模型生成排放所经历的状态序列的模型。隐马尔可夫模型分析旨在从观察数据中恢复状态序列。

作为一个例子,考虑具有两个状态和六个可能的排放的马尔可夫模型。该模型使用:

  • 一个红色骰子,有六个面,标记为1到6。

  • 一种绿色模具,有十二个面,其中五个面标记为2到6,其余七个面标记为1。

  • 一个加权的红硬币,正面的概率是。9反面的概率是。1。

  • 一种加权的绿色硬币,正面概率为.95,反面概率为.05。

该模型根据以下规则从集合{1,2,3,4,5,6}中创建一个数字序列:

  • 首先滚动红色骰子,写下出现的数字,也就是发射量。

  • 掷红色硬币并执行以下操作之一:

    • 如果结果是正面,掷红色骰子并写下结果。

    • 如果结果为尾部,则滚动绿色模具并记录结果。

  • 在随后的每一步中,你抛的硬币颜色与你在前一步中掷出的骰子颜色相同。如果硬币正面朝上,就像前一步一样掷相同的骰子。如果硬币反面朝上,换到另一个骰子。

该模型的状态图有两种状态,红色和绿色,如下图所示。

您可以通过滚动与该状态相同颜色的骰子来确定该状态的发射量。你可以通过投掷与状态相同颜色的硬币来决定到下一个状态的转变。

转换矩阵为:

T 0.9 0.05 0.1 0.95

排放矩阵为:

E 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,您可能会怀疑模型处于绿色状态,但您无法确定,因为您无法看到正在滚动的模具的颜色。

隐马尔可夫模型提出了以下问题:

  • 给定一系列排放,最有可能的状态路径是什么?

  • 给定一系列排放,如何估计模型的过渡和排放概率?

  • 问题是什么转发概率模型生成一个给定的序列?

  • 问题是什么后验概率模型在序列中的任意点处于特定状态?

分析隐马尔可夫模型

与隐马尔可夫模型相关的统计学和机器学习工具箱™函数有:

  • hmmgenerate-从马尔可夫模型中生成一系列状态和排放

  • hmmestimate-从排放序列和已知状态序列中计算过渡和排放概率的最大似然估计

  • hmmtrain-从排放序列计算过渡和排放概率的最大似然估计

  • hmmviterbi-计算隐藏马尔可夫模型的最可能状态路径

  • HMM编码-计算一系列排放的后验概率

本节将展示如何使用这些函数来分析隐马尔可夫模型。

生成测试序列

下面的命令为中描述的模型创建转换和发射矩阵隐马尔科夫模型(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

[顺序,状态]=hmmgenerate(1000,TRANS,emi);

输出seq是排放和产出的顺序吗是状态的顺序。

hmmgenerate从步骤0的状态1开始,转换到状态1在步骤1,返回1作为第一个条目.要改变初始状态,请看改变初始状态分布

状态序列估计

给定转移矩阵和发射矩阵反式工作,函数hmmviterbi使用Viterbi算法来计算模型最可能经过的状态序列,以生成给定序列seq的排放:

likelystates=hmmviterbi(顺序、转换、EMI);

似是而非一个序列的长度和seq

检验…的准确性hmmviterbi,计算实际序列的百分比这和序列是一致的似是而非

总和(状态==可能状态)/1000 ans=0.8200

在这种情况下,最有可能的状态序列与随机序列一致的概率为82%。

估算过渡和排放矩阵

的函数hmmestimatehmmtrain估计过渡和排放矩阵反式工作给定一个序列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

你可以将输出与原始的跃迁和发射矩阵进行比较,反式工作

TRANS-TRANS=0.9000 0.1000 0.0500 0.9500 emi-emi=0.1667 0.1667 0.1667 0.1667 0.5833 0.0833 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你猜呢因此,在每一步,调整后的矩阵更有可能生成观测序列,seq. 当两个连续迭代中的矩阵彼此之间的公差很小时,该算法停止。

如果算法在最大迭代次数内未能达到此公差,其默认值为One hundred.,算法暂停。在这种情况下,hmmtrain的最后一个值TRANS_EST排放量并发出警告称未达到公差。

如果算法不能达到期望的容忍值,则使用命令增加最大迭代次数的默认值:

hmmtrain(序列、TRANS_GUESS、EMIS_GUESS、'maxiterations',maxiter)

在哪里麦克斯特为算法执行的最大步数。

使用以下命令更改公差的默认值:

hmmtrain(序号、TRANS_GUESS、EMIS_GUESS、公差、tol)

在哪里托尔为期望的公差值。增加…的价值托尔使算法暂停更快,但结果不太准确。

两个因素降低了的输出矩阵的可靠性hmmtrain

  • 该算法收敛到一个不代表真实跃迁矩阵和发射矩阵的局部极大值。如果你怀疑这一点,对矩阵使用不同的初始猜测TRANS_EST排放量

  • 序列seq可能太短,无法正确训练矩阵。如果您怀疑这一点,请使用更长的序列进行测试seq

后验状态概率估计

发射序列的后验状态概率seq模型在生成符号时处于特定状态的条件概率是多少seq,考虑到seq发射。你可以用HMM编码

PSTATES = hmmdecode (seq,反式工作)

输出PSTATES是一个-借-l矩阵,状态数是和吗l长度是多少seqPSTATES(i,j)模型处于状态的条件概率是多少当它生成j符号seq,考虑到seq就会发出。

HMM编码在第一次发射之前,从第0步处于状态1的模型开始。PSTATES(我,1)为模型在接下来的步骤1中处于状态I的概率。要改变初始状态,请看改变初始状态分布

返回序列概率的对数seq,使用的第二个输出参数HMM编码

[PSTATES, logpseq] = hmmdecode (seq,反式工作)

随着序列长度的增加,序列的概率趋于0,并且足够长的序列的概率小于计算机能够表示的最小正数。HMM编码返回避免此问题的概率的对数。

改变初始状态分布

默认情况下,Statistics和Machine Learning Toolbox隐藏的Markov模型函数从状态1开始。换句话说,初始状态的分布所有的概率质量都集中在状态1。为了分配一个不同的概率分布,p= [p1p2、……p],致初始状态,执行以下操作:

  1. 创建一个+ 1 -+1扩充转移矩阵, T 以下列形式提交:

    T 0 p 0 T

    在哪里T是真正的转移矩阵。第一列 T 包含+1零。p和必须为1。

  2. 创建一个+ 1 -N增强发射矩阵, E ,其形式如下:

    E 0 E

如果转移矩阵和发射矩阵反式工作,您可以使用以下命令创建增广矩阵:

TRANS_HAT=[0p;零(大小(TRANS,1),1)TRANS];EMIS_HAT=[零(1,大小(EMIS,2));EMIS];

另请参阅

||||

相关的话题