关于数据挖掘:Python用PyMC3贝叶斯模型平均BMA采样信息准则比较和预测可视化灵长类动物的乳汁成分数据

69次阅读

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

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

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

当面对多个模型时,咱们有多种抉择。模型抉择因其简略性而具备吸引力,但咱们正在抛弃无关模型中不确定性的信息。



print(f"Runing 

模型均匀

一种代替办法是执行模型抉择,但探讨所有不同的模型以及给定信息准则的计算值。重要的是要将所有这些数字和测试放在咱们问题的背景下,以便咱们和咱们的客户可能更好地理解咱们办法可能存在的局限性和毛病。如果你在学术界,你能够应用这种办法向论文、演示文稿、论文等的探讨局部增加元素。

另一种办法是执行模型均匀。当初的想法是应用模型的加权平均值生成元模型(和元预测)。有几种办法能够做到这一点,PyMC3 包含其中的 3 种,咱们将简要探讨,您将在 Yuling Yao 等人的工作中找到更彻底的解释。

伪贝叶斯模型均匀

贝叶斯模型能够通过其边缘概率进行加权,这被称为贝叶斯模型均匀。咱们能够应用以下公式来做到这一点:

这种办法称为伪贝叶斯模型均匀或相似赤池的加权,是一种启发式办法,用于依据信息标准值计算每个模型(给定一组固定的模型)的绝对概率。看看分母只是一个归一化项,以确保权重总和为 1。

应用贝叶斯自举进行伪贝叶斯模型均匀

上述计算权重的公式是一种十分好且简略的办法,但有一个次要正告,它没有思考 IC 计算中的不确定性。

重叠

在 PyMC3 中实现的第三种办法被称为 预测散布的重叠 ,并且最近被提出。咱们心愿在一个元模型中组合多个模型,以最小化元模型和 实在 生成模型之间的一致,当应用对数评分规定时,这相当于:

加权后验预测样本

一旦咱们计算了权重,应用上述 3 种办法中的任何一种,咱们就能够应用它们来取得加权后验预测样本。PyMC3 提供了以简略形式执行这些步骤的函数,因而让咱们通过示例查看它们的实际效果。

简而言之,咱们的问题如下:咱们想摸索几种灵长类动物的乳汁成分,假如来自大脑较大的灵长类动物的雌性产生更有 养分 的牛奶(这样做是为了 * 反对这种大大脑的发育)。对于进化生物学家来说,这是一个重要的问题,为了给出和答复,咱们将应用 3 个变量,两个预测变量:新皮层的比例与总品质的比拟 大脑和母亲体重的对数。对于预测变量,每克牛奶的千卡。应用这些变量,咱们将构建 3 个不同的线性模型:

  1. 仅应用新皮层变量的模型
  2. 仅应用品质变量对数的模型
  3. 应用两个变量的模型

d.iloc[:, 1:] = d.iloc[:, 1:] - d.iloc[:, 1:].mean()
d.head()

当初咱们有了数据,咱们将仅应用 neocortex

with pm.Model() as model_0:
  
    trace_0 = pm.sample(2000, return_inferencedata=True)

第二个模型与第一个模型完全相同,只是咱们当初应用品质的对数

with pm.Model() as model_1:
 

    trace_1 = pm.sample(2000, return_inferencedata=True)

最初是第三个模型应用 neocortex和 变量log_mass

with pm.Model() as model_2:
   

    trace_2 = pm.sample(2000, return_inferencedata=True)

当初咱们曾经对 3 个模型的后验进行了采样,咱们将对它们进行视觉比拟。一种抉择是应用 forestplot 反对绘制多个迹线的函数。

az.plot_fo

另一种抉择是在同一图中绘制多条迹线是应用densityplot

az.plot_d

当初咱们曾经对 3 个模型的后验进行了采样,咱们将应用 WAIC(宽泛实用的信息规范)来比拟 3 个模型。咱们能够应用 PyMC3 附带的 compare 性能来做到这一点。

comp = az.compare(model_dict)
comp

咱们能够看到最好的模型是,具备两个预测变量的模型。请留神,数据帧按从最低到最高 WAIC 的程序(最差 的模型)。

当初,咱们将应用 copmuted 来生成预测,而不是基于单个模型,而是基于加权模型集。

ppc_w = pm.sample_posterior_predictive_w(

请留神,咱们正在传递按其索引排序的权重。

咱们还将计算最低 WAIC 模型的 PPC

ppc_2 = pm.sample_posterior_predi

比拟这两种预测的一种简略办法是绘制它们的平均值和 hpd 区间


plt.yticks([])
plt.ylim(-1, 2)
plt.legend();

正如咱们所看到的,两个预测的平均值简直雷同,但加权模型中的不确定性更大。咱们曾经无效地将咱们应该抉择哪个模型的不确定性传递到后验预测样本中。

结语:

还有其余办法能够均匀模型,例如,显式构建一个蕴含咱们领有的所有模型的元模型。而后,咱们在模型之间跳转时执行参数推理。这种办法的一个问题是,在模型之间跳跃可能会障碍后验的正确采样。

版本信息

%load_ext watermark
%watermark -n -u -v -iv -w


最受欢迎的见解

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