gitbook/程序员的数学基础课/docs/80393.md
2022-09-03 22:05:03 +08:00

139 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 21 | 概率基础(下):联合概率、条件概率和贝叶斯法则,这些概率公式究竟能做什么?
你好,我是黄申。
上一节我介绍了随机现象、随机变量以及概率分布这些比较简单的概念。为什么要学习这些概念呢?其实就是为了更精确地描述我们生活中的现象,用数学的视角看世界,以此解决其中的问题。
但是实际生活中的现象并非都像“投硬币”那样简单,有很多影响因素都会影响我们去描述这些现象。比如,看似很简单的“投硬币”,我们其实只是考虑最主要的情况,粗暴地把硬币出现的情况一分为二。比如说,不同类型的硬币是否会影响正反面的概率分布呢?站立的情况如何考虑呢?再比如说,在汽车速度的例子中,经过的交通路线,不同的路线是否会影响速度的概率分布呢?
一旦影响因素变多了,我们需要考虑的问题就多了。想要解决刚才那几个问题,更精确地描述这些现象,我们就需要理解几个新的概念,联合概率、条件概率以及贝叶斯法则。
从数学的角度来说,这些概念能描述现实世界中更为复杂的现象,建立更精细的数学模型。比如,我们后面要讲的朴素贝叶斯算法就是建立在联合概率、条件概率和边缘概率之上的。所以,这一节的内容也非常重要,你一定要认真学习并且掌握。
## 联合概率、条件概率和边缘概率
最近,我一直在操心儿子的教育问题,所以一直在研究他班级的成绩单。为了弄清我儿子在班级上的成绩排名,我向老师要了张全班成绩的分布表。
![](https://static001.geekbang.org/resource/image/cf/3d/cf93c9001c0638f0e85c033a3d9aa23d.png?wh=1592*368)
这张表中有两个随机变量一个是学生的性别一个是分数区间。我们很容易就可以得出这个班中男生的概率是P(男生)=10/20=50%90分及以上的学生的概率是P(90-100)=4/20=20%。那全班考了90分以上的男生的概率是多少呢我们只要找到90分以上的男生人数用这个人数除以全班总人数就行了也就是P(男生, 90-100)=2/20=10%。
你有没有发现“90分以上的男生”这个概率和之前单独求男生的概率或90分以上的概率不一样。之前只有一个决定因素现在这个概率由性别和分数这两个随机变量同时决定。这种由多个随机变量决定的概率我们就叫**联合概率,**它的概率分布就是**联合概率分布**。随机变量x和y的联合概率使用P(x, y)表示。我算出了这个例子里所有的联合概率分布。
![](https://static001.geekbang.org/resource/image/24/6b/2428d89357f2a27e0e9f0a4efa97d06b.png?wh=1580*302)
这里的例子只有两个随机变量但是我们可以很容易扩展到更多的随机变量比如再增加一个学科的变量。那么我们就可以观测这样的数据“班级上女生的数学考了90分及以上的概率是多少其中女生是关于性别变量数学是关于学科变量而90分及以上是关于分数变量。
那么联合概率和单个随机变量的概率之间有什么关联呢?
对于离散型随机变量我们可以通过联合概率P(x, y)在y上求和就可以得到P(x)。对于连续型随机变量我们可以通过联合概率P(x, y)在y上的积分推导出概率P(x)。这个时候我们称P(x)为**边缘概率**。
除了边缘概率的推导,多个变量的联合概率和单个变量的概率之间还存在一个有趣的关系。在解释这个关系之前,让我先来介绍**条件概率**。
条件概率也是由多个随机变量决定,但是和联合概率不同的是,它计算了给定某个(或多个)随机变量的情况下,另一个(或多个)随机变量出现的概率,其概率分布叫做**条件概率分布**。给定随机变量x随机变量y的条件概率使用P(y | x)表示。
回到成绩分布的案例。我能理解在不同的阶段男生和女生的成绩可能无法直接相比。所以我更关心的是自己儿子和其他男生相比是否落后了。那么我的脑子里就产生了这样一个问题“在男生中考90分及以上的概率是多少”。
仔细看这个问题和前面几个有所不同我只关心男生这个群体所以解答应该是找到考了90分以上的男生的人数然后用这个人数除以男生总人数注意不再是全部总人数。根据上述表格的数据来计算P(90-100|男生)= 2/10=20%。
解释清楚了条件概率,我就可以列出概率、条件概率和联合概率之间的“三角”关系了。简单地说,联合概率是条件概率和概率的乘积,采用通用的公式来表达就是:
![](https://static001.geekbang.org/resource/image/51/54/5100c87e5cdec55d5e7eac4f9531a154.png?wh=174*34?wh=174*34)
同样的道理,我们也可以得到:
![](https://static001.geekbang.org/resource/image/e4/40/e496e2cf7a9bb127dc38b1220b6e8140.png?wh=165*34?wh=165*34)
我们仍然可以使用成绩的案例,来验证这个公式。为了更清晰地表述这个问题,我们使用如下的符号:
* |男, 90-100| 表示考了90分以上的男生人数
* |男| 表示男生人数;
* |全班| 表示全班人数。
男生中考了90分及以上的概率为P(90-100 | 男生) = |男生, 90-100| / |男生|全班中男生的概率为P(男) = |男生| / |全班|。如果我们将p(90-100 | 男生) 乘以 P(男) 会得到什么结果呢?
(|男, 90-100| / |男生|) \* (|男生| / |全班|) = |男, 90-100| / |全班|
这不就是全班中男生考了90分及以上的联合概率吗其实概率、条件概率和联合概率之间的这种“三角”关系也是著名的贝叶斯定理的核心下面我来详细解释什么是贝叶斯定理以及它可以运用在什么场景之中。
## 贝叶斯定理
我们假设有这样一个场景我想知道男生考了90100分的概率有多少来评估一下儿子在男生中算什么水平。可是老师出于隐私保护并没有把全班数据的分布告诉我她说道“我可以告诉你全班考90100分的概率以及90100分中男生的概率但是不能告诉你其他信息了”。这个时候贝叶斯定理就可以帮上忙啦。
刚刚我们提到:
![](https://static001.geekbang.org/resource/image/51/54/5100c87e5cdec55d5e7eac4f9531a154.png?wh=174*34?wh=174*34)![](https://static001.geekbang.org/resource/image/e4/40/e496e2cf7a9bb127dc38b1220b6e8140.png?wh=165*34?wh=165*34)
所以就有:
![](https://static001.geekbang.org/resource/image/d0/79/d082a9fc31d9378f4511dc23807df179.png?wh=347*84)
这就是非常经典的贝叶斯法则。为什么说经典呢是因为它有很多应用的场景比如朴素贝叶斯你可以多多熟悉一下这个公式。在这个公式中还包含了先验概率Prior Probability、似然函数Likelihood、边缘概率Marginal Probability和后验概率Posterior Probability的概念。
在这里面我们把P(x)称为先验概率。之所以称为“先验”,是因为它是从数据资料统计得到的,不需要经过贝叶斯定理的推算。
P(y | x)是给定x之后y出现的条件概率。在统计学中我们也把P(y | x)写作似然函数L(y | x)。在数学里似然函数和概率是有区别的。概率是指已经知道模型的参数来预测结果而似然函数是根据观测到的结果数据来预估模型的参数。不过当y值给定的时候两者在数值上是相等的在应用中我们可以不用细究。
另外我们没有必要事先知道P(y)。P(y)可以通过联合概率P(x, y)计算边缘概率得来而联合概率P(x, y)可以由P(y|x) \* P(x)推出。针对离散型和连续型的边缘概率推导分别如下:
![](https://static001.geekbang.org/resource/image/8b/d6/8bed8df818f0ebb7367ccfc2d27549d6.png?wh=123*48)![](https://static001.geekbang.org/resource/image/8d/61/8d2a747caa6a629c6c38f6fc26c8ec61.png?wh=136*39)
而P(x|y)是根据贝叶斯定理通过先验概率P(x)、似然函数P(y | x)和边缘概率P(y)推算而来,因此我们把它称作后验概率。
回到刚刚的案例我可以通过这样的式子来计算男生考90-100分的概率
P(90-100 | 男生) = {P(男生 | 90-100) \* P(90 -100)}/ P(男生)
我只需要数数看班上男生有多少、总人数多少就能算出P(男生)。在加上之前老师告诉我的P(男生 | 90-100)和P(90 -100)就能推算出P(90-100 | 男生)了。这个例子就是通过先验概率,推导出后验概率,这就是贝叶斯定理神奇的地方,也是它最主要的应用场景。
## 随机变量之间的独立性
说到多个随机变量的联合和条件概率,你可能会产生一个问题:这些随机变量是否会相互影响呢?比如,性别和分数之间有怎样的关系?性别是否会影响分数的概率分布?在之前的成绩分布表中,我们可以得到:
p(90-100 | 男生) = 20%
p(90-100 | 女生) = 20%
p(90-100) = 20%
所以p(90-100 | 男生) = p(90-100 | 女生) = p(90-100)也就是全班中考90分及以上的概率、男生中考90分及以上的概率、以及女生中考90分及以上的概率这三者都是一样。以此类推到其他的分数区间同样如此那么从这个数据上得出的结论是性别对考分的区间没有影响。反之我们也可以看到p(男生 | 90-100) = p(男生 | 80-90) = p(男生 | 70-80) = … = p(男生) = 50%,也就是说考分区间对性别没有影响。这种情况下我们就说性别和分数这两个随机变量是**相互独立**的。
相互独立会产生一些有趣的现象,刚刚我们提到:
![](https://static001.geekbang.org/resource/image/84/d9/84b5540ed5aec766f05d1a01d734e8d9.png?wh=103*34)![](https://static001.geekbang.org/resource/image/98/d5/986898f743d134c4d4d0b6b6718f39d5.png?wh=102*27)
另外将p(x | y) = p(x)带入贝叶斯公式,就可以得出:
![](https://static001.geekbang.org/resource/image/5e/43/5ea567d9b3f7129f1ae34f8186d46443.png?wh=265*38?wh=265*38)
变量之间的独立性可以帮我们简化计算。举个例子假设有6个随机变量而每个变量有10种可能的取值那么计算它们的联合概率p($x\_{1}$, $x\_{2}$, $x\_{3}$, $x\_{4}$, $x\_{5}$, $x\_{6}$),在实际中是非常困难的一件事情。
根据排列可能的联合取值会达到10的6次方也就是100万这么多。那么使用实际的数据进行统计时我们也至少需要这个数量级的样本否则的话很多联合概率分布的值就是0产生了数据稀疏的问题。但是如果假设这些随机变量都是相互独立的那么我们就可以将联合概率p($x\_{1},$ $x\_{2}$, $x\_{3}$, $x\_{4}$, $x\_{5}$, $x\_{6}$)转换为p($x\_{1}$) \* p($x\_{2}$) \* p($x\_{3}$) \* p($x\_{4}$) \* p($x\_{5}$) \* p($x\_{6}$)。如此一来我们只需要计算p($x\_{1}$)到 p($x\_{6}$ )就行了。
不过,班主任刚刚打电话给我,说之前的数据表格有点笔误,实际的分布应该是这样的:
![](https://static001.geekbang.org/resource/image/a9/be/a960147eb4468c870a104a471c73b6be.png?wh=1276*284)
你再推算一下就会发现p(分数 | 性别) = p(分数)和 p(性别 | 分数) = p(性别)并不成立,所以两者不再是相互独立的。所以下面这个式子就不再成立了,这点你在计算的时候需要注意。
![](https://static001.geekbang.org/resource/image/5e/43/5ea567d9b3f7129f1ae34f8186d46443.png?wh=265*38?wh=265*38)
在实际项目中,我们会假设多个随机变量是相互独立的,并基于这个假设大幅简化计算,降低对数据统计量的要求。虽然这个假设通常是不成立的,但是仍然可以帮助我们得到近似的解。相比较实现的可行性和求解的精确度,可行性更为重要。在讲解朴素贝叶斯方法中,我会充分利用这一点,从有限的训练样本中构建分类器。
## 总结
这一讲我继续讨论了概率分布相关的内容,不过这次的重点是多个随机变量相关的联合概率、条件概率、边缘概率。这里概念有点多,但是都很重要,因为这三者之间的推算关系,直接构成了贝叶斯定理的核心,所以你要花点时间理解并记住它们。
而贝叶斯定理定义了先验概率、后验概率和似然函数,后验概率和似然函数及先验概率的乘积成正比关系。此外,通过多个变量之间的独立性,我们可以简化联合概率的计算问题。贝叶斯定理和变量之间独立性的假设,对后面理解朴素贝叶斯算法很有帮助。
如果有一定数量的标注数据,那么通过统计的方法,我们可以很方便地得到先验概率和似然函数,然后推算出后验概率,最后依据后验概率来做预测。这整个过程符合监督式机器学习的模型训练和新数据预测这两个阶段,因此朴素贝叶斯算法被广泛运用在机器学习的分类问题中。下一节中,我们详细讨论这个算法。
## 思考题
大年三十晚上爷爷奶奶发红包。爷爷准备的红包是4个50元的6个100元的。奶奶准备的红包是8个50元的4个100元的。全家人随机抽你运气很好拿到一个100元的红包。请问这个红包来自爷爷的概率有多少来自奶奶的概率有多少
欢迎留言和我分享,也欢迎你在留言区写下今天的学习笔记。你可以点击“请朋友读”,把今天的内容分享给你的好友,和他一起精进。