Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyMC3多项式模型不适用于非整数观测数据_Python_Pymc_Pymc3 - Fatal编程技术网

Python PyMC3多项式模型不适用于非整数观测数据

Python PyMC3多项式模型不适用于非整数观测数据,python,pymc,pymc3,Python,Pymc,Pymc3,我试图用PyMC3来解一个相当简单的多项式分布。如果我将“噪波”值设置为0.0,它将非常有效。但是,当我将其更改为其他任何内容时,例如0.01,我在find_MAP函数中得到一个错误,如果我不使用find_MAP,它将挂起 多项式必须是稀疏的,这有什么原因吗 import numpy as np from pymc3 import * import pymc3 as mc import pandas as pd print 'pymc3 version: ' + mc.__version__

我试图用PyMC3来解一个相当简单的多项式分布。如果我将“噪波”值设置为0.0,它将非常有效。但是,当我将其更改为其他任何内容时,例如0.01,我在find_MAP函数中得到一个错误,如果我不使用find_MAP,它将挂起

多项式必须是稀疏的,这有什么原因吗

import numpy as np
from pymc3 import *
import pymc3 as mc
import pandas as pd
print 'pymc3 version: ' + mc.__version__


sample_size = 10
number_of_experiments = 1


true_probs = [0.2, 0.1, 0.3, 0.4]


k = len(true_probs)


noise = 0.0
y = np.random.multinomial(n=number_of_experiments, pvals=true_probs, size=sample_size)+noise
y_denominator = np.sum(y,axis=1)
y = y/y_denominator[:,None]


with Model() as multinom_test:
    probs = Dirichlet('probs', a = np.ones(k), shape = k)
    for i in range(sample_size):
        data = Multinomial('data_%d' % (i),
                           n = y[i].sum(),
                           p = probs,
                           observed = y[i])


with multinom_test:
    start = find_MAP()
    trace = sample(5000, Slice())
trace[probs].mean(0)
错误:

ValueError: Optimization error: max, logp or dlogp at max have non-
finite values. Some values may be outside of distribution support. 
max: {'probs_stickbreaking_': array([  0.00000000e+00,  -4.47034834e- 
08,   0.00000000e+00])} logp: array(-inf) dlogp: array([  
0.00000000e+00,   2.98023221e-08,   0.00000000e+00])Check that 1) you 
don't have hierarchical parameters, these will lead to points with 
infinite density. 2) your distribution logp's are properly specified. 
Specific issues:
这对我有用

样本量=10 实验次数=100 真概率=[0.2,0.1,0.3,0.4] k=真实的问题 噪音=0.01 y=np.随机.多项式N=实验次数,pvals=真实概率,大小=样本大小+噪声 使用pm.Model作为multinom_测试: a=pm.Dirichlet'a',a=np.onesk 对于i范围内的样本大小: data_pred=pm.多项式'data_pred_%s'%i,n=实验次数,p=a,观测值=y[i] trace=pm.sample50000,pm.Metropolis trace=pm.sample1000也适用于螺母 pm.traceplottrace[500:]; 这对我有用

样本量=10 实验次数=100 真概率=[0.2,0.1,0.3,0.4] k=真实的问题 噪音=0.01 y=np.随机.多项式N=实验次数,pvals=真实概率,大小=样本大小+噪声 使用pm.Model作为multinom_测试: a=pm.Dirichlet'a',a=np.onesk 对于i范围内的样本大小: data_pred=pm.多项式'data_pred_%s'%i,n=实验次数,p=a,观测值=y[i] trace=pm.sample50000,pm.Metropolis trace=pm.sample1000也适用于螺母 pm.traceplottrace[500:];
试着写出这样的可能性:data_pred=pm.多项式'data_pred',n=实验次数,p=a,observed=y.你也可以尝试使用Metropolis而不是SliceHi aloctavodia.我甚至还没有达到示例步骤,所以我不认为Metropolis vs.Slice有问题。你能澄清一下你的似然函数吗?我有几个列,所以我使用数组符号[I]。你是说还有其他的方法来做这个操作吗?对不起,当我发表我的评论时,我假设通过传递p=a,然后是y,以正确广播a的可能性。事实上,模型运行,但样本似乎只来自于之前的,也就是说,它们似乎不受可能性的影响。试着写下这样的可能性:data_pred=pm。多项式'data_pred',n=实验次数,p=a,observed=y你也可以尝试使用Metropolis而不是SliceHi aloctavodia,我甚至没有进入示例步骤,所以我不认为这是Metropolis vs.Slice的问题。你能澄清一下你的似然函数吗?我有几个列,所以我使用数组符号[I]。你是说还有其他的方法来做这个操作吗?对不起,当我发表我的评论时,我假设通过传递p=a,然后是y,以正确广播a的可能性。事实上,模型是运行的,但样本似乎只是来自先前的,也就是说,它们似乎不受可能性的影响。这是有效的。我的代码似乎存在设置n=y[i].sum的问题。我不知道为什么这很重要,因为它提供了与实验数量相同的值,但现在它起作用了。谢谢请注意,y[i].sum=numberofuof\u仅在noise=0的情况下进行实验。这是有效的。我的代码似乎存在设置n=y[i].sum的问题。我不知道为什么这很重要,因为它提供了与实验数量相同的值,但现在它起作用了。谢谢请注意,y[i].sum=numberofuofuofuu只针对noise=0的实验。