2024-05-16 17:53:00 发布
网友
我有一个变量A,它是Bernoulli分布的,A = pymc.Bernoulli('A', p_A),但是我没有{}的硬值,所以我想对它进行采样。我知道它应该很小,所以我想用指数分布p_A = pymc.Exponential('p_A', 10)。在
A
A = pymc.Bernoulli('A', p_A)
p_A = pymc.Exponential('p_A', 10)
但是,指数分布可以返回大于1的值,这将抛出A。有没有一种方法可以绑定p_A的输出,而不必在我自己的@pymc.stochastic修饰函数中重新实现Bernoulli或指数分布?在
p_A
@pymc.stochastic
PyMC提供边界。以下措施也应起作用:
p_A = pymc.Bound(pymc.Exponential, upper=1)('p_A', lam=10)
对于任何其他遇到这种情况的迷失灵魂:
我认为对于我的目的来说,最好的解决方案是使用β函数来代替(即,我只使用指数分布,因为我希望生成的概率可能很小,而不是出于数学上的方便)。在
对于certain parameter values,它近似于指数函数的形状(对于二项式和法线也可以这样做),但有界于[01]。可能只对数值计算有用,因为我想做任何分析都很痛苦。在
可以使用确定性函数截断指数分布。就我个人而言,我认为最好是使用一个介于0和1之间的分布,但要确切地解决您的问题,可以执行以下操作:
import pymc as pm p_A = pm.Exponential('p_A',10) @pm.deterministic def p_B(p=p_A): return min(1, p) A = pm.Bernoulli('A', p_B) model = dict(p_A=p_A, p_B=p_B, A=A) S = pm.MCMC(model) S.sample(1000) p_B_trace = S.trace('p_B')[:]
PyMC提供边界。以下措施也应起作用:
对于任何其他遇到这种情况的迷失灵魂:
我认为对于我的目的来说,最好的解决方案是使用β函数来代替(即,我只使用指数分布,因为我希望生成的概率可能很小,而不是出于数学上的方便)。在
对于certain parameter values,它近似于指数函数的形状(对于二项式和法线也可以这样做),但有界于[01]。可能只对数值计算有用,因为我想做任何分析都很痛苦。在
可以使用确定性函数截断指数分布。就我个人而言,我认为最好是使用一个介于0和1之间的分布,但要确切地解决您的问题,可以执行以下操作:
相关问题 更多 >
编程相关推荐