0

私は PyMC ( https://github.com/pymc-devs/pymc ) の初心者であり、動的コンポーネントを使用してモデルを構築しようとしています。基本的に、モデルが実行されるたびに常微分方程式 (ODE) の小さなシステムを解いています。呼ばれた。

Google と (非推奨の) PyMC メーリング リストを可能な限り検索し、モデル構造 (pk_model.py) と呼び出し元 (pk_fit.py) を見つけました。

https://gist.github.com/gyromagnetic/6097271

pk_fit を実行すると、最初はうまくいくように見えますが、ODE ソルバーに関連する多くのエラー メッセージがダンプされます。ODE とソルバー (PyMC コードと統合されていない) のスタンドアロン バージョンは正常に動作します。

さまざまな print ステートメントを挿入すると、最初はコードが機能しているように見えますが、ある時点で、不明なパラメーター引数 (kcp、kpc、ke) がスカラーから numpy.ndarrays に変更されます。これは問題の一部のようです。

PyMC の初心者なので、明らかに間違ったことをしていると思います。

これについて何か助けていただければ幸いです。

4

1 に答える 1

2

おっしゃる通りです。PyMC は確率的パラメーター値を numpy.ndarrays としてモデルに提供するため、微分を計算する前に Python スカラーに戻す (最初の項目を取得する) だけで済みます。

たとえば、コードでは次のようになります。

dcc_dt = k1.item() * y_cp - (k2.item() + k3.item()) * y_cc
dcp_dt = k2.item() * y_cc - k1.item() * y_cp

また、観測データの大規模な配列を扱っている場合は、Cython、Boost.Pythonなどを使用して、ODE モデルを Python 拡張機能に変換することを検討することをお勧めします。これは、MCMC で何千回もサンプリングする必要がある場合に重要です。後者をodeintライブラリと共に ODE モデルに使用したところ、純粋な Python バージョンよりも 150 倍高速化することができました。

于 2013-09-23T00:58:36.857 に答える