相当简单的问题:我应该如何使用@pm.stochastic
?我读过一些博客文章,声称@pm.stochastic
期望日志值为负值:
@pm.stochastic(observed=True)
def loglike(value=data):
# some calculations that generate a numeric result
return -np.log(result)
我最近试过这个,但发现效果很差。因为我也注意到有些人np.日志而不是-np.日志,我试了一下,效果好多了。真正期望@pm.stochastic
是什么?我猜是因为一个非常流行的例子使用了类似np.log(1/(1+t_1-t_0))
的东西,它被写成-np.log(1+t_1-t_0)
,所以在所需的符号上有一点混乱
另一个问题:这个修饰符用value
参数做什么?据我所知,我们从需要输入似然值的先验值开始,@pm.stochastic
的思想基本上是产生一些数字,将这种可能性与采样过程中前一次迭代生成的数字进行比较。似然函数应该接收value
参数和一些prior值,但我不确定{
据我所知,结果和以前一样。也许,它是这样工作的,因为我在decorator中添加了observed=True
。如果我在默认情况下使用observed=False
在随机变量中尝试此操作,value
将在每次迭代中更改,以获得更好的可能性。在
是的,混淆是很容易的,因为@randocial返回了一个与错误本质相反的可能性。因此,您将自定义错误函数的负日志作为日志可能性返回。在
@pm.stochastic
是一个修饰符,因此它需要一个函数。使用它的最简单的方法是给它一个包含value
作为其参数之一的函数,并返回一个日志似然值。在您应该使用
@pm.stochastic
修饰符为模型中的参数定义一个自定义的prior。您应该使用@pm.observed
修饰符来定义数据的自定义可能性。这两个decorator都将创建一个pm.Stochastic
对象,该对象的名称来自它所装饰的函数,并具有所有熟悉的方法和属性(这里是a nice article on Python decorators)。在示例:
一个参数
a
,其先验分布为三角形:这里使用
value=.5
作为参数的初始值,将其更改为value=1
会引发一个异常,因为它超出了发行版的支持范围。在一个似然
^{pr2}$b
是以a
为中心的正态分布,具有固定的精度:这里
value=[.2,.3]
用于表示观测数据。在我把这个放在a notebook that shows it all in action here里。在
相关问题 更多 >
编程相关推荐