- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是 PyMC: Parameter estimation in a Markov system 的后续内容
我有一个由每个时间步的位置和速度定义的系统。系统的行为定义为:
vel = vel + damping * dt
pos = pos + vel * dt
所以,这是我的 PyMC 模型。估计vel
、pos
以及最重要的damping
。
# PRIORS
damping = pm.Normal("damping", mu=-4, tau=(1 / .5**2))
# we assume some system noise
tau_system_noise = (1 / 0.1**2)
# the state consist of (pos, vel); save in lists
# vel: we can't judge the initial velocity --> assume it's 0 with big std
vel_states = [pm.Normal("v0", mu=-4, tau=(1 / 2**2))]
# pos: the first pos is just the observation
pos_states = [pm.Normal("p0", mu=observations[0], tau=tau_system_noise)]
for i in range(1, len(observations)):
new_vel = pm.Normal("v" + str(i),
mu=vel_states[-1] + damping * dt,
tau=tau_system_noise)
vel_states.append(new_vel)
pos_states.append(
pm.Normal("s" + str(i),
mu=pos_states[-1] + new_vel * dt,
tau=tau_system_noise)
)
# we assume some observation noise
tau_observation_noise = (1 / 0.5**2)
obs = pm.Normal("obs", mu=pos_states, tau=tau_observation_noise, value=observations, observed=True)
这就是我运行采样的方式:
mcmc = pm.MCMC([damping, obs, vel_states, pos_states])
mcmc.sample(50000, 25000)
pm.Matplot.plot(mcmc.get_node("damping"))
damping_samples = mcmc.trace("damping")[:]
print "damping -- mean:%f; std:%f" % (mean(damping_samples), std(damping_samples))
print "real damping -- %f" % true_damping
阻尼的值由先验决定。即使我将之前的值更改为 Uniform 或其他什么,情况仍然如此。
我做错了什么?它与前面的示例非常相似,只是多了一层。
此问题的完整 IPython 笔记本可在此处找到:http://nbviewer.ipython.org/github/sotte/random_stuff/blob/master/PyMC%20-%20HMM%20Dynamic%20System.ipynb
[编辑:一些说明和采样代码。]
[EDIT2:@Chris 的回答没有帮助。我无法使用 AdaptiveMetropolis
因为 *_states 似乎不是模型的一部分。]
最佳答案
该模型存在一些问题,请再次查看。首先也是最重要的,您没有将所有 PyMC 对象添加到模型中。您仅添加了[damping, obs]
。您应该将所有 PyMC 节点传递给模型。
另请注意,您无需同时调用 Model
和 MCMC
。这很好:
model = pm.MCMC([damping, obs, vel_states, pos_states])
PyMC 的最佳工作流程是将模型保存在与运行逻辑分开的文件中。这样,您只需导入模型并将其传递给 MCMC
:
import my_model
model = pm.MCMC(my_model)
或者,您可以将模型编写为函数,返回locals
(或vars
),然后调用该函数作为MCMC
的参数>。例如:
def generate_model():
# put your model definition here
return locals()
model = pm.MCMC(generate_model())
关于python - PyMC:分层隐马尔可夫模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20289287/
我在学习道路上遇到了一项任务。 对于均值 μ=np 和方差 σ**2=np(1−p) 的二项式分布 X∼Bp,n,我们希望上限概率 P (X≥c⋅μ) 对于 c≥1。三界介绍: Formulas 任务
给定以下马尔可夫矩阵: import numpy, scipy.linalg A = numpy.array([[0.9, 0.1],[0.15, 0.85]]) 平稳概率存在且等于[.6, .4]。
我是一名优秀的程序员,十分优秀!