《贝叶斯方法:概率编程与贝叶斯推断》——1.6 补充说明

简介:

本节书摘来异步社区《贝叶斯方法:概率编程与贝叶斯推断》一书中的第1章,第1.6节,作者:【加】Cameron Davidson-Pilon(卡梅隆 戴维森-皮隆),更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.6 补充说明

1.6.1 从统计学上确定两个λ值是否真的不一样

在短信接收例子中,我们直观地观测了λ1和λ2的先验信息并认为它们是不同的。这很公平,毕竟先验的位置基本离得非常远。但如果这并不是真相,有一部分分布其实是重合的呢?我们怎么才能让上面的结论更加的正式呢?

一种方法就是计算出P(λ1<λ2|data),即在获得观察数据的前提下,λ1的真实值比λ2小的概率。如果这个概率接近50%,那相当于抛硬币得到的结果,这样我们就不能确定它们是否真的不同。如果这个概率接近100%,那么我们就能确定地说这两个值是不同的。利用后验中的样本,这种计算非常简单——我们计算λ1后验中的样本比λ2后验中的样本小的次数占比:

print (lambda_1_samples < lambda_2_samples)
# Boolean array: True if lambda_1 is less than lambda_2.

[Output]:
 
[ True True True True ..., True True True True]


# How often does this happen?
print (lambda_1_samples < lambda_2_samples).sum()
 
# How many samples are there?
print lambda_1_samples.shape[0]

[Output]: 
 
29994 
30000 


# The ratio is the probability. Or, we can just use .mean:
print (lambda_1_samples < lambda_2_samples).mean()

[Output]: 
 
0.9998```
结果很显然,有几乎100%的把握可以说这两个值是不等的。

我们也可以再问详细一点,比如:“两个值之间相差1、2、5、10的概率有多大?”

The vector abs(lambda_1_samples - lambda_2_samples) > 1 is a boolean,

True if the values are more than 1 apart, False otherwise.

How often does this happen? Use .mean()

for d in [1,2,5,10]:

 v = (abs(lambda_1_samples - lambda_2_samples) >= d).mean()
  print "What is the probability the difference is larger than %d\
        ? %.2f"%(d,v)

[Output]:
 
What is the probability the difference is larger than 1? 1.00
What is the probability the difference is larger than 2? 1.00
What is the probability the difference is larger than 5? 0.49
What is the probability the difference is larger than 10? 0.00`

1.6.2 扩充至两个转折点

读者们或许会对前面模型中转折点个数的扩充,即如果不止一个转折点会怎么样感兴趣,或者会对只有一个转折点的结论表示怀疑。下面我们把模型扩充至两个转折点(意味着会出现3个λi)。新模型跟之前的比较相像。

screenshot

我们把这个模型也编译成代码,跟前面的代码看上去差不多。

lambda_1 = pm.Exponential("lambda_1", alpha)
lambda_2 = pm.Exponential("lambda_2", alpha)
lambda_3 = pm.Exponential("lambda_3", alpha)
 
tau_1 = pm.DiscreteUniform("tau_1", lower=0, upper=n_count_data-1)
tau_2 = pm.DiscreteUniform("tau_2", lower=tau_1, upper=n_count_data)
 
@pm.deterministic
def lambda_(tau_1=tau_1, tau_2=tau_2,
              lamb-da_1=lambda_1, lambda_2=lambda_2, lambda_3 = lambda_3):
    out = np.zeros(n_count_data) # number of data points
    out[:tau_1] = lambda_1 # lambda before tau is lambda_1
    out[tau_1:tau_2] = lambda_2
    out[tau_2:] = lambda_3    # lambda after (and including) tau
                                    # is lambda_2
    return out
observa-tion = pm.Poisson("obs", lambda_, value=count_data,observed=True)
mod-el = pm.Model([observation, lambda_1, lambda_2, lambda_3, tau_1,
                      tau_2])
mcmc = pm.MCMC(model)
mcmc.sample(40000, 10000)

图1.6.1展示了5个未知数的后验。我们可以看到模型的转折点大致在第45天和第47天的时候取得。对此你怎么认为呢?我们的模型是否对数据过拟合呢?

确实,我们都可能对数据中有多少个转折点抱有疑惑的态度。例如,我就认为一个转折点好过两个转折点,两个转折点好过三个转折点,以此类推。这意味着对于应该有多少个转折点可以设置一个先验分布并让模型自己做决定!在对模型进行调整之后,答案是肯定的,一个转折点确实比较适合。代码在本章就不展示了,这里我只是想介绍一种思想:用怀疑数据那样的眼光审视我们的模型。

screenshot

相关文章
|
缓存 NoSQL Linux
Redis(一)Centos7.6安装Redis服务
Centos的yum源中没有redis;这里我们需要安装一个第三方的yum源,这里用了Fedora的epel仓库。
3295 0
Redis(一)Centos7.6安装Redis服务
|
JavaScript 前端开发
【vue】 Tinymce 数据 回显问题 | 第一次正常回显后面,显示空白bug不能编辑
【vue】 Tinymce 数据 回显问题 | 第一次正常回显后面,显示空白bug不能编辑
1273 0
|
存储 Web App开发 网络协议
YUV的plannar,packet及semi-planar格式及RGB
YUV的plannar,packet及semi-planar格式及RGB
505 0
YUV的plannar,packet及semi-planar格式及RGB
|
网络协议 iOS开发 API
boost::asio设置同步连接超时
boost::asio设置同步连接超时   CSDN上求助无果,只好用自创的非主流方法了。asio自带的例子里是用deadline_timer的async_wait方法来实现超时的,这种方法需要单独写一个回调函数,不利于把连接和超时封装到单个函数里。
2039 0
|
5天前
|
人工智能 自然语言处理 JavaScript
2026年Windows+Ollama本地部署OpenClaw保姆级教程:本地AI Agent+阿里云上快速搭建
2026年OpenClaw凭借本地部署、私有化运行的特性,成为打造个人智能体的核心工具,而Ollama作为轻量级本地大模型管理工具,能让OpenClaw摆脱对云端大模型的依赖,实现**本地推理、数据不泄露、全流程私有化**的智能体验。本文基于Windows 11系统,从硬件环境准备、Ollama安装与模型定制、OpenClaw部署配置、技能扩展到常见问题排查,打造保姆级本地部署教程,同时补充阿里云OpenClaw(Clawdbot)快速部署步骤,兼顾本地私有化需求与云端7×24小时运行需求,文中所有代码命令均可直接复制执行,确保零基础用户也能快速搭建属于自己的本地智能体。
6801 46
|
2天前
|
人工智能 安全 API
CoPaw:3分钟部署你的 AI助理
源自阿里巴巴开源生态的个人 AI 助理——CoPaw。作为阿里倾力打造的开源力作,CoPaw 完美打通钉钉、飞书、Discord 等多平台对话通道,支持定时任务自动化。内置 PDF/Office 深度处理、新闻摘要等强大技能,更开放自定义扩展接口。坚持数据全程私有化部署,绝不上传云端,让每一位用户都能在大厂技术加持下,拥有安全、专属的智能助手。
|
6天前
|
人工智能 JSON JavaScript
手把手教你用 OpenClaw + 飞书,打造专属 AI 机器人
手把手教你用 OpenClaw(v2026.2.22-2)+ 飞书,10分钟零代码搭建专属AI机器人!内置飞书插件,无需额外安装;支持Claude等主流模型,命令行一键配置。告别复杂开发,像聊同事一样自然对话。
3195 9
手把手教你用 OpenClaw + 飞书,打造专属 AI 机器人
|
4天前
|
人工智能 自然语言处理 机器人
保姆级教程:Mac本地搭建OpenClaw及阿里云上1分钟部署OpenClaw+飞书集成实战指南
OpenClaw(曾用名Clawdbot、Moltbot)作为2026年最热门的开源个人AI助手平台,以“自然语言驱动自动化”为核心,支持对接飞书、Telegram等主流通讯工具,可替代人工完成文件操作、日历管理、邮件处理等重复性工作。其模块化架构适配多系统环境,既可以在Mac上本地化部署打造私人助手,也能通过阿里云实现7×24小时稳定运行,完美兼顾隐私性与便捷性。
2610 4
|
12天前
|
存储 人工智能 负载均衡
阿里云OpenClaw多Agent实战宝典:从极速部署到AI团队搭建,一个人=一支高效军团
在AI自动化时代,单一Agent的“全能模式”早已无法满足复杂任务需求——记忆臃肿导致响应迟缓、上下文污染引发逻辑冲突、无关信息加载造成Token浪费,这些痛点让OpenClaw的潜力大打折扣。而多Agent架构的出现,彻底改变了这一现状:通过“单Gateway+多分身”模式,让一个Bot在不同场景下切换独立“大脑”,如同组建一支分工明确的AI团队,实现创意、写作、编码、数据分析等任务的高效协同。
5271 31

热门文章

最新文章