4

我注意到在 pymc3 中使用均匀分布时,采样器也会扫描_interval参数,除非指定了转换,例如:

with fitModel6:

    normMu  = pm.Uniform('normMu',lower=0,upper=1000)

不仅会导致对 normMu 的采样,还会导致 normMu_interval:

区间轨迹图

参数轨迹图

通常,当我对尺度参数(如标准化)使用统一先验时,我当然会在对数间隔上进行采样。pymc3 是否以某种方式为我处理这个问题?

干杯

4

1 回答 1

5

PyMC3 自动将转换应用于有界变量,以将它们置于不受约束的范围内。每个转换的代码都在这里,关于变量自动转换的非常简短的讨论可以在官方 PyMC3教程中找到。

编辑

如果链接再次断开/移动,这里是教程中的大部分信息

为了更有效地对模型进行采样,PyMC3 自动将有界 RV 转换为无界。

with pm.Model() as model:
    x = pm.Uniform('x', lower=0, upper=1)`

当我们查看模型的房车时,我们希望在x那里找到,但是:

In [16]: model.free_RVs

Out[16]: [x_interval__]

x_interval__表示x转换为接受 -inf 和 +inf 之间的参数值。在上限和下限的情况下,LogOdd应用 s 变换。在这个转换后的空间中采样使采样器更容易......

于 2016-01-25T16:31:06.733 回答