打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Py之pymc:pymc的简介、安装、使用方法之详细攻略

Py之pymc:pymc的简介、安装、使用方法之详细攻略


pymc的简介

       PyMC(以前称为PyMC3)是一个专注于高级马尔科夫链蒙特卡洛(MCMC)和变分推断(VI)算法的Python包,用于贝叶斯统计建模。其灵活性和可扩展性使其适用于各种问题。PyMC是一个功能强大的贝叶斯建模工具,提供了丰富的特性和算法,适用于各种统计建模和推断任务。包括(广义)线性模型和层次线性模型案例研究、因果推断、诊断和模型评估、高斯过程、ODE模型推断、马尔科夫链蒙特卡洛方法、混合模型、生存分析、时间序列、变分推断。其特点如下:
>> 直观的模型规范语法,例如,x ~ N(0,1) 可以翻译为 x = Normal('x',0,1)
>> 强大的采样算法,例如 No U-Turn Sampler,可以处理具有成千上万个参数的复杂模型,>> 而无需特殊的拟合算法知识。
>> 变分推断:提供快速近似后验估计的ADVI以及用于大型数据集的小批量ADVI。
>> 依赖于PyTensor提供:
>> 计算优化和动态的C或JAX编译
>> NumPy广播和高级索引
>> 线性代数运算符
>> 简单的可扩展性
>> 透明支持缺失值填充

GitHub链接GitHub - pymc-devs/pymc: Bayesian Modeling in Python

文档Introductory Overview of PyMC — PyMC dev documentation

pymc的安装

pip install pymc

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

pymc的使用方法

更多案例PyMC Example Gallery — PyMC example gallery

1、时序性任务

(1)、使用 Euler-Maruyama 方案推断 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()
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
青龙面板拉取常用脚本(JD签到)目前在维护的脚本更新(2021
2022年日历表(一月一张打印版)
宏--战士宏--通用 老雷
WLK-生存猎常用宏
6个完全免费的录音转文字神器,让你事半功倍
视频制作师潘长宏制作的---【精美分隔线】
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服