贝叶斯公式的理解

贝叶斯公式的理解作者:知乎用户链接:https://www.zhihu.com/question/21134457/answer/169523403来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。最近我自己在学习一些关于机器学习的东西,目前学到了贝叶斯统计这一块,我觉得很感兴趣,于是便找了一些资料看了看,在自己琢磨一段时间后,写了一篇博客,原文地址:机器学习(一)——浅谈贝叶斯和…

大家好,又见面了,我是你们的朋友全栈君。

作者:知乎用户

链接:https://www.zhihu.com/question/21134457/answer/169523403

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最近我自己在学习一些关于机器学习的东西,目前学到了贝叶斯统计这一块,我觉得很感兴趣,于是便找了一些资料看了看,在自己琢磨一段时间后,写了一篇博客,原文地址:机器学习(一) —— 浅谈贝叶斯和MCMC。正好题主也说了希望从哲学角度解释一下,我自认为文章写得还算深入浅出,能给大家带来帮助。

为了有打广告之嫌疑,我还是内文章内主要的内容在这里重新编辑一遍,省去全文中MCMC和sklearn的部分,有兴趣的可以自行前往。

浅谈贝叶斯

不论是学习概率统计还是机器学习的过程中,贝叶斯总是是绕不过去的一道坎,大部分人在学习的时候都是在强行地背公式和套用方法,没有真正去理解其牛逼的思想内涵。我看了一下自己学校里一些涉及到贝叶斯统计的课程,content里的第一条都是 Philosophy of Bayesian statistics

历史背景

什么事都要从头说起,贝叶斯全名为托马斯·贝叶斯(Thomas Bayes,1701-1761),是一位与牛顿同时代的牧师,是一位业余数学家,平时就思考些有关上帝的事情,当然,统计学家都认为概率这个东西就是上帝在掷骰子。当时贝叶斯发现了古典统计学当中的一些缺点,从而提出了自己的“贝叶斯统计学”,但贝叶斯统计当中由于引入了一个主观因素(先验概率,下文会介绍),一点都不被当时的人认可。直到20世纪中期,也就是快200年后了,统计学家在古典统计学中遇到了瓶颈,伴随着计算机技术的发展,当统计学家使用贝叶斯统计理论时发现能解决很多之前不能解决的问题,从而贝叶斯统计学一下子火了起来,两个统计学派从此争论不休。

什么是概率?

什么是概率这个问题似乎人人都觉得自己知道,却有很难说明白。比如说我问你 掷一枚硬币为正面的概率为多少?,大部分人第一反应就是50%的几率为正。不好意思,首先这个答案就不正确,只有当材质均匀时硬币为正面的几率才是50%(所以不要觉得打麻将的时候那个骰子每面的几率是相等的,万一被做了手脚呢)。好,那现在假设硬币的材质是均匀的,那么为什么正面的几率就是50%呢?有人会说是因为我掷了1000次硬币,大概有492次是正面,508次是反面,所以近似认为是50%,说得很好(掷了1000次我也是服你)。
掷硬币的例子说明了古典统计学的思想,就是概率是基于大量实验的,也就是 大数定理。那么现在再问你,有些事件,例如:明天下雨的概率是30%;A地会发生地震的概率是5%;一个人得心脏病的概率是40%…… 这些概率怎么解释呢?难道是A地真的100次的机会里,地震了5次吗?肯定不是这样,所以古典统计学就无法解释了。再回到掷硬币的例子中,如果你没有机会掷1000次这么多次,而是只掷了3次,可这3次又都是正面,那该怎么办?难道这个正面的概率就是100%了吗?这也是古典统计学的弊端。

举个例子:生病的几率

一种癌症,得了这个癌症的人被检测出为阳性的几率为90%,未得这种癌症的人被检测出阴性的几率为90%,而人群中得这种癌症的几率为1%,一个人被检测出阳性,问这个人得癌症的几率为多少?

猛地一看,被检查出阳性,而且得癌症的话阳性的概率是90%,那想必这个人应该是难以幸免了。那我们接下来就算算看。

我们用 A 表示事件 “测出为阳性”, 用 B_1 表示“得癌症”, B_2 表示“未得癌症”。根据题目,我们知道如下信息:

P(A|B_{1}) = 0.9, P(A|B_{2}) = 0.1, P(B_{1}) = 0.01, P(B_{2}) = 0.99

那么我们现在想得到人群中检测为阳性且得癌症的几率 P(B_{1},A) :

P(B_{1},A) = P(B_{1}) \cdot P(A|B_{1}) = 0.01 \times 0.9 = 0.009

这里 P(B_{1},A) 表示的是联合概率,得癌症且检测出阳性的概率是人群中得癌症的概率乘上得癌症时测出是阳性的几率,是0.009。同理可得未得癌症且检测出阳性的概率:

P(B_{2},A) = P(B_{2}) \cdot P(A|B_{2}) = 0.99 \times 0.1 = 0.099

这个概率是什么意思呢?其实是指如果人群中有1000个人,检测出阳性并且得癌症的人有9个,检测出阳性但未得癌症的人有99个。可以看出,检测出阳性并不可怕,不得癌症的是绝大多数的,这跟我们一开始的直觉判断是不同的!可直到现在,我们并没有得到所谓的“在检测出阳性的前提下得癌症的 概率 ”,怎么得到呢?很简单,就是看被测出为阳性的这108(9+99)人里,9人和99人分别占的比例就是我们要的,也就是说我们只需要添加一个归一化因子(normalization)就可以了。所以阳性得癌症的概率 P(B_{1}|A) 为:\frac{0.009}{0.099 + 0.009} \approx 0.083 , 阳性未得癌症的概率 P(B_{2}|A) 为: \frac{0.099}{0.099 + 0.009} \approx 0.917 。 这里 P(B_{1}|A)P(B_{2}|A) 中间多了这一竖线 blank 成为了条件概率,而这个概率就是贝叶斯统计中的 后验概率!而人群中患癌症与否的概率 P(B_{1}), P(B_{2}) 就是 先验概率!我们知道了先验概率,根据观测值(observation),也可称为test evidence:是否为阳性,来判断得癌症的后验概率,这就是基本的贝叶斯思想,我们现在就能得出本题的后验概率的公式为:

P(B_{i}|A) = \frac{P(B_{i}) \cdot P(A|B_{i})}{P(B_{1}) \cdot P(A|B_{1}) + P(B_{2}) \cdot P(A|B_{2})}

由此就能得到如下的贝叶斯公式的一般形式。

贝叶斯公式

我们把上面例题中的 A 变成样本(sample) x , 把 B 变成参数(parameter) \theta , 我们便得到我们的贝叶斯公式:

\pi(\theta_i|x) = \frac{f(x|\theta_i)\pi(\theta_i)}{\sum_i f(x|\theta_i)\pi(\theta_i)}

可以看出上面这个例子中,B 事件的分布是离散的,所以在分母用的是求和符号 \sum 。那如果我们的参数\theta的分布是连续的呢?没错,那就要用积分,于是我们终于得到了真正的 贝叶斯公式

\pi(\theta|x) = \frac{f(x|\theta)\pi(\theta)}{\int_\Theta f(x|\theta)\pi(\theta)d\theta}

其中\pi指的是参数的概率分布, \pi(\theta) 指的是先验概率,\pi(\theta|x)指的是后验概率, f(x|\theta) 指的是我们观测到的样本的分布,也就是似然函数(likelihood),记住 竖线blank左边的才是我们需要的。其中积分求的区间 \Theta 指的是参数 \theta 所有可能取到的值的域,所以可以看出后验概率 \pi(\theta|x) 是在知道 x 的前提下在 \Theta 域内的一个关于 \theta 的概率密度分布,每一个 \theta 都有一个对应的可能性(也就是概率)。

理解贝叶斯公式

这个公式应该在概率论书中就有提到,反正当时我也只是死记硬背住,然后遇到题目就套用。甚至在国外读书时学了一门统计推断的课讲了贝叶斯,大部分时间我还是在套用公式,直到后来结合了一些专门讲解贝叶斯的课程和资料才有了一些真正的理解。要想理解这个公式,首先要知道这个竖线 blank 的两侧一会是 x|\theta ,一会是 \theta|x 到底指的是什么,或者说似然函数和参数概率分布到底指的是什么。

似然函数

首先来看似然函数 f(x|\theta) ,似然函数听起来很陌生,其实就是我们在概率论当中看到的各种概率分布 f(x),那为什么后面要加个参数 blank 呢?我们知道,掷硬币这个事件是服从伯努利分布的 Ber(p) , n 次的伯努利实验就是我们熟知的二项分布 Bin(n,p) , 这里的 p 就是一个参数,原来我们在做实验之前,这个参数就已经存在了(可以理解为上帝已经定好了),我们抽样出很多的样本 x 是为了找出这个参数,我们上面所说的掷硬币的例子,由于我们掷了1000次有492次是正面,根据求期望的公式 n \cdot p = \mu (492就是我们的期望)可以得出参数p\frac{492}{1000} = 0.492 ,所以我们才认为正面的概率是近似50%的。

现在我们知道了,其实我们观测到样本x的分布是在以某个参数\theta为前提下得出来的,所以我们记为 f(x|\theta) ,只是我们并不知道这个参数是多少。所以 参数估计 成为了统计学里很大的一个课题,古典统计学中常用的方法有两种:矩方法(momnet)最大似然估计(maximum likelihood estimate, mle) ,我们常用的像上面掷硬币例子中求均值的方法,本质就是矩估计方法,这是基于大数定理的。而统计学中更广泛的是使用最大似然估计的方法,原理其实很简单,在这简单说一下:假设我们有n个样本 x_1, x_2, x_3, ..., x_n, 它们每一个变量都对应一个似然函数:

f(x_1|\theta), f(x_2|\theta), ..., f(x_n|\theta)

我们现在把这些似然函数乘起来:

lik(\theta) = \prod_{i=1}^{n} f(x_i|\theta)

我们只要找到令lik(\theta)这个函数最大的 \theta 值,便是我们想要的参数值(具体计算参考[2]中p184)。

后验分布(Posterior distribution)

现在到了贝叶斯的时间了。以前我们想知道一个参数,要通过大量的观测值才能得出,而且是只能得出一个参数值。而现在运用了贝叶斯统计思想,这个后验概率分布\pi(\theta|x)其实是一系列参数值\theta的概率分布,再说简单点就是我们得到了许多个参数\theta及其对应的可能性,我们只需要从中选取我们想要的值就可以了:有时我们想要概率最大的那个参数,那这就是 后验众数估计(posterior mode estimator);有时我们想知道参数分布的中位数,那这就是 后验中位数估计(posterior median estimator);有时我们想知道的是这个参数分布的均值,那就是 后验期望估计。这三种估计没有谁好谁坏,只是提供了三种方法得出参数,看需要来选择。现在这样看来得到的参数是不是更具有说服力?

置信区间和可信区间

在这里我想提一下 置信区间(confidence interval, CI)可信区间(credibility interval,CI),我觉得这是刚学贝叶斯时候非常容易弄混的概念。
再举个例子:一个班级男生的身高可能服从某种正态分布 N(\mu,\sigma^2) ,然后我们把全班男生的身高给记录下来,用高中就学过的求均值和方差的公式就可以算出来这两个参数,要知道我们真正想知道的是这个参数 \mu,\sigma^2,当然样本越多,得出的结果就接近真实值(其实并没有人知道什么是真实值,可能只有上帝知道)。等我们算出了均值和方差,我们这时候一般会构建一个95%或者90%的置信区间,这个置信区间是对于 样本x来说的,我只算出了一个 \mu 和 一个 \sigma 参数值的情况下,95%的置信区间意味着在这个区间里的样本是可以相信是服从以\mu, \sigma为参数的正态分布的,一定要记住置信区间的概念中是指 一个参数值 的情况下!
而我们也会对我们得到的后验概率分布构造一个90%或95%的区间,称之为可信区间。这个可信区间是对于 参数\theta来说的,我们的到了 很多的参数值,取其中概率更大一些的90%或95%,便成了可信区间。

先验分布(Prior distribution)

说完了后验分布,现在就来说说先验分布。先验分布就是你在取得实验观测值以前对一个参数概率分布的 主观判断,这也就是为什么贝叶斯统计学一直不被认可的原因,统计学或者数学都是客观的,怎么能加入主观因素呢?但事实证明这样的效果会非常好!
再拿掷硬币的例子来看(怎么老是拿这个举例,是有多爱钱。。。),在扔之前你会有判断正面的概率是50%,这就是所谓的先验概率,但如果是在打赌,为了让自己的描述准确点,我们可能会说正面的概率为0.5的可能性最大,0.45的几率小点,0.4的几率再小点,0.1的几率几乎没有等等,这就形成了一个先验概率分布。

那么现在又有新的问题了,如果我告诉你这个硬币的材质是不均匀的,那正面的可能性是多少呢?这就让人犯糊涂了,我们想有主观判断也无从下手,于是我们就想说那就先认为0~1之间每一种的可能性都是相同的吧,也就是设置成0~1之间的均匀分布 Uni(0,1) 作为先验分布吧,这就是贝叶斯统计学当中的 无信息先验(noninformative prior)!那么下面我们就通过不断掷硬币来看看,这个概率到是多少,贝叶斯过程如下: (图来自[3])

<img src="https://pic2.zhimg.com/50/v2-3ef5e8c52f6257d7624dcae8496dc14c_hd.jpg" data-caption="" data-size="normal" data-rawwidth="928" data-rawheight="334" class="origin_image zh-lightbox-thumb" width="928" data-original="https://pic2.zhimg.com/v2-3ef5e8c52f6257d7624dcae8496dc14c_r.jpg">
贝叶斯公式的理解

<img src="https://pic2.zhimg.com/50/v2-0fc8c439d5a4eebf0ca11b46d1b5135d_hd.jpg" data-caption="" data-size="normal" data-rawwidth="937" data-rawheight="318" class="origin_image zh-lightbox-thumb" width="937" data-original="https://pic2.zhimg.com/v2-0fc8c439d5a4eebf0ca11b46d1b5135d_r.jpg">
贝叶斯公式的理解

从图中我们可以看出,0次试验的时候就是我们的先验假设——均匀分布,然后掷了第一次是正面,于是概率分布倾向于1,第二次又是正,概率是1的可能性更大了,但 注意:这时候在0.5的概率还是有的,只不过概率很小,在0.2的概率变得更小。第三次是反面,于是概率分布被修正了一下,从为1的概率最大变成了2/3左右最大(3次试验,2次正1次反当然概率是2/3的概率最大)。再下面就是进行更多次的试验,后验概率不断根据观测值在改变,当次数很大的时候,结果趋向于0.5(哈哈,结果这还是一枚普通的硬币,不过这个事件告诉我们,直觉是不可靠的,一定亲自实验才行~)。有的人会说,这还不是在大量数据下得到了正面概率为0.5嘛,有什么好稀奇的? 注意了!画重点了!(敲黑板) 记住,不要和一个统计学家或者数学家打赌!跑题了,跑题了。。。说回来,我们上面就说到了古典概率学的弊端就是如果掷了2次都是正面,那我们就会认为正面的概率是1,而在贝叶斯统计学中,如果我们掷了2次都是正面,只能说明正面是1的可能性最大,但还是有可能为0.5, 0.6, 0.7等等的,这就是对古典统计学的一种完善和补充,于是我们也就是解释了,我们所谓的 地震的概率为5%;生病的概率为10%等等这些概率的意义了,这就是贝叶斯统计学的哲学思想。

共轭先验(Conjugate prior)

共轭先验应该是每一个贝叶斯统计初学者最头疼的问题,我觉得没有“之一”。这是一个非常大的理论体系,我试着用一些简单的语言进行描述,关键是去理解其思想。
继续拿掷硬币的例子,这是一个二项试验 Bin(n,p) ,所以其似然函数为:

f(x|\theta) = \binom{n}{x} \theta^x(1-\theta)^{n-x}

在我们不知道情况时就先假设其先验分布为均匀分布 Uni(0,1) ,即:

\pi(\theta) = 1, \theta \in (0,1)

那现在根据贝叶斯公式求后验概率分布:

\pi(\theta|x) = \frac{\theta^x(1-\theta)^{n-x}}{\int_0^1\theta^x(1-\theta)^{n-x}d\theta}

我们得到结果为:

\pi(\theta|x) = \frac{\Gamma(n+2)}{\Gamma(x+1)\Gamma(n-x+1)}\theta^{(x+1)-1}(1-\theta)^{(n-x+1)-1}

这么一大串是什么呢?其实就是大名鼎鼎的贝塔分布(Beta distribution)。 简写就是 Be(x+1,n-x+1) 。 比如我掷了10次(n=10),5次正(x=5),5次反,那么结果就是 Be(6,6) , 这个分布的均值就是0.5( \frac{6}{6+6} ),很符合我们想要的结果。

现在可以说明,我们把主观揣测的先验概率定为均匀分布是合理的,因为我们在对一件事物没有了解的时候,先认为每种可能性都一样是非常说得通的。有人会认为,既然无信息先验是说得通的,而且贝叶斯公式会根据我们的观测值不断更新后验概率,那是不是我们随便给一个先验概率都可以呢?当然……不行!!这个先验概率是不能瞎猜的,是需要根据一些前人的经验和常识来判断的。比如我随便猜先验为一个分段函数:

\pi(\theta) = \begin{cases} 1 & \text{ if }\theta\in(0,0.2),(0.3,0.5),(0.7,1) \\\ 0 & \text{ if }\theta\in(0.2,0.3),(0.5,0.7) \end{cases}

靠,是不是很变态的一个函数…就是假设一个极端的情况,如果你把这个情况代入贝叶斯公式,结果是不会好的(当然我也不知道该怎么计算)。

这个例子中,我看到了可能的后验分布是 Beta 分布,看起来感觉有点像正态分布啊,那我们用正态分布作为先验分布可以吗?这个是可以的(所以要学会观察)。可如果我们把先验分布为正态分布代入到贝叶斯公式,那计算会非常非常麻烦,虽然结果可能是合理的。那怎么办?不用担心,因为我们有共轭先验分布!

继续拿上面这个例子,如果我们把先验分布 \pi(\theta) 设为贝塔分布 Beta(a,b) ,结果是什么呢?我就不写具体的计算过程啦,直接给结果:

\pi(\theta|x) = Beta(x+a,n-x+b)

有没有看到,依然是贝塔分布,结果只是把之前的1换成了 a,b (聪明的你可能已经发现,其实我们所说的均匀分布 Uni(0,1) 等价于 Beta(1,1) ,两者是一样的)。

由此我们便可以称 二项分布的共轭先验分布为贝塔分布注意!接着画重点!:共轭先验这个概念必须是基于似然函数来讨论的,否则没有意义! 好,那现在有了共轭先验,然后呢?作用呢?这应该是很多初学者的疑问。

现在我们来看,如果你知道了一个观测样本的似然函数是二项分布的,那我们把先验分布直接设为 Beta(a,b) ,于是我们就 不用计算复杂的含有积分的贝叶斯公式 便可得到后验分布 Beta(x+a,n-x+b) 了!!!只需要记住试验次数 n ,和试验成功事件次数 x 就可以了!互为共轭的分布还有一些,但都很复杂,用到的情况也很少,推导过程也极其复杂,有兴趣的可以自行搜索。我说的这个情况是最常见的!

注意一下,很多资料里会提到一个概念叫伪计数(pseudo count),这里的伪计数值得就是a,b对后验概率分布的影响,我们会发现如果我们取
Beta(1,1) ,这个先验概率对结果的影响会很小,可如果我们设为
Beta(100,100) ,那么我们做10次试验就算是全是正面的,后验分布都没什么变化。

参考书籍

[1]韦来生,《贝叶斯统计》,高等教育出版社,2016
[2]John A.Rice, 《数理统计与数据分析》(原书第三版), 机械工业出版社, 2016
[3]Cameron Davidson-Pilon, Probabilistic Programming and Bayesian Methods for Hackers(github.com/CamDavidsonP), 2016

声明:

本篇内容结合了我在炼数成金(dataguru.cn)报的Python机器学习课程以及Udacityud-120:机器学习入门课程的讲解,让我对贝叶斯有了一个新的理解和认识,表示感谢。

这篇文章主要介绍了贝叶斯统计的数学思想,希望能对大家有所帮助,如果有任何错误和解释不当的地方,请给我评论,我也只是个初学者,也希望能得到大神的指点。

( 本文仅限于非商业性转载,且注明出处)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/136961.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 2021年 sublime txt3 激活码(最新序列号破解)

    2021年 sublime txt3 激活码(最新序列号破解),https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • java分布式(java入门)

    java分布式(java入门)【声明:版权所有,欢迎转载,请勿用于商业用途。联系信箱:feixiaoxing@163.com】说起来,在大学里面我学过的编程语言只有c++和java。这其中c++是作为必修课学的,而java是作为选修课学的。至于后面的c、汇编、python、js这些语言,那都是工作了之后才学的。至于这些语言有什么用,在什么场景下使用效率最高,其实说实话,当时心里不是很清楚,等到真正明白过…

  • python numpy教程_python读取图片尺寸

    python numpy教程_python读取图片尺寸pythonnumpy图片pad参数详解

  • html可视化布局工具_iframe嵌套多个页面

    html可视化布局工具_iframe嵌套多个页面使用易优cms如何分栏目调用栏目banner图呢,下面小编就给大家提供一个方法来实现。1.先再后台添加栏目字段。1.高级选项,2.字段管理,3.栏目字段,4.新增字段 2.新增字段,字段标题“栏目banner图”,字段名称“banner”,字段类型“单张图”3.模板标签的调用。添加完成后,我们在模板文件里找到图片相对应的代码,填写为我们新增的字段代码即可。当前栏目banner图:{$ey…

  • 风中有朵雨做的云解析_MySQL comment

    风中有朵雨做的云解析_MySQL comment其实就是告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了。默认情况下,delimiter是分号;。在命令行客户端中,如果有一行命令以分号结束,那么回车后,mysql将会执行该命令。DELIMITER$$DROPTRIGGERIFEXISTS`updateegopriceondelete`$$CREATETRIGGER`updateego

    2022年10月23日
  • c语言入门教程–-10函数

    c语言入门教程–-10函数

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号