Py の pymc: pymc、インストール、および使用方法の詳細な紹介

Py の pymc: pymc、インストール、および使用方法の詳細な紹介

目次

pymc の概要

pymcのインストール

pymcの使い方

1. 連続したタスク

(1) オイラー・丸山スキームを使用して SDE のパラメータを推定する


pymc の概要

       PyMC (旧名 PyMC3) は、ベイジアン統計モデリングのための高度なマルコフ連鎖モンテカルロ(MCMC) および変分推論(VI) アルゴリズムに焦点を当てたPython パッケージです。その柔軟性と拡張性により、さまざまな問題に適用できます。PyMC は、さまざまな統計モデリングおよび推論タスクに豊富な機能とアルゴリズムのセットを提供する強力なベイジアン モデリング ツールです。(一般化された) 線形および階層線形モデル、因果推論、診断とモデル評価、ガウス過程、ODE モデル推論、マルコフ連鎖モンテカルロ法、混合モデル、生存分析、時系列、変分推論のケース スタディが含まれます。その特徴は次のとおりです。
>> 直感的なモデル仕様構文。たとえば、x ~ N(0,1) は x = Normal('x',0,1) と変換できます。
>> No U などの強力なサンプリング アルゴリズム-Turn Sampler は、フィッティング アルゴリズムの特別な知識がなくても、数千のパラメーターを持つ複雑なモデルを処理できます。
>> 変分推論: 高速な近似事後推定を提供する ADVI と、大規模なデータセットに対する小規模バッチ ADVI を提供します。
>> 計算の
最適化と動的な C または JAX コンパイル
>> NumPy ブロードキャストと高度なインデックス作成
>> 線形代数演算子
>> シンプルなスケーラビリティ
>> 欠損値充填の透過的なサポート

GitHub链接 GitHub - pymc-devs/pymc: Python でのベイジアン モデリング

文档 PyMC の概要 — PyMC 開発ドキュメント

pymcのインストール

pip install pymc

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pymc

 

 

pymcの使い方

その他の例: PyMC サンプル ギャラリー — PyMC サンプル ギャラリー

1. 連続したタスク

(1)オイラー・丸山スキームを使用して SDE のパラメータを推定する





%pylab inline
import arviz as az
import pymc as pm
import scipy
import theano.tensor as tt

from pymc.distributions.timeseries import EulerMaruyama

%config InlineBackend.figure_format = 'retina'
az.style.use("arviz-darkgrid")


# parameters
λ = -0.78
σ2 = 5e-3
N = 200
dt = 1e-1

# time series
x = 0.1
x_t = []

# simulate
for i in range(N):
    x += dt * λ * x + sqrt(dt) * σ2 * randn()
    x_t.append(x)

x_t = array(x_t)

# z_t noisy observation
z_t = x_t + randn(x_t.size) * 5e-3

figure(figsize=(10, 3))
subplot(121)
plot(x_t[:30], "k", label="$x(t)$", alpha=0.5), plot(z_t[:30], "r", label="$z(t)$", alpha=0.5)
title("Transient"), legend()
subplot(122)
plot(x_t[30:], "k", label="$x(t)$", alpha=0.5), plot(z_t[30:], "r", label="$z(t)$", alpha=0.5)
title("All time")
tight_layout()



def lin_sde(x, lam):
    return lam * x, σ2
with pm.Model() as model:

    # uniform prior, but we know it must be negative
    lam = pm.Flat("lam")

    # "hidden states" following a linear SDE distribution
    # parametrized by time step (det. variable) and lam (random variable)
    xh = EulerMaruyama("xh", dt, lin_sde, (lam,), shape=N, testval=x_t)

    # predicted observation
    zh = pm.Normal("zh", mu=xh, sigma=5e-3, observed=z_t)

with model:
    trace = pm.sample(2000, tune=1000)

figure(figsize=(10, 3))
subplot(121)
plot(percentile(trace[xh], [2.5, 97.5], axis=0).T, "k", label=r"$\hat{x}_{95\%}(t)$")
plot(x_t, "r", label="$x(t)$")
legend()

subplot(122)
hist(trace[lam], 30, label=r"$\hat{\lambda}$", alpha=0.5)
axvline(λ, color="r", label=r"$\lambda$", alpha=0.5)
legend();

# generate trace from posterior
ppc_trace = pm.sample_posterior_predictive(trace, model=model)

# plot with data
figure(figsize=(10, 3))
plot(percentile(ppc_trace["zh"], [2.5, 97.5], axis=0).T, "k", label=r"$z_{95\% PP}(t)$")
plot(z_t, "r", label="$z(t)$")
legend()

おすすめ

転載: blog.csdn.net/qq_41185868/article/details/130715772