pymc3中均匀分布的区间变换是什么?

时间:2016-01-03 14:57:25

标签: bayesian pymc3

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

with fitModel6:

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

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

trace plot of interval

trace plot of parameter

通常情况下,当我使用像标准化这样的比例参数的均匀先验时,我当然会在日志间隔上进行采样。 pymc3是否以某种方式为我处理这个?

干杯

1 个答案:

答案 0 :(得分:4)

PyMC3会自动将变换应用于有界变量,使它们处于无约束的范围内。每个转换的代码都是here,在官方PyMC3 Tutorial中可以找到关于变量自动转换的简短讨论。

修改

如果链接中断/再次移动,请参阅教程中的大部分信息

  

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

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

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

In [16]: model.free_RVs

Out[16]: [x_interval__]
     

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