假设我有一组随机的观察结果:
obs = [1, 2, 3, 5, 5, 5, 5, 5]
这些观察代表 HMM 中的 1 个状态。在 Matlab 中,我想对这些观察进行建模,这样我就可以使用 Viterbi 算法来创建一种分类器。
我遇到的问题是,在 Matlab 中生成模型方面,我真的不知道从哪里开始。工具箱中的功能似乎没有这个。
是否有一个特定的库,可以让我执行这样的程序来模拟一系列观察?
假设我有一组随机的观察结果:
obs = [1, 2, 3, 5, 5, 5, 5, 5]
这些观察代表 HMM 中的 1 个状态。在 Matlab 中,我想对这些观察进行建模,这样我就可以使用 Viterbi 算法来创建一种分类器。
我遇到的问题是,在 Matlab 中生成模型方面,我真的不知道从哪里开始。工具箱中的功能似乎没有这个。
是否有一个特定的库,可以让我执行这样的程序来模拟一系列观察?
要定义一个离散的 hmm,您至少需要:n
模型的多个状态、一个n X n
转换概率、一个可能的m
观测值(排放)列表和一个n X m
矩阵,其中包含每个状态中每个排放的概率。您所拥有的是一系列观察结果,仅凭这一点您无法定义 HMM。
所以我会先看一下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 函数hmmestimate
或hmmtrain
.