微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

STAN RuntimeError:初始化失败

如何解决STAN RuntimeError:初始化失败

我试图用STAN估计多元正态分布的均值和协方差矩阵。我首先导入pystan生成数据。我基本上是尝试遵循Python的官方YouTube tutorial

import pystan as ps
import numpy as np
data = np.random.multivariate_normal(mean=[0.7,0],cov=[[1,1],[1,2]],size=200)

然后我指定我的模型。我的数据形状为(200,2)。由于我具有多元分布,因此均值必须是向量,协方差必须是矩阵。

model =
"""
data 
{
    int N; // Number of data points.
    vector[2] X[N]; // Values.
}
parameters
{
   vector[2] mu; // Mean
   matrix[2,2] sigma; // Covariance matrix.
}
model 
{
   X ~ multi_normal(mu,sigma); 
}                                      
"""

然后我将数据放入字典中,如YouTube上的STAN教程所示

my_data = {"N": 200,"X": data}
sm = ps.StanModel(model_code = model)

模型编译没有问题。但是,当我尝试拟合模型时,会出现运行时错误

fit = sm.sampling(data=my_data,iter=1000,chains=4)

导致

/usr/lib/python3.6/multiprocessing/pool.py in get(self,timeout)
    642             return self._value
    643         else:
--> 644             raise self._value
    645 
    646     def _set(self,i,obj):

RuntimeError: Initialization Failed.

我不确定是什么原因导致此错误,因为我的代码只是本教程中代码的略微抽象。

解决方法

我自己找到了答案。在第二段代码中,我们需要将matrix[2,2]替换为cov_matrix[2]

 matrix[2,2] sigma; // Covariance matrix.

然后成为

cov_matrix[2] sigma; // Covariance matrix.

显然,STAN具有用于正定,对称矩阵的特殊数据类型,例如协方差矩阵。这种简单的替换使代码运行时不会抛出错误。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。