2013-03-12 118 views
6

我是隐马尔可夫模型的新手。我理解主要思想,并且我尝试了一些Matlab内置的HMM函数来帮助我理解更多。隐马尔可夫模型每种状态的多个观察值

如果我有观察序列和相应的状态,例如

seq = 2  6  6  1  4  1  1  1  5  4 
states = 1  1  2  2  2  2  2  2  2  2 

我可以使用hmmestimate函数来计算过渡和发射概率矩阵为:

[TRANS_EST, EMIS_EST] = hmmestimate(seq, states) 

TRANS_EST =

0.5000 0.5000 
    0 1.0000 

EMIS_EST =

 0 0.5000   0   0   0 0.5000 
0.5000   0   0 0.2500 0.1250 0.1250 

在这个例子中,观察结果只是一个值。

下面的示例图片描述了我的情况。 My situation 如果我有状态:{睡眠,工作,体育},并且我有一组观察值:{发光,开灯,心率> 100 .....} 如果我使用数字来表示每个观察值,在我的处境每个州在同一时间有多个观测,

seq = {2,3,5}  {6,1}  {2}  {2,3,6}  {4}  {1,2}  {1}  
states = 1    1  2   2   2  2  2  

我不知道如何实现这个Matlab中得到的过渡和发射概率矩阵。我很迷茫,下一步该做什么?我使用正确的方法吗?

谢谢!

+0

嗨,leon,我正在处理类似的问题。你有没有找到解决办法?我一直在广泛搜索,但甚至找不到一篇论文或一个实现示例来验证具有多个观测变量对于HMM是可能的。据我所知,具有多个观察序列(具有相同变量)是可能的,但如果序列实际上属于不同的变量,我不确定情况是什么。 – Rhubarb 2013-07-03 16:25:53

+0

Hi Berkan,HMM不适合这个问题。我正在研究其他选项 – leon 2013-07-04 17:13:44

+0

我刚刚在您的博客上发送了一条消息。你能详细说明为什么你认为HMM不适合这个吗?我一直在阅读这一个星期,如上所述,对这个问题还不太确定。我认为你一直在看问题的时间比我长,所以任何指示或解释(至于为什么不可能)将非常受欢迎。 – Rhubarb 2013-07-05 08:51:22

回答

3

如果你知道隐藏状态序列,那么最大似然估计是琐碎:这是规范化的经验计数。换句话说,计算转换和排放,然后将每行中的元素除以该行中的总计数。

在你有多个观测变量的情况下,将观测值编码为一个向量,其中每个元素给出该时间步长随机变量之一的值,例如, '{灯= 1,电脑= 0,心率> 100 = 1,位置= 0}'。关键是你需要在每个时间步骤有相同数量的观测值,否则事情会变得更加困难。

+0

感谢您的回答,我stil不知道如何把矢量插入matlab hmmestimate函数? – leon 2013-03-13 09:53:06

+0

你不能使用hmmestimate,但你可以很容易地写一个for循环,在每个状态上循环并计算输出转换和排放,然后正常化。 – jerad 2013-03-13 15:36:08

1

我想你有两个选择。 1)将多个观察值编码成一个数字。例如,如果您知道观测值的最大可能值为N,并且在每个状态下最多可能有K个观测值,则可以将观测值的任意组合编码为介于0和N^K - 1之间的数字。这样做,你假设{2,3,6}和{2,3,5}不分享任何东西,它们是两个完全不同的观察结果。 2)或者你可以有多个排放分布的每个州。我没有使用matlab中的内置函数进行HMM估计,所以我不知道它是否支持它。但是这个想法是,如果你在一个州有多个排放分配,排放可能性只是它们的产物。这就是杰拉德所暗示的。

相关问题