Matlab - 生成HMM

时间:2014-03-25 13:00:59

标签: matlab hidden-markov-models viterbi

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

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

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

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

那里是否有一个特定的库,这将使我能够执行这样的程序以模拟一系列观察?

1 个答案:

答案 0 :(得分:2)

定义您至少需要的离散度:您的模型的多个州nn X n转换概率,m可见观察(排放)列表和{ {1}}矩阵,其中包含每种状态下每种发射的概率。您所拥有的是一系列观察,仅从您那里就无法定义HMM。

所以我首先看看this教程表格数学,以掌握基础知识。这里使用的函数是统计工具箱的一部分。

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

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

4 5

你还猜测,在经过几次射击之后状态会从状态1变为2然后停留在那里。你的猜测有点像这样:

>> 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

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

>> 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 hmmestimate