主要内容

隐马尔可夫模型(HMM)

介绍了隐马尔可夫模型(HMM)

一个隐马尔可夫模型(嗯)是一个观察序列的排放,但是不知道的状态序列模型生成排放的经历。隐马尔可夫模型的分析试图从观测数据序列的状态中恢复过来。

作为一个例子,考虑一个马尔可夫模型与两个国家和六个可能的排放。模型的用途:

  • 红色的死,有六个面,标记为1到6。

  • 绿色的死,有十二个,其中有五个标签2到6,而其余七边是标记为1。

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

  • 加权绿色硬币,正面的概率是.95,反面的概率是0。。

模型创建一个序列的数字从集合{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 s,你可能会怀疑,模型是在绿色的状态,但是你不能确定,因为你无法看到的颜色死滚。

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

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

  • 给定一系列的排放,你怎么能估计过渡和排放模型的概率?

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

  • 是什么后验概率模型是在一个特定的状态序列中的任何时候?

隐马尔可夫模型分析

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

  • hmmgenerate——生成序列的状态和排放的马尔可夫模型

  • hmmestimate——计算极大似然估计的过渡和发射概率的排放和序列已知序列的状态

  • hmmtrain——计算极大似然估计的过渡和发射概率顺序排放

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

  • hmmdecode——计算后状态概率的顺序排放

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

生成测试序列

以下命令创建的过渡和发射矩阵模型中描述介绍了隐马尔可夫模型(HMM):

反式= [。9。1;. 05 .95];工作= (1/6,1/6,1/6,1/6,1/6,1/6,…7/12,1/12,1/12,1/12,1/12,1/12);

生成一个随机序列的状态和排放模型,使用hmmgenerate:

[seq,州]= hmmgenerate(1000年,反式工作);

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

hmmgenerate在状态1步骤0开始,使过渡到状态1在步骤1,并返回1作为第一个进入。改变初始状态,明白了改变初始状态分布

估计的状态序列

考虑到过渡和发射矩阵反式工作,函数hmmviterbi利用维特比算法计算最可能的状态序列模型会通过产生一个给定的序列seq的排放:

likelystates = hmmviterbi教育管理信息系统(seq,反式);

likelystates是一个序列的长度seq

测试的准确性hmmviterbi的比例,计算实际的序列同意的序列likelystates

sum(状态= = likelystates) / 1000 ans = 0.8200

在这种情况下,最可能的序列州同意随机序列的82%的时间。

估计过渡和发射矩阵

的函数hmmestimatehmmtrain估计和发射矩阵的过渡反式工作给定一个序列seq的排放。

使用hmmestimate这个函数hmmestimate要求你知道序列的状态这个模型了通过生成seq

以下需要排放和状态序列并返回的估计转换和发射矩阵:

[TRANS_EST, EMIS_EST] = hmmestimate (seq,各州)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

你可以比较与原过渡和发射矩阵,输出反式工作:

反式反式= 0.9500工作工作= 0.1667 0.1667 0.9000 0.1000 0.0500 0.1667 0.1667 0.1667 0.1667 0.5833 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 EMIS_EST2 = = 0.2286 0.7714 - 0.0032 0.9968 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_GUESSEMIS_GUESS这每一步调整矩阵更容易生成观察序列,seq。算法停止在两个连续的迭代矩阵小公差之内。

如果该算法无法达到这个公差最大迭代数,其默认值One hundred.时,算法停止。在这种情况下,hmmtrain返回的最后一个值TRANS_ESTEMIS_EST发出警告说,宽容并没有达成。

如果该算法无法达到所需的公差,增加默认值的最大迭代数的命令:

hmmtrain (seq TRANS_GUESS、EMIS_GUESS maxiterations,麦克斯特)

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

改变默认值公差的命令:

hmmtrain (seq TRANS_GUESS EMIS_GUESS,“宽容”,托尔)

在哪里托尔的期望值是宽容。增加的价值托尔使算法更早停止,但结果不太准确。

两个因素减少输出矩阵的可靠性hmmtrain:

  • 该算法收敛于一个局部最大值,不代表真正的过渡和发射矩阵。如果你怀疑这一点,使用不同的初始猜测矩阵TRANS_ESTEMIS_EST

  • 序列seq可能太短,适当的培训矩阵。如果你怀疑这一点,使用时间序列seq

估计后状态概率

后状态发射序列的概率seq的条件概率模型是在一个特定状态时生成一个符号seq,考虑到seq就会发出。你计算后验概率与状态hmmdecode:

PSTATES = hmmdecode (seq,反式工作)

输出PSTATES是一个——- - - - - -l矩阵,的状态和数量吗l的长度是seqPSTATES (i, j)的条件概率模型是在国家吗当它产生jth的象征seq,考虑到seq就会发出。

hmmdecode开始与模型在状态1 0,步前第一次发射。PSTATES(我,1)状态的概率模型是我在以下步骤1。改变初始状态,明白了改变初始状态分布

返回的对数序列的概率seq,使用第二个输出参数hmmdecode:

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

序列的概率趋于0随着序列的长度增加,和一个足够长的序列的概率小于最小的正数你的电脑可以表示。hmmdecode返回的概率的对数来避免这个问题。

改变初始状态分布

默认情况下,隐马尔可夫模型统计和机器学习的工具箱函数在状态1开始。换句话说,初始状态的分布概率的质量集中在状态1。分配不同的概率分布,p= (p1,p2、……p),初始状态,请执行以下操作:

  1. 创建一个+ 1 -+ 1扩充转移矩阵, T ^ 下面的形式:

    T ^ = ( 0 p 0 T ]

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

  2. 创建一个+ 1 -N增强发射矩阵, E ^ ,具有以下形式:

    E ^ = ( 0 E ]

如果过渡和发射矩阵反式工作分别用以下命令创建增广矩阵:

TRANS_HAT = [0 p;0(大小(反式,1),1)反式);EMIS_HAT =[0(1、大小(工作,2));工作);

另请参阅

||||

相关的话题