隐马尔可夫模型(HMM)
介绍了隐马尔可夫模型(HMM)
一个隐马尔可夫模型(嗯)是一个观察序列的排放,但是不知道的状态序列模型生成排放的经历。隐马尔可夫模型的分析试图从观测数据序列的状态中恢复过来。
作为一个例子,考虑一个马尔可夫模型与两个国家和六个可能的排放。模型的用途:
红色的死,有六个面,标记为1到6。
绿色的死,有十二个,其中有五个标签2到6,而其余七边是标记为1。
加权红色硬币,正面的概率是。9,反面的概率是。1。
加权绿色硬币,正面的概率是.95,反面的概率是0。。
模型创建一个序列的数字从集合{1,2,3,4,5,6}用以下规则:
首先滚红死,写下出现的数量,即发射。
把红色的硬币和做下列之一:
如果结果是正面,把红色的死和结果写下来。
如果结果是反面,把绿色的死和结果写下来。
在每个后续步骤,你抛硬币一样的颜色你滚的死前一步。硬币是正面,如果卷一样死在前面的步骤。如果硬币是反面的,切换到其他死亡。
这个模型有两个州的状态图,红色和绿色,如下列图所示。
你确定发射状态通过轧制模具一样的颜色。您确定过渡到下一个状态通过抛硬币一样的颜色。
过渡矩阵:
排放矩阵:
模型是隐藏的,因为你不知道的状态序列的颜色硬币和骰子。然而,假设别人生成排放没有显示你掷骰子或硬币。所有你看到的顺序排放。如果你开始看到更多比其他数字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%的时间。
估计过渡和发射矩阵
的函数hmmestimate
和hmmtrain
估计和发射矩阵的过渡反式
和工作
给定一个序列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_GUESS
和EMIS_GUESS
这每一步调整矩阵更容易生成观察序列,seq
。算法停止在两个连续的迭代矩阵小公差之内。
如果该算法无法达到这个公差最大迭代数,其默认值One hundred.
时,算法停止。在这种情况下,hmmtrain
返回的最后一个值TRANS_EST
和EMIS_EST
发出警告说,宽容并没有达成。
如果该算法无法达到所需的公差,增加默认值的最大迭代数的命令:
hmmtrain (seq TRANS_GUESS、EMIS_GUESS maxiterations,麦克斯特)
在哪里麦克斯特
在算法执行步骤的最大数量。
改变默认值公差的命令:
hmmtrain (seq TRANS_GUESS EMIS_GUESS,“宽容”,托尔)
在哪里托尔
的期望值是宽容。增加的价值托尔
使算法更早停止,但结果不太准确。
两个因素减少输出矩阵的可靠性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
开始与模型在状态1 0,步前第一次发射。PSTATES(我,1)
状态的概率模型是我在以下步骤1。改变初始状态,明白了改变初始状态分布。
返回的对数序列的概率seq
,使用第二个输出参数hmmdecode
:
[PSTATES, logpseq] = hmmdecode (seq,反式工作)
序列的概率趋于0随着序列的长度增加,和一个足够长的序列的概率小于最小的正数你的电脑可以表示。hmmdecode
返回的概率的对数来避免这个问题。
改变初始状态分布
默认情况下,隐马尔可夫模型统计和机器学习的工具箱函数在状态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