【问题标题】:PyMC: Getting zero or close-to-zero Categorical likelihoodPyMC:获得零或接近于零的分类可能性
【发布时间】:2014-09-18 09:22:56
【问题描述】:

我正在尝试根据随机 Petri 网模型估算费率。我不明白为什么,但我得到了一个零概率错误,即使在给定我为速率定义的初始值的情况下,将数据数据完全对应于预期的观察数量。

例如,以下比率 [0.01, 2, 10, 1] 对应于 [0.33, 0.66, 0.01] 的 3 种不同结果的概率。如果我观察 100 个结果,我希望观察到 [33, 66, 1] 属于每个结果。

然而,如果我运行以下模型,我会得到一个 ZeroProbability 错误(我正在简化 prob 函数,它连接到更大的一段代码):

data=[33,66,1]
rates=pymc.Uniform('rates',0,100,size=4,value=[0.01,2,10,1])

@pymc.deterministic
def prob(rates=rates):
    return np.array([0.33,0.66,0.01])

likelihood=pymc.Categorical('likelihood',p=prob,value=data,observed=True)

调用 pymc.categorical_like(data,prob.value) 返回 -1.8 e308...

我错过了什么?

【问题讨论】:

    标签: distribution pymc


    【解决方案1】:

    我发现问题在于分类分布和多项分布之间的差异。我一直在努力寻找两者之间的实际差异,终于找到了here

    分类分布等价于试验次数等于一的多项分布。

    因此,分类似然只有不同结果的概率作为参数,并以频率作为观察数据。

    另一方面,多项分布将不同结果的概率和试验次数作为参数,并将每个结果的观察次数作为数据。

    以下代码按我的预期工作:

    data=np.array([33,66,1])
    rates=pymc.Uniform('rates',0,100,size=4,value=[0.01,2,10,1])
    
    @pymc.deterministic
    def prob(rates=rates):
        return np.array([0.33,0.66,0.01])
    
    likelihood=pymc.Multinomial('likelihood',n=sum(data),p=prob,value=data,observed=True)
    

    并且以下两个概率非常相似:

    pymc.categorical_like(data/data.sum(),prob.value)
    pymc.multinomial_like(data,sum(data),prob.value)
    

    【讨论】:

    • 我很确定多项式更适合我的情况。但我不完全确定在哪种情况下分类分布更好......
    • Categorical 适用于以下情况,例如,您尝试将标签从一组无序标签中概率性地分配给一个元素。如果有 k 个标签,那么来自分类的样本将产生 {0,1,...,k-1} 中的值。
    猜你喜欢
    • 2013-09-14
    • 2011-11-09
    • 1970-01-01
    • 2013-10-20
    • 2016-03-17
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多