- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
读完 Cam Davidson-Pilon 的 Probabilistic Programming & Bayesian Methods for Hackers ,我决定尝试使用 PyMC 解决隐马尔可夫模型 (HMM) 学习问题。到目前为止,代码不配合,但通过故障排除,我觉得我已经缩小了问题的根源。
将代码分解成更小的 block 并关注 t=0 时的初始概率和发射概率,我能够学习 t=0 时单个状态的发射/观测参数。但是,一旦我添加了另一个状态(总共两个状态),无论数据输入如何,参数学习的结果都是相同的(并且不正确)。所以,我觉得我一定是在代码的 @pm.deterministic
部分做错了,这不允许我从 Init
初始概率函数中采样。
通过这部分代码,我的目标是学习初始概率 p_bern
和发射概率 p_0
和 p_1
分别对应于状态 0 和 1。发射以状态为条件,这是我试图用我的 @pm.deterministic
函数表达的。我可以在这个确定性函数中使用“if”语句吗?这似乎是问题的根源。
# This code is to test the ability to discern between two states with emissions
import numpy as np
import pymc as pm
from matplotlib import pyplot as plt
N = 1000
state = np.zeros(N)
data = np.zeros(shape=N)
# Generate data
for i in range(N):
state[i] = pm.rbernoulli(p=0.3)
for i in range(N):
if state[i]==0:
data[i] = pm.rbernoulli(p=0.4)
elif state[i]==1:
data[i] = pm.rbernoulli(p=0.8)
# Prior on probabilities
p_bern = pm.Uniform("p_S", 0., 1.)
p_0 = pm.Uniform("p_0", 0., 1.)
p_1 = pm.Uniform("p_1", 0., 1.)
Init = pm.Bernoulli("Init", p=p_bern) # Bernoulli node
@pm.deterministic
def p_T(Init=Init, p_0=p_0, p_1=p_1, p_bern=p_bern):
if Init==0:
return p_0
elif Init==1:
return p_1
obs = pm.Bernoulli("obs", p=p_T, value=data, observed=True)
model = pm.Model([obs, p_bern, p_0, p_1])
mcmc = pm.MCMC(model)
mcmc.sample(20000, 10000)
pm.Matplot.plot(mcmc)
我已经尝试了以下无济于事:
@pm.potential
装饰器来create a joint distribution Init
位置的位置(您可以在代码中看到我的评论,我不确定该把它放在哪里)@pm.stochastic
编辑:根据克里斯的建议,我已将伯努利节点移到确定性之外。我还将代码更新为更简单的模型(伯努利观察而不是多项式),以便更轻松地进行故障排除。
感谢您的时间和关注。任何反馈都会受到热烈欢迎。另外,如果我遗漏了任何信息,请告诉我!
最佳答案
我会将这种随机性从确定性中移出。确定性节点的值应该完全由其父节点的值决定。将随机变量埋在节点中违反了这一点。
为什么要创建一个伯努利节点,并将其作为参数传递给确定性节点?
关于python - 可以在 PyMC 确定性函数中使用 "if"语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32019684/
我尝试移植简单的生存模型 from here (the first one in introduction)从 PyMC 2 到 PyMC 3。但是,我没有找到任何等效于“观察到”的装饰器,并且我尝试
我使用了基于 Clojure 的“圣公会”,我认为这对我不利。糟糕的文档和太小的社区无法寻求帮助。此外,我仍然无法熟悉基于 Scheme 的语言。所以我想将语言更改为基于 Python 的语言。 也许
我想对我在不使用 pymc 的情况下生成的示例使用 pymc 诊断和摘要功能。例如,我想在我自己的一组示例中使用 pymc 的 mc_error 例程。 一些 pymc 诊断函数可以采用 np.arr
我正在尝试在PyMC3中采样多个链。在PyMC2中,我将执行以下操作: for i in range(N): model.sample(iter=iter, burn=burn, thin =
有关如何使用PyMC将两个正态分布拟合到数据的信息,请参见a question on CrossValidated。 Cam.Davidson.Pilon的答案是使用伯努利分布将数据分配给两个法线之一
我正在尝试使用最大后验估计来估计泊松过程的速率,其中速率随时间变化。这是一个速率线性变化的简化示例 (λ = ax+b): import numpy as np import pymc # Obser
我正在用一个简单的多级模型尝试 PyMC3。当同时使用假数据和真实数据时,随机效应分布的轨迹会相互移动(见下图),并且似乎是同一轨迹的偏移量。这是 NUTS 的预期产物还是表明我的模型存在问题? 这是
我试图在通过 PyMC 的 MCMC 方法拟合变量时设置约束 例如,我在 PyMC 中定义了以下随机模型 import pymc as pm a=pm.Uniform('a',lower=0.,upp
尝试通过 conda 安装 pymc 时,我收到以下信息: C:\Anaconda>conda install -c https://conda.binstar.org/pymc pymc 正在获取包
如何在 PyMC3 中定义自定义似然?在 PyMC2 中,我可以使用 @pymc.potential .我尝试使用 pymc.Potential然而,在 PyMC3 中,似乎 bool 运算不能应用于
我正在尝试从随机 Petri 网模型中估计速率。我不明白为什么,但我得到了零概率错误,即使在给定我为速率定义的初始值的情况下,将数据数据与预期的观察次数完全对应。 例如,以下比率 [0.01, 2,
我正在尝试从 Infer.NET 移植一个模型,但我正在努力如何制作在 pymc3 中观察到的确定性变量? M,L ~ 伯努利 # doesn't work ... Deterministic("U
我已经开始试用 pymc3 并且需要实现多项逻辑回归模型。我研究了 twiecki 的教程,并且了解他对层次回归模型的实现(请参阅 https://twiecki.github.io/blog/201
我正在尝试使用 PyMC 实现一个非常简单的大数定律示例。目标是生成不同大小样本的许多样本平均值。例如,在下面的代码中,我重复采集 5 个样本组 (samples_to_average = 5),计算
这是 PyMC: Parameter estimation in a Markov system 的后续内容 我有一个由每个时间步的位置和速度定义的系统。系统的行为定义为: vel = vel + d
型号 我有以下统计模型: r_i ~ N(r | mu_i, sigma) mu_i = w . Q_i w ~ N(w | phi, Sigma) prior(phi, Sigma) = Norma
我正在尝试将负二项式混合物与 PyMC 拟合。看来我做错了什么,因为预测看起来与输入数据并不相似。问题可能出在负二项式参数的先验上。有什么建议吗? from sklearn.cluster i
我有三个关于装饰器的问题,我无法找到答案: Q1)PyMC 中装饰器的参数(@Deterministic,@Stochastic)表示什么? Q2) @pymc.stochastic(dtype=in
我正在使用an example of linear regression from bayesian methods for hackers但无法将其扩展到我的用途。 我对一个随机变量进行了观察,对该
我正在尝试拟合共享相同截距的多条线。 import numpy as np import pymc # Observations a_actual = np.array([[2., 5., 7.]])
我是一名优秀的程序员,十分优秀!