PYMC3上的复杂模型 - 非线性层次模型?

时间:2018-01-24 03:27:46

标签: python probability bayesian pymc

我在过去几周一直在研究使用Pymc3进行概率编程的概念,我对如何实现特定模型有疑问,我将在下面对其进行描述:

我有一组 N 数据元素,以及一个矩阵 NxN ,它定义了这些元素彼此之间的相互作用(矩阵是对称的)。我还为每个元素都有一个属性 E ,我想对此属性进行建模,如下所示:

enter image description here

模型所说的是,元素M的能量是数据集中所有其他元素的加权和。函数d(M,M_i)是已知的(是我之前描述的NxN矩阵)

我想使用贝叶斯推理对权重alpha_i和sigma进行建模。

到目前为止我的尝试是这样的:

indx = np.arange(0, N   )
# The index for the N elements 
def estimator( alpha ,x , sigma , ):
    # My idea is that this estimator returns the estimated value for the energy for a given set alpha, x , and sigma
    return T.sum(  alpha*T.exp( -1/(2.0*sigma**2 )*x**2  )  )


with pm.Model() as hi_model:

    # Positive prior on sigma, N positive priors for the alphas 
    sigma = pm.HalfCauchy( 'sigma' , beta = 1 , shape = 1 )
    alpha1 = pm.HalfCauchy( 'alphas' , beta = 1 , shape = N  )
    # An error parameter 
    sigma_e = pm.HalfCauchy('sigma_e' ,  beta = 1  )
    tau_e = sigma_e**-2
    # The energy estimator build using the function above. 
    # D2s is an NxN matrix, whose column i is a vector of length N
    #representing the interaction of the i element with all the other N elements 
    energy_est =  estimator( alpha1 , D2s[indx] , sigma  )  
    ee = pm.Deterministic( 'muu' , energy_est )
    y_like = pm.Normal('y_like', mu= ee , tau=tau_e, observed= energy_smp[:N]  ) 

Pymc3允许我在没有错误的情况下从这个模型构建和采样,但是我无法使用采样的alphas sigma来预测"我所观察到的N能量,我已经消失了许多数量级。因此,我担心模型是否被理解为我想要的,或者我是否遗漏了某些东西,而不是构建这种模型的方式。

提前感谢您的帮助:)

0 个答案:

没有答案