この記事でやること
- pystanを用いて作成したモデルと結果をpickleファイルで保存する
- モデルと結果を再計算しないで読み出す方法を紹介する
結論
#書き込み
with open('model.pkl', 'wb') as f:
pickle.dump(stm, f)
with open('fit.pkl', 'wb') as g:
pickle.dump(fit, g)
#読み込み
stm = pickle.load(open(DATA_DIR + 'model_ForS.pkl', 'rb'))
fit = pickle.load(open(DATA_DIR + 'fit_ForS.pkl', 'rb'))
解決したい課題
pystanによるベイズ統計モデリング、便利なんですが計算方法がなかなかかかります。ものによりますが一時間くらいかかるものが多い。しかも計算した結果収束してなかったなんてことも多い。
なので計算した結果は保存しておきたいと思う人が多いハズ。チュートリアル本でも書いてあるかもしれませんが、Rstanの本が多いためpythonの保存方法はわからないまま、という人も多いかと思います。
そこでこの記事では
-
pystanによるベイズ統計モデリングのモデルと結果をpickleファイルで保存する
方法を紹介します。
解決方法
pystanによるコンパイルとサンプリングを下記のように行ったとします。
ここではstmにモデルが、fitにサンプリング結果が保存されています。
model = """
data{
...
}
parameters{
...
}
model{
...
}
"""
stm = pystan.StanModel(model_code=model) #コンパイル
stan_data = {...}
fit = stm.sampling(data=stan_data) #サンプリング
このとき下記のように記述すれば保存&書き込みが可能。かんたんでした。
結果のみを保存しても読み出しできないこと。
モデルも一緒に保存しないといけません。
詳しいことはわかりませんが、サンプリング結果がモデルと紐付いているためのようです。
#書き込み
with open('model.pkl', 'wb') as f:
pickle.dump(stm, f)
with open('fit.pkl', 'wb') as g:
pickle.dump(fit, g)
#読み込み
stm = pickle.load(open(DATA_DIR + 'model_ForS.pkl', 'rb'))
fit = pickle.load(open(DATA_DIR + 'fit_ForS.pkl', 'rb'))