【问题标题】:Trace individual dimensions using PYMC3's traceplot?使用 PYMC3 的跟踪图跟踪各个维度?
【发布时间】:2018-08-28 20:53:48
【问题描述】:

我使用 PYMC3 对贝叶斯逻辑回归模型进行推理。我想在给定高斯先验 $\mathcal{N} \sim (0,I)$ 的情况下找到权重 $\beta \in \mathbb{R}^K$ 的后验。

这是使用由设计矩阵 $X \in \mathbb{R}^{N \times K}$ 和二元结果向量 $y\in \mathbb{R}^N$ 表示的真实而非模拟数据。

我的Python代码如下:

with pm.Model() as logistic_model:
    # 14 dimensional Gaussian prior
    beta = pm.Normal('beta', mu = 0, sd = 10, shape = X.shape[1])

    # Expected value of outcome with sigmoid link
    logit_p = t.dot(X, beta)
    pm.Bernoulli('likelihood', logit_p=logit_p, observed=y)

    with logistic_model:
    # Inference
    trace = pm.sample(2000)

然后我继续使用

pm.traceplot(trace) 

获得后验的可视化。这将输出以下内容:

我很好奇;我将如何在单独的子图上绘制后验的每个维度?将它们全部放在一个上看起来相当混乱!

为美元符号道歉 - 我是新手,不确定如何正确显示数学。

谢谢

【问题讨论】:

    标签: python logistic-regression bayesian pymc3 mcmc


    【解决方案1】:

    可以使用arviz,可以用

    安装
    pip install arviz
    

    然后就可以使用了

    import arviz as az
    
    az.traceplot(trace)
    

    正如你所描述的那样。

    注意arviz 仍然有些不稳定,但应该会在接下来的几个月内替换pymc3 的绘图功能。

    【讨论】:

    • 太好了,非常感谢!另一件事 - 我是否可以将我选择的另一个高斯分布叠加到每个图上?
    • arviz.traceplotpymc3.traceplot 都返回一个轴数组(在上述情况下为 4 x 2)。最简单的方法可能是抓住它(axes = az.traceplot(trace),然后在每个轴上手动绘制(ax[0, 0].plot(my_x, my_y)
    • traceplot中的trace是什么意思?
    • 绘制的时间序列(在上图中的右侧)称为跟踪。我没有引用!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    相关资源
    最近更新 更多