楼主: 时光永痕
777 0

[数据挖掘新闻] PyMC3和贝叶斯模型的“快速”介绍 [推广有奖]

  • 0关注
  • 14粉丝

svip3

学术权威

12%

(VIP/贵宾)三级

80%

威望
0
论坛币
26 个
通用积分
49.7576
学术水平
4 点
热心指数
4 点
信用等级
4 点
经验
34070 点
帖子
2731
精华
0
在线时间
317 小时
注册时间
2020-7-21
最后登录
2024-5-8

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
PyMC3和贝叶斯模型的“快速”介绍
PyMC3和贝叶斯模型的“快速”介绍,第一部分
在这篇文章中,我将使用一个具体的,希望与实际相关的示例进行“简要”,实用的介绍,该示例取自真实数据。
对于本系列文章,我将假设您具有概率的基本知识(尤其是贝叶斯定理),并且对python有所了解。 。对于更深入的概率课程,我推荐 这本书。有关贝叶斯统计的课程,请获取 此书。
等待出租车
我们都去过那里,大约在开会前15分钟,在聚会之后的凌晨4点,或者只是在我们懒得走路时。即使像Uber这样的应用程序都使它相对轻松了一些,但有时还是有必要或切实际的是只等出租车。因此,我们不耐烦地等待,可能是在想知道我们将要等待多少时间。
造型
要在贝叶斯统计框架中回答这个问题,我们首先必须选择两件事:
一个生成模型我们可以观察  
甲先验分布该模型的参数  
顾名思义,生成模型是一种概率模型,它能够生成看起来很像我们可能从试图建模的现象中收集的数据的数据。在我们的案例中,我们需要一个模型来生成看起来像等待时间的数据。
幸运的是,由于无记忆的特性,指数分布(一种非常著名的连续分布)可用于为计划外到达的等待时间建模,这意味着在等待任何时间后,该分布与开始。
指数分布的一个例子。大部分密度集中在零附近。
该分布具有单个参数λ,该参数指示事件发生的预期速率。我们需要描述有关此参数的先验信息或信念。例如,我们知道这是肯定的(我们的出租车不能在我们等待之前到达!),它没有自然的上限,并且根据我们对此的了解(或相信),我们可以选择任意数量的分布编码这些知识。为简单起见,我再次选择指数,以使预期到达率是每5分钟1辆出租车。
这是在PyMC3中执行的方法。
我们的生成模型。rate_rate是到达率。抱歉。
有了这些,我们现在能够生成一些看起来像等待时间的数据,甚至可以回答有关概率的问题。但是,不能保证答案的准确性。我们需要数据。
我们可能从模型中生成的等待时间的直方图示例。
新增资料
(本文中使用的数据是从 纽约出租车和豪华轿车委员会收集的,并过滤到特定的月份和角落,尤其是2016年的第一个月,以及位于33rd St的第七大道的角落)
奇迹般地,假设我们可以访问一个月的有关出租车接送服务的数据,特别是在我们等待的拐角处的接送服务。我们可以查看连续接机之间的时间,并称其为下次出租车到达的等待时间。
我们数据的直方图。请注意,分布的形状类似于我们的生成模型。
使用这些数据来为一个人的等待时间建模存在一个明显的问题:那个人不一定要等到前一辆出租车离开时就等待,而是要在两个皮卡之间到达某个点。此外,许多空出租车可能在不接人的情况下通过弯道。我们将在以后的文章中看到如何处理这些问题。不过,暂时将其称为近似模型并继续进行。
在PyMC3中将数据添加到我们的模型就像添加参数一样简单:
添加数据。注意wait_times定义中的额外参数“ observed”。
就是这样,我们现在准备“训练”我们的模型并查看一些结果。
推论和回答问题
多亏了贝叶斯定理和生成模型,我们现在可以从后验分布中提取样本,这在PyMC3中也很简单
我们可以选择许多不同的方法来从此分布中提取。在这种情况下,我使用的是经典的Metropolis算法,但PyMC3还具有其他MCMC方法,例如Gibbs采样器和NUTS,以及ADVI中的出色初始化器。
让我们看一下我们的后验分布:
速率参数的后验分布。观察数据后,对不确定性进行编码。
通过我们的后验分布,我们现在可以回答有关速率参数的问题。例如,其期望值约为0.152,相当于每6.5分钟大约有1辆出租车,这也是期望等待时间的期望值。我们还可以查看概率间隔(速率参数在0.15和0.158之间的概率为0.95)或阈值(阈值在0.159以下的概率为0.99)。           
如何使用后验样本计算概率。我们计算案件数,然后除以抽取的样本总数。
试图从此分布中得出有关等待时间的直接结论很诱人,但这是一个错误。后验分布是我们对模型参数的了解的表示,而不是我们正在建模的现象的表示。换句话说,它告诉我们关于模型的确定性。平坦的后验意味着我们无法找到一个好的模型,但是有许多可能的模型具有相似的“拟合”。
为了能够回答有关现象本身的问题,我们需要预测分布。这种分布将参数的不确定性添加到模型本身中存在的不确定性中,从而为我们提供了一种衡量预测不确定性的正确方法。我们可以用一条线从中提取样本:  
现在,我们可以提出以下问题:
预计等待时间:6.57
我们等待超过10分钟的概率:0.21
我们等待不到一分钟的概率:0.13
让我们也看看我们的后验分布。请注意,它的尾巴比我们的数据重。这代表了我们对预测的不确定性。
我们的后验分布。尾巴稍重意味着我们不能排除观察到大量等待时间的可能性,尽管我们的数据并未显示很多。
下一步是什么?
尽管此模型可以为我们提供许多信息,但它并不擅长进行预测。这是可以预期的,因为我们没有添加任何可以帮助我们更好地预测目标的功能或协变量。
在下一篇文章中,我们将看到如何向模型添加特征或协变量。我们将简要讨论功能形式,最后给出有关优先选择的注释。
题库
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Ymc 贝叶斯 Metropolis observed python

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-9 21:13