我注意到在 pymc3 中使用均匀分布时,_interval除非指定了转换,否则采样器也会扫描参数,例如:
with fitModel6:
normMu = pm.Uniform('normMu',lower=0,upper=1000)
Run Code Online (Sandbox Code Playgroud)
不仅会导致对 normMu 进行采样,还会导致对 normMu_interval 进行采样:
通常,当我使用统一先验作为尺度参数(如归一化)时,我当然会在对数间隔内进行采样。pymc3 是否以某种方式为我处理这个问题?
干杯
PyMC3 自动将转换应用于有界变量,以将它们置于不受约束的范围内。每个转换的代码都在这里,在官方 PyMC3教程中可以找到关于变量自动转换的非常简短的讨论。
编辑
如果链接再次断开/移动,这里是教程中的大部分信息
为了更有效地对模型进行采样,PyMC3 自动将有界 RV 转换为无界。
Run Code Online (Sandbox Code Playgroud)with pm.Model() as model: x = pm.Uniform('x', lower=0, upper=1)`
x然而,当我们查看模型的 RV 时,我们希望在那里找到:Run Code Online (Sandbox Code Playgroud)In [16]: model.free_RVs Out[16]: [x_interval__]
x_interval__表示x转换为接受 -inf 和 +inf 之间的参数值。在有上限和下限的情况下,LogOdd应用 s 变换。在这个变换后的空间中采样使采样器更容易......