gpt4 book ai didi

python - 我应该如何在 PyMC 中使用 @pm.stochastic?

转载 作者:行者123 更新时间:2023-11-30 23:18:30 25 4
gpt4 key购买 nike

相当简单的问题:我应该如何使用@pm.stochastic?我读过一些博客文章,声称 @pm.stochastic 期望对数值为负:

@pm.stochastic(observed=True)
def loglike(value=data):
# some calculations that generate a numeric result
return -np.log(result)

我最近尝试过这个,但发现结果非常糟糕。由于我还注意到有些人使用 np.log 而不是 -np.log,所以我尝试了一下,效果更好。 @pm.stochastic 真正期待什么?我猜想由于一个非常流行的示例使用诸如 np.log(1/(1+t_1-t_0)) 之类的内容而需要的符号存在一些困惑,该示例被编写为 -np.log(1+t_1-t_0)

另一个问题:这个装饰器用 value 参数做什么?据我了解,我们从需要输入可能性的先验的一些建议值开始,@pm.stochastic的想法基本上是产生一些数字来将该可能性与生成的数字进行比较采样过程中的前一次迭代。可能性应该接收 value 参数和先验的一些值,但我不确定这是否是 value 所做的全部,因为这是唯一必需的参数,但我可以写:

@pm.stochastic(observed=True)
def loglike(value=[1]):
data = [3,5,1] # some data
# some calculations that generate a numeric result
return np.log(result)

据我所知,这会产生与以前相同的结果。也许,它以这种方式工作是因为我将 observed=True 添加到装饰器中。如果我在默认情况下使用 observed=False 的随机变量尝试此操作,则 value 将在每次迭代中更改,试图获得更好的可能性。

最佳答案

@pm.stochastic 是一个装饰器,因此它需要一个函数。使用它的最简单方法是给它一个函数,其中包含 value 作为其参数之一,并返回对数似然。

您应该使用@pm.stochastic装饰器为模型中的参数定义自定义先验。您应该使用 @pm.observed 装饰器来定义数据的自定义可能性。这两个装饰器都会创建一个 pm.Stochastic 对象,该对象的名称来自它所装饰的函数,并具有所有熟悉的方法和属性(这里是 a nice article on Python decorators )。

示例:

先验具有三角分布的参数a:

@pm.stochastic
def a(value=.5):
if 0 <= value < 1:
return np.log(1.-value)
else:
return -np.inf

这里使用value=.5作为参数的初始值,将其更改为value=1会引发异常,因为它超出了支持范围的分布。

可能性b是以a为中心的正态分布,具有固定精度:

@pm.observed
def b(value=[.2,.3], mu=a):
return pm.normal_like(value, mu, 100.)

这里用value=[.2,.3]来表示观察到的数据。

我已将其放在 a notebook that shows it all in action here 中.

关于python - 我应该如何在 PyMC 中使用 @pm.stochastic?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26703950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com