首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STAN RuntimeError:初始化失败

STAN RuntimeError:初始化失败
EN

Stack Overflow用户
提问于 2020-11-11 18:53:35
回答 1查看 347关注 0票数 0

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

代码语言:javascript
复制
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)。因为我有一个多元分布,所以均值必须是一个向量,协方差必须是一个矩阵。

代码语言:javascript
复制
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教程所示

代码语言:javascript
复制
my_data = {"N": 200, "X": data}
sm = ps.StanModel(model_code = model)

模型编译时没有问题。然而,当我尝试拟合模型时,我得到了一个运行时错误。

代码语言:javascript
复制
fit = sm.sampling(data=my_data, iter=1000, chains=4)

通向

代码语言:javascript
复制
/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.

我不确定是什么导致了这个错误,因为我的代码只是对教程中的代码进行了轻微的抽象。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-12 17:39:54

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

代码语言:javascript
复制
 matrix[2,2] sigma; // Covariance matrix.

然后变成

代码语言:javascript
复制
cov_matrix[2] sigma; // Covariance matrix.

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64785056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档