- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用“MultinomialHMM”模块(scikit-learn 库的一部分)构建一个具有 2 个状态和 3 个可能观察值的玩具隐马尔可夫模型。我的问题是,即使状态的观测概率加起来大于 1 或小于 1,模块也会接受(并生成预测)。示例:
import numpy
from sklearn import hmm
startprob = numpy.array([0.5, 0.5])
transition_matrix = numpy.array([[0.5, 0.5], [0.5, 0.5]])
model = hmm.MultinomialHMM(2, startprob, transition_matrix)
model.emissionprob_ = numpy.array([[0, 0, 0.2], [0.6, 0.4, 0]])
请注意,状态 0 发出的信号的概率为 [0,0,0.2](加起来为 0.2)。当要求生成观察样本时,模块不会提示:
model.sample(10)
(array([1, 0, 0, 0, 0, 2, 1, 0, 0, 0], dtype=int64), array([1, 1, 0, 1, 1, 0, 1, 0, 0, 0]))
我还可以指定总和大于 1 的排放概率,并且模型会毫无怨言地生成预测。
这是期望的行为吗?概率是否以某种方式标准化?如果是这样,怎么办?
最佳答案
首先,sklearn
中已弃用 HMM
。您需要查看https://github.com/hmmlearn/hmmlearn ,这是Python中的隐马尔可夫模型,具有类似scikit-learn的API
顺便说一句,你问的问题似乎是一个错误。当您设置emissionprob_
时,将调用_set_emissionprob
。这会尝试通过调用 normalize(emissionprob)
来重新标准化:
if not np.alltrue(emissionprob):
normalize(emissionprob)
但是,这段代码有两个问题:
如此修改为
if not np.alltrue(emissionprob):
normalize(emissionprob, 1) # added axis term
和
def normalize(A, axis=None):
A += EPS
Asum = A.sum(axis)
if axis and A.ndim > 1:
# Make sure we don't divide by zero.
Asum[Asum == 0] = 1
shape = list(A.shape)
shape[axis] = 1
Asum.shape = shape
A /= Asum # this is true in-place, it was `return A / Asum` <<= here
关于python - Scikit 的隐马尔可夫模型接受加起来不等于 1 的观察概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23520101/
我正在尝试执行 vagrant up 但一直遇到此错误: ==> default: IOError: [Errno 13] Permission denied: '/usr/local/lib/pyt
我在容器 div 中有一系列动态创建的不同高度的 div。 Varying text... Varying text... Varying text... Varying text.
通过 cygwin 运行 vagrant up 时遇到以下错误。 stderr: /bin/bash: /home/vagrant/.ansible/tmp/ansible-tmp-14872260
今天要向小伙伴们介绍的是一个能够快速地把数据制作成可视化、交互页面的 Python 框架:Streamlit,分分钟让你的数据动起来! 犹记得我在做机器学习和数据分析方面的毕设时,
我是 vagrant 的新手,正在尝试将第二个磁盘添加到我正在用 vagrant 制作的虚拟机中。 我想出了如何在第一次启动虚拟机时连接磁盘,但是当我关闭机器时 然后再次备份(使用 'vagrant
我是一名优秀的程序员,十分优秀!