尽管贝叶斯方法相对于频率主义方法的理论优势已经在其他地方进行了详细讨论,但其更广泛采用的主要障碍是“可用性”。
而使用贝叶斯方法,客户可以按照自己认为合适的方式定义模型。
换句话说,我们将Y其视为一个随机变量(或随机向量),其中每个元素(数据点)都根据正态分布分布。此正态分布的均值由具有方差sigma的线性预测变量提供。
PyMC 中的贝叶斯 GLM
要开始在 PyMC 中构建 GLM,让我们首先导入所需的模块。
print(f"Running on PyMC v{pm.__version__}")
az.style.use("arviz-darkgrid")
视频
R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例
视频
贝叶斯推断线性回归与R语言预测工人工资数据
视频
R语言中RStan贝叶斯层次模型分析示例
数据
本质上,我们正在创建一条由截距和斜率定义的回归线,并通过从均值设置为回归线的正态采样来添加数据点。
y = true_regression_line + rng.normal(scale=0.5, size=size)
data = pd.DataFrame(dict(x=x, y=y))
plt.legend(loc=0);
估计模型
让我们将贝叶斯线性回归模型拟合到此数据。
# 定义似然函数
likelihood = Normal("y", mu=intercept + slope * x, sigma=sigma, observed=y)
# 使用NUTS采样推断
idata = sample(3000)
对于了解概率编程的人来说,这应该是相当可读的。
import bambi as bmb
左侧显示了我们的边缘后验 – 对于 x 轴上的每个参数值,我们在 y 轴上得到一个概率,告诉我们该参数值的可能性。
首先,各个参数(左侧)的采样链看起来均匀且平稳(没有大的漂移或其他奇怪的模式)。
其次,每个变量的最大后验估计值(左侧分布中的峰值)非常接近用于生成数据的真实参数(x
是回归系数,sigma
是我们正态的标准差)。
因此,在 GLM 中,我们不仅有一条最佳拟合回归线,而且有许多。后验预测图从后验图(截距和斜率)中获取多个样本,并为每个样本绘制一条回归线。我们可以直接使用后验样本手动生成这些回归线。
随时关注您喜欢的主题
idata.posterior["y_model"] = idata.posterior["Intercept"] + idata.posterior["x"] * xr.DataArray(x)
_, ax = plt.subplots(figsize=(7, 7))
az.plot_lm(idata=idata, y="y", num_samples=100, axes=ax, y_model="y_model")
ax.set_title("Posterior predictive regression lines")
ax.set_xlabel("x");
我们估计的回归线与真正的回归线非常相似。
但是由于我们只有有限的数据,我们的估计存在不确定性,这里用线的可变性来表示。
总结
- 可用性目前是更广泛采用贝叶斯统计的巨大障碍。
Bambi
允许使用从 R 借用的便捷语法进行 GLM 规范。然后可以使用pymc
进行推理。- 后验预测图使我们能够评估拟合度和其中的不确定性。
延伸阅读
有关其他背景信息,以下是一些关于贝叶斯统计的好资源:
版本信息:
%load_ext watermark
%watermark -n -u -v -iv -w -p pytensor
Python implementation: CPython
Python version : 3.11.4
IPython version : 8.14.0
pytensor: 2.14.2
pymc : 5.7.2+0.gd59a960f.dirty
bambi : 0.12.0
arviz : 0.16.1
xarray : 2023.7.0
matplotlib: 3.7.2
numpy : 1.25.2
sys : 3.11.4 | packaged by conda-forge | (main, Jun 10 2023, 18:08:17) [GCC 12.2.0]
pandas : 2.0.3
Watermark: 2.4.3
可下载资源
关于作者
Kaizong Ye是拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。
本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。
非常感谢您阅读本文,如需帮助请联系我们!