Scikit Learn Gaussian HMM:ValueError:startprob必须总和为1.0

时间:2013-09-13 23:22:58

标签: python python-2.7 numpy scikit-learn hidden-markov-models

我目前正在使用Scikit Learn,并且在尝试训练高斯HMM时遇到了以下问题:

  

文件“/Library/Python/2.7/site-packages/sklearn/hmm.py”,第443行,in fit

self._do_mstep(stats, self.params)
     

文件“/Library/Python/2.7/site-packages/sklearn/hmm.py”,第798行,在_do_mstep中

super(GaussianHMM, self)._do_mstep(stats, params)
     

文件“/Library/Python/2.7/site-packages/sklearn/hmm.py”,第580行,在_do_mstep中

np.maximum(self.startprob_prior - 1.0 + stats['start'], 1e-20))
     

文件“/Library/Python/2.7/site-packages/sklearn/hmm.py”,第476行,在_set_startprob中

raise ValueError('startprob must sum to 1.0')
     

ValueError:startprob必须总和为1.0

如果我消除了一些功能(每次观察少于13个功能),它仍然有效。我已检查所有输入是否有效,并且每个训练示例仅包含ndy.float64s的2d阵列。什么是错误的任何想法? 谢谢!

5 个答案:

答案 0 :(得分:3)

我通过将params属性设置为训练集中所有唯一值的集合来修复此问题。

param=set(train.ravel())
model=hmm.GaussianHMM(n_components=6, covariance_type="full", n_iter=100,params=param)

train是我用来拟合模型的numpy数组列表。

初始参数设置为所有ascii字符的字符串。

答案 1 :(得分:1)

我在使用GaussianHMM时遇到了同样的问题。我发现问题来自于我正在提供分类器整数值而它需要浮点值。当我意识到MultinomialHMM只接受连续值时,我尝试使用浮点数,并且它有效!

答案 2 :(得分:0)

我遇到了同样的问题。我可以通过调整模型的隐藏状态数来解决它。看来,根据可用数据和状态数量,模型无法正确拟合

答案 3 :(得分:0)

模型无法拟合数据。您可以通过它周围的一些代码来继续尝试。您可能需要添加一点以使其在x次尝试后停止。如果仍然无效,请更改隐藏状态的数量。

while True:
  try:
    model.fit([data])
    break

答案 4 :(得分:0)

hmmlearn软件包似乎存在一些问题。以下对我有用

  • 卸载hmmlearn的pip版本:pip uninstall hmmlearn
  • here获取hmmlearn的来源。
  • herehere删除-1.0
  • 使用python setup.py install
  • 进行安装

这应该有效。 hmmlearn出现了一个问题,但没有引起注意。 link

信用-https://github.com/wblgers/hmm_speech_recognition_demo