相当简单的问题:我应该如何使用@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
则在每次迭代中都会更改以尝试获得更好的可能性。