我是隐马尔可夫模型的新手,目前正在尝试使用连续 HMM 来预测 R 中 UCI 人类活动识别数据集(由加速度计和陀螺仪值组成)上的 6 个活动。我有训练数据和测试数据,并且总共有 561 个功能。在阅读了几篇论文后,我制作了一个 6 状态 HMM,并使用我拥有的训练数据对其进行训练,假设这些状态代表要分类的一项活动。之后,我使用维特比来预测 HMM 应用于测试数据时最可能的序列。使用 HMM 的 depmixS4 包,我尝试输入这些代码:
hmm <- depmix(activity~1,nstates=6,data=train[,-562],family=multinomial("identity"))
fhmm <- fit(hmm)
hmm2 <- depmix(activity~1,nstates=6,data=test[,-562],family=multinomial("identity"))
hmm2 <- setpars(hmm2, getpars(fhmm))
viterbi(hmm2)
我惊讶地发现,当使用所有 561 个特征时,这些代码产生了 100% 的准确率(我使用 Jahmm 只获得了大约 80% 的准确率,但后来我无法使用它的所有 561 个特征,因为它挂起了)。 我实际上正在与 depmixS4 的开发者联系,他确认代码没问题,但也说,“请注意,下面的拟合模型实际上是观察到的或普通的模型 马尔可夫模型而不是隐马尔可夫模型,因为所有响应 概率是在边界处估计的。” 他所说的“响应概率在边界处估计”是什么意思?我尝试在网上搜索它的含义,但没有成功。
使用维特比不就意味着它确实是一个隐马尔可夫模型吗?我做错了吗?
请注意,“viterbi()”函数仍然是软件包中未发布的函数(开发人员友好地告诉我它以便能够尝试我的想法)。
在马尔可夫模型中,状态和观察序列之间存在一对一的对应关系。在隐马尔可夫模型中没有对应关系。此外,还有一个或多个隐藏状态:您无法通过查看相应的序列来判断系统的状态。
Viterbi 用于寻找 HMM 中状态的最可能序列。我不确定该包的作者为什么使用 Viterbi,也许他只是想表明 Viterbi 可以用于可观察状态。