8

我是隐马尔可夫模型的新手。我理解了主要思想,我尝试了一些 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

在这个例子中,观察只是一个单一的值。

下面的示例图片描述了我的情况。 我的情况 如果我有状态:{Sleep, Work, Sport},并且我有一组观察结果:{lightoff, light on, heart rate>100 .....} 如果我使用数字来表示每个观察结果,在我的情况下每个state 同时有多个观察值,

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

我不知道如何在 Matlab 中实现这一点以获得转换和发射概率矩阵。我很迷茫,下一步该怎么办?我是否使用了正确的方法?

谢谢!

4

2 回答 2

4

如果您知道隐藏状态序列,那么最大似然估计是微不足道的:它是归一化的经验计数。换句话说,计算跃迁和排放,然后将每行中的元素除以该行中的总计数。

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

于 2013-03-13T04:29:01.560 回答
1

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

于 2013-03-13T04:43:12.470 回答