将pyMC2贝叶斯A / B测试示例移植到pyMC3

in

我正在努力学习pyMC 3,遇到了一些麻烦。由于pyMC3的教程有限,因此我正在使用贝叶斯黑客方法我试图在贝叶斯A / B测试示例中将pyMC 2代码移植到pyMC 3,但没有成功。从我可以看到的模型根本没有考虑到观察。

我必须对示例进行一些更改,因为pyMC 3完全不同,因此应如下所示:将pymc导入为pm

# The parameters are the bounds of the Uniform.
p = pm.Uniform('p', lower=0, upper=1)

# set constants
p_true = 0.05  # remember, this is unknown.
N = 1500

# sample N Bernoulli random variables from Ber(0.05).
# each random variable has a 0.05 chance of being a 1.
# this is the data-generation step
occurrences = pm.rbernoulli(p_true, N)

print occurrences  # Remember: Python treats True == 1, and False == 0
print occurrences.sum()

# Occurrences.mean is equal to n/N.
print "What is the observed frequency in Group A? %.4f" % occurrences.mean()
print "Does this equal the true frequency? %s" % (occurrences.mean() == p_true)

# include the observations, which are Bernoulli
obs = pm.Bernoulli("obs", p, value=occurrences, observed=True)

# To be explained in chapter 3
mcmc = pm.MCMC([p, obs])
mcmc.sample(18000, 1000)

figsize(12.5, 4)
plt.title("Posterior distribution of $p_A$, the true effectiveness of site A")
plt.vlines(p_true, 0, 90, linestyle="--", label="true $p_A$ (unknown)")
plt.hist(mcmc.trace("p")[:], bins=25, histtype="stepfilled", normed=True)
plt.legend()

相反,看起来像:

import pymc as pm

import random
import numpy as np
import matplotlib.pyplot as plt

with pm.Model() as model:
    # Prior is uniform: all cases are equally likely
    p = pm.Uniform('p', lower=0, upper=1)

    # set constants
    p_true = 0.05  # remember, this is unknown.
    N = 1500

    # sample N Bernoulli random variables from Ber(0.05).
    # each random variable has a 0.05 chance of being a 1.
    # this is the data-generation step
    occurrences = []  # pm.rbernoulli(p_true, N)
    for i in xrange(N):
        occurrences.append((random.uniform(0.0, 1.0) <= p_true))
    occurrences = np.array(occurrences)
    obs = pm.Bernoulli('obs', p_true, observed=occurrences)

    start = pm.find_MAP()
    step = pm.Metropolis()
    trace = pm.sample(18000, step, start)
    pm.traceplot(trace);
    plt.show()

对于冗长的帖子,我们深表歉意,但在我的适应中,发生了一些小变化,例如,由于pm.rbernoulli不再存在,因此手动生成了观察结果。我也不确定在运行跟踪之前是否应该找到起点。我应该如何更改实现以使其正确运行?

特威基

你确实很亲密。但是,这一行:

obs = pm.Bernoulli('obs', p_true, observed=occurrences)

这是错误的,因为您只是为p设置了恒定值(p_true == 0.05)。因此,上面定义的具有统一先验的随机变量p不受似然性的限制,并且您的图表明您只是从先验采样。如果在代码中将p_true替换为p,它将正常工作。这是固定版本:

import pymc as pm

import random
import numpy as np
import matplotlib.pyplot as plt

with pm.Model() as model:
    # Prior is uniform: all cases are equally likely
    p = pm.Uniform('p', lower=0, upper=1)

    # set constants
    p_true = 0.05  # remember, this is unknown.
    N = 1500

    # sample N Bernoulli random variables from Ber(0.05).
    # each random variable has a 0.05 chance of being a 1.
    # this is the data-generation step
    occurrences = []  # pm.rbernoulli(p_true, N)
    for i in xrange(N):
        occurrences.append((random.uniform(0.0, 1.0) <= p_true))
    occurrences = np.array(occurrences)
    obs = pm.Bernoulli('obs', p, observed=occurrences)

    start = pm.find_MAP()
    step = pm.Metropolis()
    trace = pm.sample(18000, step, start)

pm.traceplot(trace);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

处理pymc3中的实际假设-将示例从ThinkBayes移植到pymc3

来自分类Dev

将pymc2代码移植到pymc3:自定义似然函数

来自分类Dev

pymc3中的贝叶斯因素

来自分类Dev

使用PyMC3的贝叶斯套索

来自分类Dev

使用PyMC的贝叶斯pca

来自分类Dev

使用PyMC的贝叶斯相关

来自分类Dev

将混合物模型移植到pymc3

来自分类Dev

使用PyMC3的贝叶斯概率矩阵分解(BPMF):使用`NUTS`的PositiveDefiniteError

来自分类Dev

具有sklearn.datasets的PyMC3贝叶斯线性回归预测

来自分类Dev

使用pymc的Python中的贝叶斯IRT模型

来自分类Dev

如何使用PyMC估计贝叶斯网络中的参数

来自分类Dev

如何使用PyMC估计贝叶斯网络中的参数

来自分类Dev

涉及离散变量时pymc3与pymc2的难点

来自分类Dev

涉及离散变量时pymc3与pymc2的难点

来自分类Dev

PyMC中的在线贝叶斯学习(重复更新后验信念)

来自分类Dev

如何基于PyMC3中的另一个值来测量一个值的贝叶斯不确定性

来自分类Dev

pymc3的优化错误

来自分类Dev

pymc3的优化错误

来自分类Dev

pymc3:使用 NUTS

来自分类Dev

贝叶斯分类,来自Clojure的机器学习示例

来自分类Dev

PyMC3中的模型比较

来自分类Dev

使用PYMC3进行回归

来自分类Dev

pymc3:多个观察值

来自分类Dev

PyMC3高斯混合模型

来自分类Dev

PyMC3:对相同输入的不同预测

来自分类Dev

使用PYMC3对RV求和

来自分类Dev

pymc3 Heaviside步进功能

来自分类Dev

Pymc3中的分类混合模型

来自分类Dev

pymc3中的多元线性回归