Matlab - 生成 HMM

Posted

技术标签:

【中文标题】Matlab - 生成 HMM【英文标题】:Matlab - Generating HMM 【发布时间】:2014-05-03 08:20:08 【问题描述】:

假设我有一组随机的观察结果:

obs = [1, 2, 3, 5, 5, 5, 5, 5]

这些观察代表 HMM 中的 1 个状态。在 Matlab 中,我想对这些观察进行建模,这样我就可以使用 Viterbi 算法来创建一种分类器。

我遇到的问题是,在 Matlab 中生成模型方面,我真的不知道从哪里开始。工具箱中的功能似乎没有这个。

那里有一个特定的库,可以让我执行这样的程序来模拟一系列观察吗?

【问题讨论】:

定义一个离散的 hmm 你至少需要:多个状态 n 用于您的模型,n X n 转换概率,m 可能观察(排放)列表和 @987654325 @ 矩阵,每个状态下每个发射的概率。您所拥有的是一系列观察结果,仅凭这一点您无法定义 HMM。 @ben 谢谢!但是,我确实有一个 C++ 库,可以仅根据观察结果生成 HMM 并给出状态总数?这会计算转换概率和排放量。 【参考方案1】:

要定义一个离散的 hmm,您至少需要:模型的多个状态 nn X n 转换概率、m 可能观察值(排放)的列表和带有概率的 n X m 矩阵对于每个州的每个排放。您所拥有的是一系列观察结果,仅凭这一点您无法定义 HMM。

因此,我将首先查看 this 教程表格 mathworks 以掌握基础知识。那里使用的函数是统计工具箱的一部分。

然后,您首先猜测 HMM 中的统计数据数量。假设您有 2 个统计数据(如上面提到的教程中所示) 下一步将是为发射和转移矩阵创建初始猜测。如果您的可能排放量是1 2 3 4 5 并且您的状态是2,那么您将得到一个2x5 排放概率矩阵和一个2x2 转换矩阵。

现在假设您猜测状态 1 产生 1 2 3 而状态 2 产生 4 5 然后(均匀分布)您的发射矩阵将如下所示:

>> emis=[1/3 1/3 1/3 0 0; 0 0 0 1/2 1/2]
emis =
    0.3333    0.3333    0.3333         0         0
         0         0         0    0.5000    0.5000

您还猜测,在几个发射后,状态确实从状态 1 变为状态 2,然后停留在那里。你的猜测会是这样的:

>> trans = [.8 .2; 0 1]
trans =
    0.8000    0.2000
         0    1.0000

你可以看看你的 HMM 会生成什么:

>> [seq,states] = hmmgenerate(6, trans, emis)
seq =
     2     1     3     2     4     5

states =
     1     1     1     1     2     2

从那时起,您可以使用观察序列来训练您的 HMM,并使用函数 hmmestimatehmmtrain

【讨论】:

以上是关于Matlab - 生成 HMM的主要内容,如果未能解决你的问题,请参考以下文章

语音识别基于matlab GUI HMM 0~9数字语音识别含Matlab源码 1393期

语音识别基于matlab GUI HMM 0~9数字和汉字语音识别(带面板)含Matlab源码 1716期

信号处理基于HMM的睡眠状态检测matlab源码

语音识别基于matlab GUI HMM 0~9数字和汉字语音识别(带面板)含Matlab源码 1716期

语音识别基于隐马尔可夫模型(HMM)的孤立字语音识别matlab源码

sh 从gt_hmm生成断点基因型