没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
pymc和贝叶斯模型编程(1)
简介和安装
简介
PyMC是一个 Python 概率编程库,允许用户使用简单的 Python API
构建贝叶斯模型,并使用马尔可夫链蒙特卡罗 (MCMC) 方法对其进行拟合。
PyMC
致力于使贝叶斯建模尽可能简单、轻松,让用户能够专注于他们的问题而不是方法。
具有如下特性:
� 现代:包括最先进的推理算法,包括 MCMC (NUTS) 和变分推理 (ADVI)。
� 用户友好:使用友好的 Python
语法编写模型。从许多示例笔记本中学习贝叶斯建模。
� 快速:使用PyTensor作为计算后端,通过 C、Numba 或 JAX 进行编译,在 GPU
上运行模型,并从复杂的图形优化中受益。
� 拓展性好:包括概率分布、高斯过程、ABC、SMC
等等。它与用于可视化和诊断的ArviZ以及用于高级混合效果模型的Bambi完美集
成。
� 以社区为中心:在讨论中提出问题、加入MeetUp
活动、在Twitter上关注我们并开始贡献。
PyMC和PyMC3?
PyMC3已重命名为PyMC,PyMC3 基于Theano计算 ,PyMC基于tensorflow 概率计算。
There have been many questions and uncertainty around the future of PyMC3
since Theano stopped getting developed by the original authors, and we
started experiments with a PyMC version based on tensorflow probability.
自从原作者停止开发 Theano 以来,PyMC3
的未来存在许多问题和不确定性,我们开始使用基于张量流概率的 PyMC 版本进行实验。
来源:pymc3·PyPI --- pymc3 · PyPI
pymc与pymc3的安装与使用_pymc和pymc3-
CSDN博客的帖子是2020.11的,帖子中选择安装pymc3可能是当时pymc还没迁移好,py
mc3的Theano不能用可能也是历史原因。总之我认为现在应该安装pymc。
安装
官方推荐:安装 — PyMC 开发文档 --- Installation — PyMC dev documentation
官方只给了用conda创建包含pymc的python环境的示例,我尝试在3.9python执行pip命令
,发现也可以成功安装。
pip install pymc
教程
通用API快速入门
PyMC 简介概述 — PyMC 开发文档 --- Introductory Overview of PyMC — PyMC dev
documentation
为了介绍模型定义、拟合和后验分析,我们首先考虑一个参数具有正态分布先验的简单贝
叶斯线性回归模型。我们需要预测 , 是具有期望的正态分布观测值,其中
是两个预测变量 和 的线性函数。
是截距, 是协变量的系数 ,
代表观测误差。由于我们正在构建贝叶斯模型,因此必须为模型中的未知变量分配先验分
布。我们为两个回归系数选择方差为 100
的零均值正态先验,这对应于有关真实参数值的弱信息。我们选择半正态分布
(以零为界的正态分布) 作为 的先验。
� 在贝叶斯建模中,未知参数都是随机变量,需要一个先验分布。
编程目标:
使用 NumPy 的random模块来模拟该模型中的一些人工数据,然后使用 PyMC
尝试恢复相应的参数。
创建模拟数据
'''
导入依赖库
'''
import arviz as az
import matplotlib.pyplot as plt
import numpy as np
import pymc as pm
import pytensor.tensor as pt
RANDOM_SEED = 8927
rng = np.random.default_rng(RANDOM_SEED)
az.style.use("arviz-darkgrid")
# True parameter values
alpha, sigma = 1, 1
beta = [1, 2.5]
# Size of dataset
size = 100
# Predictor variable
X1 = np.random.randn(size)
X2 = np.random.randn(size) * 0.2
# Simulate outcome variable
Y = alpha + beta[0] * X1 + beta[1] * X2 + rng.normal(size=size) * sigma
使用绘图库 matplotlib 来可视化数据。
fig, axes = plt.subplots(1, 2, sharex=True, figsize=(10, 4))
axes[0].scatter(X1, Y, alpha=0.6)
axes[1].scatter(X2, Y, alpha=0.6)
axes[0].set_ylabel("Y")
axes[0].set_xlabel("X1")
axes[1].set_xlabel("X2");
模型创建
PyMC 中的模型以Model类为中心。它引用所有随机变量 (RV) 并计算模型 logp
及其梯度。通常,您会将其实例化为with上下文的一部分:
basic_model = pm.Model()
with basic_model:
# Priors for unknown model parameters
alpha = pm.Normal("alpha", mu=0, sigma=10)
beta = pm.Normal("beta", mu=0, sigma=10, shape=2)
sigma = pm.HalfNormal("sigma", sigma=1)
# Expected value of outcome
mu = alpha + beta[0] * X1 + beta[1] * X2
# Likelihood (sampling distribution) of observations
Y_obs = pm.Normal("Y_obs", mu=mu, sigma=sigma, observed=Y)
� 在贝叶斯建模中,未知参数都是随机变量,实例中首先创建了alpha、beta和sigm
a三个随机变量。
我们调用pm.Normal构造函数来创建一个随机变量来用作普通先验。第一个参数始终是随
机变量的名称,它几乎总是与分配给的 Python
变量的名称匹配,因为它有时用于从模型中检索变量以汇总输出。随机对象的其余必需参
数是参数,在本例中mu (均值)和sigma
(标准差),我们为模型分配超参数值。一般来说,分布的参数是确定随机变量的位置、
形状或规模的值,具体取决于分布的参数化。 PyMC 中提供了最常用的分布,例如Beta
、 Exponential 、 Categorical 、 Gamma 、 Binomial等。
� 用这些随机变量建立输入和输出的关系,对应观测/证据和事实的关系
beta变量有一个附加的shape参数,将其表示为大小为 2 的向量值参数。
shape参数可用于所有分布,并指定随机变量的长度或形状,但对于标量变量来说是可选
的,因为它默认值为一。它可以是一个整数来指定一个数组,也可以是一个元组来指定一
个多维数组(
例如
shape=(5,7)生成一个具有 5 x 7 矩阵值的随机变量)。
� 有关分布、采样方法和其他 PyMC 函数的详细说明可在API 文档中找到。
mu是创建的一个确定性随机变量,它的值
完全
由其父级的值决定。也就是说,除了父母
固有的不确定性之外,不存在任何不确定性。这里,
mu只是截距alpha与beta系数和预测变量(无论它们的值是什么)的两个乘积之和。
PyMC
随机变量和数据可以任意加、减、除、乘并索引以创建新的随机变量。这可以实现出色的
模型表现力。还提供了许多常见的数学函数,如sum 、 sin 、
exp和线性代数函数,如dot (用于内积)和inv (用于逆)。
是随机变量的特殊情况,我们称之为观察随机变量,表示模型的数据可能性。它与标准
随机变量相同,只是其observed参数(将数据传递给变量)表明该变量的值已被观察到
,并且不应通过应用于模型的任何拟合算法来更改。数据可以以ndarray或DataFrame对
象的形式传递。请注意,与模型的先验不同,
Y_obs正态分布的参数不是固定值,而是确定性对象mu和随机sigma
。这会在似然和这两个变量之间创建父子关系。
模型采样
with basic_model:
# draw 1000 posterior samples
idata = pm.sample()
'''
如果想使用切片采样算法而不是
NUTS
(默认)来对参数进行采样,我们可以将其指定
sample step
参数
'''
with basic_model:
# instantiate sampler
剩余16页未读,继续阅读
资源评论
hardw_littlew
- 粉丝: 244
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 软考冲刺的基本内容和操作
- Centos8.x通过RPM包升级OpenSSH9.8(openssl-3.0) 升级有风险,前务必做好快照,以免升级后出现异常影响业务
- Centos8.x通过RPM包升级OpenSSH9.7(openssl-3.0) 升级有风险,前务必做好快照,以免升级后出现异常影响业务
- 数据库基本内容讲解和操作
- Centos8.x通过RPM包升级OpenSSH9.9.(openssl-3.4.0) 升级有风险,前务必做好快照,以免升级后出现异常影响业务
- FortFirewall-3.14.7-windows10-x86-64 防火墙
- javaweb基本操作
- Centos7.x升级openssl-1.1.1w rpm安装包 升级有风险,前务必做好快照,以免升级后出现异常影响业务
- yolo的基本操作用法
- Ubuntu20/22/24通过deb包升级OpenSSH9.9方法 不支持16、18版本,升级有风险,前务必做好快照,以免升级后出现异常影响业务
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功