0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

『AI・データ分析モデルのレシピ』のpystan部分を修正して動かす

Posted at

pystan ライブラリがない???

書籍『AI・データ分析モデルのレシピ』は Python 上で動く各種機械学習モデルについてサンプルデータを用いながら解説している。
第3章で pystan を用いた重回帰分析を行っているが、公式サイトが提供しているJupyterファイルを Google Colab 上で動かしても pystan が見つからないとエラーになってしまう。
pystan1.png

公式サイトの正誤表には何ら記載が無く、サポートも期待できない(初版2021年6月であり、3年半もサポートすることは難しいか)。
pystan2.png
ということで、ネットの情報をもとにコードを修正して動かせないか試すことにした。

ライブラリ名は stan に変更、エラー回避も必要

まずライブラリが見つからない件は、ライブラリ名の変更が理由だとわかった。

インストールするモジュールは pystan であるが、 import するライブラリ名は stan に変わってしまった。
(ちなみに pystan は Google Colab に最初からインストールされなくなったようなので、 !pip install pystan で手動インストールが必要である。)

関数も変わっており、 pystan.stanstan.stan に変更しても動かない。
pystan3.png

pystan Getting Start を参考に

fit = pystan.stan(model_code=model, data=dat, seed=12345)

をいったん

fit = stan.build(model, data=dat, random_seed=12345)

に修正する。

しかし、
pystan4.png

asyncio.run() でエラーが発生してしまうので、

を参考に

import nest_asyncio
nest_asyncio.apply()

を付け加える。
pystan5.png

stan 関数→build + sample

これでエラーは発生しないように見えるが、それ以降の arviz によるサンプリング結果の可視化が全く動かない。
pystan6.png

さらにネットの情報を探すと、以下のページが見つかった。

このページのソースコードによると、モデルの実行は

sm = stan.build(model, data=dat, random_seed=12345)
fit = sm.sample()

というように、モデル作成とサンプリングの2つに分けてやらないといけないようだ(おそらく前者はpystan.stanModel関数に相当するのだろう)。
pystan7.png

要約統計量の出力も print だけではダメ

これで arviz によるサンプリングの可視化はできるようになった。
pystan8.png
が、今度は最後の各種統計量が表示されない。
pystan9.png

「Stan (PyStan 3) 事始め」のページを再度参照し、 arviz を使って

print(fit)

i_data = arviz.from_pystan(posterior = fit, posterior_model = sm)
smry = arviz.summary(i_data)
print('Summary =\n',smry)

に変更。
pystan10.png

これで無事統計量も表示できた。

なお、表示される要素が print(fit) の結果(以下参照)と若干異なるため、同一の要素を表示したい場合は arviz のドキュメントを参照する等、さらに調べる必要がある。
pystan11.png

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?