1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pystanのモデルと結果をpickleファイルで保存する

Posted at

この記事でやること

  • 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'))
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?