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



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

文件 "/Library/Python/2.7/site-packages/sklearn/hmm.py",第 443 行,适合

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

值错误:启动概率的总和必须为 1.0

如果我消除某些特征(每个观测值少于 13 个特征),它仍然有效。我已经检查了所有输入是否有效,并且每个训练示例仅包含 numpy.float64s 的 2d 数组。关于出了什么问题的任何想法?谢谢!

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

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

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

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

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

模型只是在拟合数据时遇到问题。 你可以通过一些围绕它的代码来继续尝试。 您可能需要添加一点以使它在x多次尝试后停止。 如果这仍然不起作用,请更改隐藏状态的数量。

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

我只是在使用GaussianHMM时遇到了同样的问题。我发现问题来自这样一个事实,即我正在输入分类器整数值,并且它需要浮点值。当我意识到多项式HMM只接受连续值时,我尝试使用浮点数,并且它奏效了!

看起来hmmlearn包存在一些问题。以下内容对我有用

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

这应该有效。hmmlearn提出了一个问题,但没有得到必要的关注。链接

学分 - https://github.com/wblgers/hmm_speech_recognition_demo

相关内容

  • 没有找到相关文章