关于数据挖掘:Python用PyMC贝叶斯GLM广义线性模型NUTS采样器拟合后验分布可视化

30次阅读

共计 2896 个字符,预计需要花费 8 分钟才能阅读完成。

全文链接:https://tecdat.cn/?p=33436

原文出处:拓端数据部落公众号

只管贝叶斯办法绝对于频率主义办法的实践劣势曾经在其余中央进行了具体探讨,但其更宽泛采纳的次要阻碍是“可用性”。而应用贝叶斯办法,客户能够依照本人认为适合的形式定义模型。

线性回归[](https://www.pymc.io/projects/docs/en/v5.7.2/learn/core_notebo… “Permalink to this heading”)

在此示例中,咱们将帮忙客户从最简略的 GLM – 线性回归开始。一般来说,频率论者对线性回归的认识如下:

而后,咱们能够应用一般最小二乘法(OLS)或最大似然法来找到最佳拟合。

概率重构[](https://www.pymc.io/projects/docs/en/v5.7.2/learn/core_notebo… “Permalink to this heading”)

贝叶斯主义者对世界采取概率观,并用概率分布来表白这个模型。咱们下面的线性回归能够从新表述为:

换句话说,咱们将 Y 其视为一个随机变量(或随机向量),其中每个元素(数据点)都依据正态分布散布。此正态分布的均值由具备方差 sigma 的线性预测变量提供。

PyMC 中的贝叶斯 GLM

要开始在 PyMC 中构建 GLM,让咱们首先导入所需的模块。



print(f"Running on PyMC v{pm.__version__}")


az.style.use("arviz-darkgrid")

数据[](https://www.pymc.io/projects/docs/en/v5.7.2/learn/core_notebo… “Permalink to this heading”)

实质上,咱们正在创立一条由截距和斜率定义的回归线,并通过从均值设置为回归线的正态采样来增加数据点。


y = true_regression_line + rng.normal(scale=0.5, size=size)

data = pd.DataFrame(dict(x=x, y=y))

plt.legend(loc=0);

预计模型[](https://www.pymc.io/projects/docs/en/v5.7.2/learn/core_notebo… “Permalink to this heading”)

让咱们将贝叶斯线性回归模型拟合到此数据。


    # 定义似然函数
    likelihood = Normal("y", mu=intercept + slope * x, sigma=sigma, observed=y)

    # 应用 NUTS 采样推断
    idata = sample(3000)

对于理解概率编程的人来说,这应该是相当可读的。


    import bambi as bmb

idata = model.fit(draws=3000)

要短得多,但这段代码与之前的标准完全相同(如果咱们违心,您也能够更改先验和其余所有内容)。

分析模型[](https://www.pymc.io/projects/docs/en/v5.7.2/learn/core_notebo… “Permalink to this heading”)

贝叶斯推理不仅给了咱们一条最佳拟合线(就像最大似然那样),而是给出了正当参数的整个后验散布。让咱们绘制参数的后验散布和咱们绘制的单个样本。

az.plot_trace(idata, figsize=(10, 7));

左侧显示了咱们的边缘后验 – 对于 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");

咱们预计的回归线与真正的回归线十分类似。然而因为咱们只有无限的数据,咱们的预计存在 不确定性,这里用线的可变性来示意。

总结[](https://www.pymc.io/projects/docs/en/v5.7.2/learn/core_notebo… “Permalink to this heading”)

  • 可用性目前是更宽泛采纳贝叶斯统计的微小阻碍。
  • Bambi容许应用从 R 借用的便捷语法进行 GLM 标准。而后能够应用pymc 进行推理。
  • 后验预测图使咱们可能评估拟合度和其中的不确定性。

延长浏览[](https://www.pymc.io/projects/docs/en/v5.7.2/learn/core_notebo… “Permalink to this heading”)

无关其余背景信息,以下是一些对于贝叶斯统计的好资源:

  • 约翰·克鲁施克(John Kruschke)的优良著述《做贝叶斯数据分析》。

版本信息:

%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

最受欢迎的见解

1.matlab 应用贝叶斯优化的深度学习

2.matlab 贝叶斯隐马尔可夫 hmm 模型实现

3.R 语言 Gibbs 抽样的贝叶斯简略线性回归仿真

4.R 语言中的 block Gibbs 吉布斯采样贝叶斯多元线性回归

5.R 语言中的 Stan 概率编程 MCMC 采样的贝叶斯模型

6. R 语言贝叶斯 Poisson 泊松 - 正态分布模型剖析职业足球比赛进球数

7.R 语言应用贝叶斯 层次模型进行空间数据分析

8.R 语言随机搜寻变量抉择 SSVS 预计贝叶斯向量自回归(BVAR)模型

9.matlab 贝叶斯隐马尔可夫 hmm 模型实现

正文完
 0