如何将PyStan对象存储为二进制文件?

时间:2018-03-29 21:15:02

标签: python-3.x binary-data stan pystan probabilistic-programming

我想将中间文件存储在Pro的概率编程步骤中,例如fit对象,请参阅下面的SWE,将其存储到文件中,以便稍后加载以供以后使用。 Stan用C ++编译模型,每次运行后,我都不想再重新运行模型,我想将它们存储到文件系统中以供以后分析。

使用PyStan存储Stan对象的最佳方法是什么?换句话说,如何将stan对象存储为二进制文件,以及存储结果的最可行方式是什么,以便以后不需要再次运行它们?

小工作示例(来源here

schools_code = """
data {
    int<lower=0> J; // number of schools
    real y[J]; // estimated treatment effects
    real<lower=0> sigma[J]; // s.e. of effect estimates
}
parameters {
    real mu;
    real<lower=0> tau;
    real eta[J];
}
transformed parameters {
    real theta[J];
    for (j in 1:J)
    theta[j] = mu + tau * eta[j];
}
model {
    eta ~ normal(0, 1);
    y ~ normal(theta, sigma);
}
"""

schools_dat = {'J': 8,
               'y': [28,  8, -3,  7, -1,  1, 18, 12],
               'sigma': [15, 10, 16, 11,  9, 11, 10, 18]}

sm = pystan.StanModel(model_code=schools_code)
fit = sm.sampling(data=schools_dat, iter=1000, chains=4)

1 个答案:

答案 0 :(得分:0)

您有几种选择,最好是泡菜

import pickle
with open('fit.pkl', 'wb') as pickle_out:
    pickle.dump(fit, pickle_out)

另一种选择是pandas ... ...但是虽然保留了样本,但它不再是StanFit4Model对象。

import pandas as pd
fit.to_dataframe().to_csv(‘fit.csv’, encoding='utf-8')