用 PyMC 解决逆问题 [英] Solving inverse problems with PyMC
问题描述
假设我们有一个 X 的先验(例如 X ~ Gaussian)和一个前向运算符 y = f(x).进一步假设我们通过实验观察到 y 并且这个实验可以无限重复.假设输出 Y 是高斯 (Y ~ Gaussian) 或无噪声 (Y ~ Delta(observation)).
Suppose we're given a prior on X (e.g. X ~ Gaussian) and a forward operator y = f(x). Suppose further we have observed y by means of an experiment and that this experiment can be repeated indefinitely. The output Y is assumed to be Gaussian (Y ~ Gaussian) or noise-free (Y ~ Delta(observation)).
如何根据观察结果持续更新我们对 X 的主观知识程度?我已经用 PyMC 尝试了以下模型,但似乎我遗漏了一些东西:
How to consistently update our subjective degree of knowledge about X given the observations? I've tried the following model with PyMC, but it seems I'm missing something:
from pymc import *
xtrue = 2 # this value is unknown in the real application
x = rnormal(0, 0.01, size=10000) # initial guess
for i in range(5):
X = Normal('X', x.mean(), 1./x.var())
Y = X*X # f(x) = x*x
OBS = Normal('OBS', Y, 0.1, value=xtrue*xtrue+rnormal(0,1), observed=True)
model = Model([X,Y,OBS])
mcmc = MCMC(model)
mcmc.sample(10000)
x = mcmc.trace('X')[:] # posterior samples
后验没有收敛到xtrue.
推荐答案
@user1572508 所设计的功能现在是 PyMC 的一部分,名称为 stochastic_from_data()
或 Histogram()
代码>.该线程的解决方案则变为:
The functionality purposed by @user1572508 is now part of PyMC under the name stochastic_from_data()
or Histogram()
. The solution to this thread then becomes:
from pymc import *
import matplotlib.pyplot as plt
xtrue = 2 # unknown in the real application
prior = rnormal(0,1,10000) # initial guess is inaccurate
for i in range(5):
x = stochastic_from_data('x', prior)
y = x*x
obs = Normal('obs', y, 0.1, xtrue*xtrue + rnormal(0,1), observed=True)
model = Model([x,y,obs])
mcmc = MCMC(model)
mcmc.sample(10000)
Matplot.plot(mcmc.trace('x'))
plt.show()
prior = mcmc.trace('x')[:]
这篇关于用 PyMC 解决逆问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!