基文·墨菲';s hmm matlab工具箱断言错误

基文·墨菲';s hmm matlab工具箱断言错误,matlab,hidden-markov-models,Matlab,Hidden Markov Models,我正在做一个需要使用隐马尔可夫模型的项目。我下载了凯文·墨菲的工具箱。我在使用上有一些问题。在工具箱网页中,他说dhmm_em和dhmm_logprob的第一个输入是符号序列数据。在他们的例子中,他们给出了行向量作为数据。所以,当我把我的符号序列作为行向量时,我得到了错误 ??? Error using ==> assert at 9 assertion violated: Error in ==> fwdback at 105 assert(approxeq(sum(alpha(

我正在做一个需要使用隐马尔可夫模型的项目。我下载了凯文·墨菲的工具箱。我在使用上有一些问题。在工具箱网页中,他说dhmm_em和dhmm_logprob的第一个输入是符号序列数据。在他们的例子中,他们给出了行向量作为数据。所以,当我把我的符号序列作为行向量时,我得到了错误

??? Error using ==> assert at 9
assertion violated:

Error in ==> fwdback at 105
assert(approxeq(sum(alpha(:,t)),1))

Error in ==> dhmm_logprob at 17
  [alpha, beta, gamma, ll] = fwdback(prior,
  transmat, obslik, 'fwd_only', 1);

Error in ==> mainCourseProject at 110
            loglik(train_act) =
            dhmm_logprob(orderedSymbols,
            hmm{train_act}.prior,
            hmm{train_act}.trans,
            hmm{act}.emiss);
然而,在给出此错误之前,代码适用于某些符号向量。当我将数据作为列向量时,函数工作正常,没有错误。那么,为什么我会出现这个错误呢

你可能会说,我应该给出的不是单个向量,而是向量集,我还尝试在结构中收集我的特征向量,并给出行向量,但没有改变,我仍然得到断言错误


顺便说一句,我的符号序列没有任何零,我所做的一切几乎与他们在示例中所展示的一样,因此如果有人能帮助我,我将不胜感激。

此错误消息及其引用的代码是人类可读的。断言是程序员为确保满足某些条件而设置的保护。在这种情况下,条件是什么
approxeq(sum(alpha(:,t)),1)
我冒昧地说,approxeq希望值近似相等,所以这可以归结为:
sum(alpha(:,t))~=1


在不了解任何代码的情况下,我也猜这些是指概率。节点边的概率之和必须为1。希望这能让您走上一条高效的调试之路。如果您无法找出产生这种情况的输入有什么问题,请开始深入代码,看看这个alpha向量来自何处,以及它是如何无效的。

我不确定,但从上面显示的函数调用堆栈来看,最后一行不是应该是
hmm{train_act}.emis
而不是
hmm{act}.emis
。 换句话说,在计算序列的对数概率时,应该传递属于同一HMM模型的组件(转移矩阵、发射矩阵和先验概率)

顺便说一下,代码中的断言是一个健全的检查,即概率向量的总和应为
1
。通常,当使用非常小的值(对数概率)时,数值稳定性问题可能会蔓延到。。。您可以编辑APPROXEQ函数,通过给它一个更大的误差范围来稍微放松比较