1

下午 1:23(20 分钟前)嗨,

尝试学习 pymc3(从未学过 pymc2,所以跳入新事物),我怀疑有一个非常简单的示例/伪代码可以用于我正在尝试做的事情。想知道是否有人可以帮助我,因为过去几个小时我没有取得太大进展......

我的问题是以一种相当直接的方式从后部采样。让“x”是一个向量,“t(x)”是该向量的一个函数(R^n --> R^n 映射),而“D”是一些观察到的数据。我想从中采样向量 x

P( x | D ) \propto P( D | x ) P(x)

通常的贝叶斯东西。如何使用 NUTS 执行此操作的示例将非常壮观!我的主要问题似乎是让函数 t(x) 正常工作,并让模型从后验(而不是先验)返回样本。

任何和所有帮助/提示表示赞赏。与此同时,我会继续尝试一些东西。

最好的,

TJ

4

1 回答 1

1

你的符号让我有点困惑,但如果我理解正确,你想从先验的可能性(参数和数据的某些函数)中采样。我同意 - 这是典型的贝叶斯东西。

我认为贝叶斯逻辑回归是一个很好的例子,因为我们无法解析地解决它。假设我们的模型如下:

B ~ 正常(0, sigma2 * I)

p(y_i | B) = p_i ^ {y_i} (1 - p_i) ^{1 - y_i}

观察到 y_i 并且 p_i = 1 / (1 + exp(-z_i)) 和

z_i = B_0 + B_1 * x_i

我们假设 sigma2 是已知的。在我们将数据加载到 numpy 数组 x 和 y 中后,我们可以使用以下内容从后验中采样:

with pm.Model() as model:
    #Priors
    b0 = pm.Normal("b0", mu=0, tau=1e-6)
    b1 = pm.Normal("b1", mu=0, tau=1e-6)
    #Likelihood
    yhat = pm.Bernoulli("yhat", 1 / (1 + t.exp(-(b0 + b1*x))), observed=y)
    # Sample from the posterior
    trace = pm.sample(10000, pm.NUTS(), progressbar=False)

要查看完整示例,请查看此 iPython 笔记本:

http://nbviewer.ipython.org/gist/jbencook/9295751c917941208349

pymc3 也有很好的 glm 语法。你可以在这里看到它是如何工作的:

http://jbencook.github.io/portfolio/bayesian_logistic_regression.html

于 2014-03-28T12:56:28.093 回答