当前位置: 首页 > news >正文

《贝叶斯方法:概率编程与贝叶斯推断》——1.2 我们的贝叶斯框架

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

1.2 我们的贝叶斯框架

我们感兴趣的估计,可以通过贝叶斯的思想被解释为概率。我们对事件A有一个先验估计——例如,在准备测试之前,我们对代码中的漏洞就有了一个先验的估计。

接下来,观察我们的证据。继续拿代码漏洞为例:如果我们的代码通过了X个测试,我们会相应地调整心里的估计。我们称这个调整过后的新估计为后验概率。调整这个估计值可以通过下面的公式完成,这个公式被称为贝叶斯定理,得名于它的创立者托马斯·贝叶斯。

9f10d1d02c003421c8a4cbd5f41dfe86904b3acc

上面的公式并不等同于贝叶斯推论,它是一个存在于贝叶斯推论之外的数学真理。在贝叶斯推论里它仅仅被用来连接先验概率P(A)和更新的后验概率P(A|X)。

1.2.1 不得不讲的实例:抛硬币

几乎所有统计书籍都包含一个抛硬币的实例,那我也从这个开始着手吧。假设你不确定在一次抛硬币中得到正面的概率(剧透警告:它是50%),你认为这里肯定是存在某个比例的,称之为p,但是你事先并不清楚p大概会是多少。

我们开始抛硬币,并记录下每一次抛出的结果——正面或反面,这就是我们的观测数据。一个有趣的问题是:“随着收集到越来越多的数据,我们对p的推测是怎么变化的呢?”

说得更具体一些,当面对着很少量的数据或拥有大量数据时,我们的后验概率是怎么样的呢?下面,我们按照观测到的越来越多的数据(抛硬币数据),逐次更新我们的后验概率图。

在图中我们用曲线表示我们的后验概率,曲线越宽,我们的不确定性越大。如图1.2.1所示,当我们刚刚开始观测的时候,我们的后验概率的变化是不稳定的。但是最终,随着观测数据(抛硬币数据)越来越多,这个概率会越来越接近它的真实值p=0.5(图中用虚线标出)。

注意到图中的波峰不一定都出现在0.5那里,当然它也没有必要都这样。应该明白的是我们事前并不知道p会是多少。事实上,如果我们的观测十分的极端,比如说抛了8次只有1次结果是正面的,这种情况我们的分布会离0.5偏差很多(如果缺少先验的知识,当出现8次反面1次正面时,你真的会认为抛硬币结果是公平的吗?)。随着数据的累积,我们可以观察到,虽然不是每个时候都这样,但越来越多地,概率值会出现在p=0.5。

下面这个实例就简单地从数据角度演示一下贝叶斯推断。

898d8ad43a490713143e5bfc07ecaf1b237c9137

1.2.2 实例:图书管理员还是农民

下面这个故事灵感来自于Daniel Kahneman的《思考,快与慢》一书,史蒂文被描述为一个害羞的人,他乐于助人,但是他对其他人不太关注。他非常乐见事情处于合理的顺序,并对他的工作非常细心。你会认为史蒂文是一个图书管理员还是一个农民呢?从上面的描述来看大多数人都会认为史蒂文看上去更像是图书管理员,但是这里却忽略了一个关于图书管理员和农民的事实:男性图书管理员的人数只有男性农民的1/20。所以从统计学来看史蒂文更有可能是一个农民。

怎么正确地看待这个问题呢?史蒂文实际上更有可能是一个农民还是一个图书管理员呢?把问题简化,假设世上只有两种职业——图书管理员和农民,并且农民的数量确实是图书管理员的20倍。

设事件A为史蒂文是一个图书管理员。如果我们没有史蒂文的任何信息,那么P(A)=1/21=0.047。这是我们的先验。现在假设从史蒂文的邻居们那里我们获得了关于他的一些信息,我们称它们为X。我们想知道的就是P(A|X)。由贝叶斯定理得:

c6e921d35340c0bd1d72a48f703424ddd1c25087

我们知道P(A)是什么意思,那P(X|A)是什么呢?它可以被定义为在史蒂文真的是一个图书管理员的情况下,史蒂文的邻居们给出的某种描述的概率,即如果史蒂文真的是一个图书管理员,他的邻居们将他描述为一个图书管理员的概率。这个值很可能接近于1。假设它为0.95。

P(X)可以解释为:任何人对史蒂文的描述和史蒂文邻居的描述一致的概率。现在这种形式有点难以理解,我们将其做一些逻辑上的改造:

66f32e88795bb2530c0c6397026067c88015e327

其中~A表示史蒂文不是一个图书管理员的事件,那么他一定是一个农民。现在我们知道P(X|A)和P(A),另外也可知P(~A)=1-P(A)=20/21。现在我们只需要知道P(X|~A),即在史蒂文为一个农民的情况下,史蒂文的邻居们给出的某

种描述的概率即可。假设它为0.5,这样,screenshot

结合以上:

2e7427c7e1ae305f0dac72cbed875e1223390460

这个值并不算高,但是考虑到农民的数量比图书管理员的数量多这么多,这个结果也非常合理了。在图1.2.2中,对比了在史蒂文为农民和史蒂文为图书管理员时的先验和后验概率。

%matplotlib inline
from IPython.core.pylabtools import figsize
import numpy as np
from matplotlib import pyplot as plt
figsize(12.5, 4)
plt.rcParams['savefig.dpi'] = 300
plt.rcParams['figure.dpi'] = 300
 
colors = ["#348ABD", "#A60628"]
prior = [1/21., 20/21.]
posterior = [0.087,1-0.087]
plt.bar([0, .7], prior, alpha=0.70, width=0.25,
       color=colors[0], label="prior distribution",
       lw="3", edgecolor="#348ABD")
 
plt.bar([0+0.25, .7+0.25], posterior, alpha=0.7,
       width=0.25, color=colors[1],
       label="posterior distribution",
       lw="3", edgecolor="#A60628")
 
plt.xticks([0.20, 0.95], ["Librarian", "Farmer"])
plt.title("Prior and posterior probabilities of Steve's\
         occupation")
plt.ylabel("Probability")
plt.legend(loc="upper left");```    
在我们得到X的观测值之后,史蒂文为图书管理员的概率增加了,虽然增加的不是很多,史蒂文为农民的可能性依旧是相当大的。

这是一个关于贝叶斯推断和贝叶斯法则的一个简单的实例。不幸的是,除了在人工结构的情况下,要执行更加复杂的贝叶斯推断所使用到的数学只会变得更加的复杂。在后面我们将看到执行这种复杂的属性分析并没有必要。首先,我们必须扩充我们的建模工具。下一章的概率分布,如果你已经对它很熟悉了,可以选择跳过(或只是浏览一下),但是对于不熟悉的读者,下一章是很有必要的。

<div style="text-align: center"><img src="https://yqfile.alicdn.com/4b85e09b5edce751598572df5b6dd09064f5de3f.png" width="" height="">

相关文章:

  • 《Wireshark网络分析就这么简单》—从一道面试题开始说起
  • jobs 命令示例
  • 《Haskell并行与并发编程》——第2章,第2.4节Deepseq
  • 《C++ AMP:用Visual C++加速大规模并行计算》——3.5 array_view T,N
  • 《用友ERP-U8(V8.72)模拟实战----财务、供应链和生产制造》一1.4 系统管理注册和导入演示账套...
  • 《Unreal Engine 4蓝图可视化编程》一导读
  • 《Splunk智能运维实战》——3.8 使用散点图根据大小和响应时间标识离散的请求...
  • 模块与包
  • 生成模型和判别模型
  • 树莓派+pythonista实时监控系统
  • mysql开发之---使用游标双层嵌套对总表进行拆分为帖子表和回复表
  • window 下安装 wget 命令
  • V8 Ignition:JS 引擎与字节码的不解之缘
  • centos安装vsftp
  • 【zabbix系列】安装与加入host
  • 0x05 Python数据分析,Anaconda八斩刀
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • classpath对获取配置文件的影响
  • CSS盒模型深入
  • eclipse(luna)创建web工程
  • fetch 从初识到应用
  • iOS 系统授权开发
  • js 实现textarea输入字数提示
  • Markdown 语法简单说明
  • mockjs让前端开发独立于后端
  • node 版本过低
  • React as a UI Runtime(五、列表)
  • Spring声明式事务管理之一:五大属性分析
  • 电商搜索引擎的架构设计和性能优化
  • 翻译--Thinking in React
  • 给第三方使用接口的 URL 签名实现
  • 力扣(LeetCode)22
  • 配置 PM2 实现代码自动发布
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 微信公众号开发小记——5.python微信红包
  • 用element的upload组件实现多图片上传和压缩
  • 原生js练习题---第五课
  • 怎样选择前端框架
  • scrapy中间件源码分析及常用中间件大全
  • 昨天1024程序员节,我故意写了个死循环~
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (2)(2.10) LTM telemetry
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (SpringBoot)第二章:Spring创建和使用
  • (笔试题)合法字符串
  • (独孤九剑)--文件系统
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (蓝桥杯每日一题)love
  • (四) 虚拟摄像头vivi体验
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (转)创业的注意事项