pymc.find_constrained_prior#

pymc.find_constrained_prior(distribution, lower, upper, init_guess, mass=0.95, fixed_params=None, mass_below_lower=None, **kwargs)[源代码]#

找到最优参数以获得 lowerupper 之间 分布mass % 概率。

注意:仅适用于单参数和双参数分布,因为恰好有两个约束条件。如果你想在 >=3 参数分布上使用它,请固定某些参数组合。

参数:
distribution : 分布发行版

PyMC 分布,您希望在其上设置先验。需要在 PyMC 中实现 logcdf 方法。

lowerfloat

获得 pm_distmass % 概率的 下限

upperfloat

获得 pm_dist 概率的 mass % 的上限。

init_guess : dict 的 {str : float}python:dict of {python:str}float}

scipy.optimize.least_squares 的初始猜测,用于找到适合区间约束的 pm_dist 的最优参数。必须是一个字典,其中键为 PyMC 分布的参数名称,值为初始猜测。

mass : float, 默认值为 0.95python:float, 默认值 0.95

我们希望在 lowerupper 之间的概率质量份额。默认为95%。

fixed_params : strfloat, 可选, 默认 Nonepython:str 或 python:float, 可选, 默认 python:None

仅在 pm_dist 至少有三个参数时使用。固定参数的字典,以便只有2个参数需要优化。例如,对于一个学生T分布,你可以将nu固定为一个常数,并优化mu和sigma。

mass_below_lower : float, 可选, 默认 Nonepython:float, 可选, 默认值 python:None

低于 lower 边界的概率质量。如果为 None,则默认为 (1 - mass) / 2,这意味着低于 lower 值的概率质量将等于高于 upper 值的概率质量。

返回:
opt_paramsdict

优化后的分布参数作为一个字典。字典键是参数名称,字典值是优化后的参数值。

注释

可选的关键字参数可以传递给 find_constrained_prior。这些将被传递到底层的 scipy.optimize.minimize() 调用中。

示例

# get parameters obeying constraints
opt_params = pm.find_constrained_prior(
    pm.Gamma, lower=0.1, upper=0.4, mass=0.75, init_guess={"alpha": 1, "beta": 10}
)

# use these parameters to draw random samples
samples = pm.Gamma.dist(**opt_params, size=100).eval()

# use these parameters in a model
with pm.Model():
    x = pm.Gamma('x', **opt_params)

# specify fixed values before optimization
opt_params = pm.find_constrained_prior(
    pm.StudentT,
    lower=0,
    upper=1,
    init_guess={"mu": 5, "sigma": 2},
    fixed_params={"nu": 7},
)

在某些情况下,您可能不希望在 lower 阈值以下和 upper 阈值以上具有相同的累积概率。例如,您可能希望将指数分布约束为找到产生 90% 质量低于 upper 界限的参数,并且在 lower 以下具有零质量。您可以通过以下对 find_constrained_prior 的调用来实现这一点。

opt_params = pm.find_constrained_prior(
    pm.Exponential,
    lower=0,
    upper=3.,
    mass=0.9,
    init_guess={"lam": 1},
    mass_below_lower=0,
)