問題タブ [pymc3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - PyMC で一般的な決定論的関数を定義する方法
私のモデルでは、複雑な Python 関数を使用して一連の親変数から決定論的変数の値を取得する必要があります。
それは可能ですか?
以下は、単純化されたケースで何をしようとしているのかを示す pyMC3 コードです。
このコードを実行すると、y_hat の段階でエラーが発生します。これは、int()
関数内のFindFromGrid(x,w,z)
関数が FreeRV ではなく整数を必要とするためです。
y_haty_hat
の実際のモデルには表現する分析形式がないため、事前に計算されたグリッドからの検索は重要です。
以前に OpenBUGS を使用しようとしましたが、ここで OpenBUGS でこれを行うことができないことがわかりました。PyMC で可能ですか?
アップデート
pyMC github ページの例に基づいて、関数に次のデコレータを追加する必要があることがわかりましたFindFromGrid(x,w,z)
。
これにより、上記の問題が解決されるようです。しかし、グラデーションが必要なため、NUTSサンプラーを使用できなくなりました。
メトロポリスは収束していないようです。
このようなシナリオでは、どのステップ メソッドを使用すればよいですか?
pymc - pymc を使用したパラメーター ベクトルを使用した非線形回帰
現在、scipy.optimize.minimize と scipy.optimize.leastsq を使用して、データセットで非線形回帰を実行しています。PyMC(3) を使用して、フィッティング手順に含まれるすべてのパラメーターの事後調査を行いたいと考えています。SOでこの以前の回答に出くわしました。
これは非常に良い例です。私が見た他の例のほとんどは、線形回帰に関するものでした。ただし、この例は私の目的には完全には適していません。私のモデルには可変数のパラメーターがあり、そのサブセットをフィッティングします。このサブセットは通常、1 ~ 20 個のパラメーターの範囲ですが、それ以上になることもあります。scipy ミニマイザーを使用すると、これらのさまざまなパラメーターが 1D np.ndarray、p の形式でコスト関数に渡されます。
上記のリンクでは、@pymc.deterministic 装飾されたガウス関数にキーワード引数があります。同じコード ブロックがさまざまな (そしてかなりの) 数のパラメーターを処理する必要があるため、これは私にとって非現実的です。代わりにパラメータのベクトルを提供する方法はありますか? また、各パラメーターの事前確率のリストを提供する必要があります。ただし、各パラメーター [(min, max)...] の下限と上限のリストがあるので、問題にはなりません。
pymc - pymc3のディリクレと二項式
pymc3 でディリクレ/多項分布からのサンプリングに問題があります。n=2 の Dirichlet/Multinomial を使用して Beta/Binomial を再作成する簡単なテスト ケースを作成しようとしましたが、うまくいきません。
以下に、二項では機能するが多項では失敗するコードをいくつか示します。明らかな違いの 1 つは、多項式モデルがより制約されていることです。つまり、評価はまず、2 項式モデルでは 10 に設定され、多項式モデルでは [10,10] に設定されます。pymc3 ディリクレ コードでは、「の最初のk-1
要素のみx
が期待されます」と表示されますが、私のコードでは形状 2 の配列のみが機能するようです。
出力は、num_friends
とrating
が二項の場合にサンプリングされていることを示していますが、多項の場合にはサンプリングされていません。friends_ratings
両方でサンプリングされています。ありがとう!
あ、Dirichlet('d', np.array([1,1]))
「浮動小数点エラー 8」でもクラッシュします。値 1 の 2 つの整数が渡された場合にのみ失敗するように見えますnp.array([1.,1.])
。
出力:
pymc - pymc3: njobs>1 対 GPU での並列計算
並列化を使用してpymc3サンプリングを高速化しようとしていますが、わずかなメリットしかありません。
i7 MacBook Pro では、総実行時間を 25 分 (njobs=1) から 13 分 (njobs=6) に短縮できました。pymc が実際にサンプリングを開始するまでに約 4 分かかるため、増加は比較的小さいです。
問題は、pymc3 で GPU を使用して成功した人はいますか? また、サンプリングに 6 ~ 8 分かかるモデルでどれだけのメリットが得られるでしょうか? (私の MacBook には nvidia GT 750M 2Gb が搭載されています)
pymc - PyMC3 で複数のチェーンをサンプリングする方法
PyMC3 で複数のチェーンをサンプリングしようとしています。PyMC2 では、次のようにします。
PyMC3 で同じことを行うにはどうすればよいですか? 「sample」メソッドに「njobs」引数があるのを見ましたが、値を設定するとエラーがスローされます。「pymc.gelman_rubin」出力を取得するために、サンプリングされたチェーンを使用したいと考えています。
pymc - PyMC3 で複雑な尤度を使用する
複雑な尤度関数で PyMC3 を使用しようとしています:
最初の質問: これは可能ですか?
以下は、 Thomas Wiecki の投稿をガイドとして使用した私の試みです。
y_est の式に関する次のメッセージが生成されます。
TypeError: ('名前 ":42" のインデックス 0 (0 ベース) の theano 関数への入力引数が正しくありません', '配列のようなオブジェクトが必要でしたが、変数が見つかりました: おそらく、(おそらく共有)数値配列の代わりに変数?')
ここまで来るのに様々なハードルを乗り越えてきましたが、ここが行き詰っています。それで、私の最初の質問への答えが「はい」であるならば、私は正しい方向に進んでいますか? どんなガイダンスも役に立ちます!
注:これは、私が見つけた同様の質問と、別の質問です。
免責事項:私はこれに非常に慣れていません。私の唯一の以前の経験は、Thomas の投稿の線形回帰の例をうまく再現したことです。また、Theano テスト スイートを正常に実行したので、動作することがわかりました。