pymc.find_constrained_prior#
- pymc.find_constrained_prior(distribution, lower, upper, init_guess, mass=0.95, fixed_params=None, mass_below_lower=None, **kwargs)[源代码]#
找到最优参数以获得 lower 和 upper 之间 分布 的 mass % 概率。
注意:仅适用于单参数和双参数分布,因为恰好有两个约束条件。如果你想在 >=3 参数分布上使用它,请固定某些参数组合。
- 参数:
- distribution : 分布发行版
PyMC 分布,您希望在其上设置先验。需要在 PyMC 中实现
logcdf
方法。- lower
float
获得 pm_dist 的 mass % 概率的 下限。
- upper
float
获得 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 我们希望在
lower
和upper
之间的概率质量份额。默认为95%。- fixed_params :
str
或float
, 可选, 默认None
python:str 或 python:float, 可选, 默认 python:None 仅在 pm_dist 至少有三个参数时使用。固定参数的字典,以便只有2个参数需要优化。例如,对于一个学生T分布,你可以将nu固定为一个常数,并优化mu和sigma。
- mass_below_lower :
float
, 可选, 默认None
python:float, 可选, 默认值 python:None 低于
lower
边界的概率质量。如果为None
,则默认为(1 - mass) / 2
,这意味着低于lower
值的概率质量将等于高于upper
值的概率质量。
- 返回:
- opt_params
dict
优化后的分布参数作为一个字典。字典键是参数名称,字典值是优化后的参数值。
- opt_params
注释
可选的关键字参数可以传递给
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, )