我注意到在pymc3中使用均匀分布时,采样器也会扫描_interval
参数,除非指定了变换,例如:
with fitModel6:
normMu = pm.Uniform('normMu',lower=0,upper=1000)
不仅会导致normMu的采样,还会导致normMu_interval:
通常情况下,当我使用像标准化这样的比例参数的均匀先验时,我当然会在日志间隔上进行采样。 pymc3是否以某种方式为我处理这个?
干杯
答案 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变换。在这个变换的空间中进行采样使得采样器更容易......