单个随机变量的概率很简单,但当考虑两个或更多变量时,情况可能会变得复杂。
仅仅对于两个变量,我们可能感兴趣的有:两个事件同时发生的概率,称为联合概率;一个事件在另一个事件发生的前提下发生的概率,称为条件概率;或者仅仅是一个事件发生的概率,而不考虑其他变量,称为边缘概率。
这些概率类型很容易定义,但要真正理解其含义可能需要一些时间,需要通过一些可以动手实践的实例来加深理解。
在本教程中,您将发现计算联合概率、边缘概率和条件概率背后的直觉。
完成本教程后,您将了解:
- 如何为独立随机变量计算联合概率、边缘概率和条件概率。
- 如何从联合随机变量中收集观测数据并构建联合概率表。
- 如何从联合概率表中计算联合概率、边缘概率和条件概率。
通过我的新书《机器学习概率》,快速启动您的项目,书中包含所有示例的分步教程和Python 源代码文件。
让我们开始吧。
- 2019年10月更新:修正了一些小拼写错误,感谢 Minel 和 jmy。
- 2019年12月更新:修正了联合概率表描述中的一个拼写错误。

如何培养对联合概率、边缘概率和条件概率的直觉
照片由 Guilhem Vellut 拍摄,保留部分权利。
教程概述
本教程分为三个部分;它们是:
- 联合概率、边缘概率和条件概率
- 掷两个骰子的概率
- 两个城市的天气概率
联合概率、边缘概率和条件概率
当处理单个随机变量时,计算概率相对直接。
当考虑两个或更多随机变量时,情况就变得更有趣了,这在许多现实世界的情况下很常见。
在处理两个(或更多)随机变量时,我们可能感兴趣计算三种主要类型的概率。
简而言之,它们是
- 联合概率。同时发生的事件的概率。
- 边缘概率。不考虑其他变量的情况下,一个事件发生的概率。
- 条件概率。在其他事件发生的情况下,某些事件发生的概率。
这些不同类型概率的含义和计算方式取决于两个随机变量是独立的(更简单)还是相关的(更复杂)。
我们将通过实例来探讨如何计算和解释这三种概率类型。
在下一节中,我们将研究独立投掷两个骰子的情况,在接下来的部分中,我们将研究两个地理位置相近的城市的天气事件的发生情况。
掷两个骰子的概率
探索联合概率和边缘概率的一个很好的起点是考虑独立的随机变量,因为计算非常简单。
掷一个公平的骰子,出现1到6中任何一个数字的概率是六分之一 (1/6) 或 0.166 (16.666%)。
- P(骰子1=1) = 1/6
- P(骰子1=2) = 1/6
- P(骰子1=3) = 1/6
- P(骰子1=4) = 1/6
- P(骰子1=5) = 1/6
- P(骰子1=6) = 1/6
如果我们掷第二个骰子,该骰子上每个值出现的概率是相同的。每个骰子的每个事件都有相等的概率,并且骰子1和骰子2的投掷结果互不影响。
- P(骰子1={1,2,3,4,5,6}) = 1.0
- P(骰子2={1,2,3,4,5,6}) = 1.0
首先,我们可以计算骰子1掷出偶数的概率,即掷出2、4或6的概率之和,例如
- P(骰子1={2, 4, 6}) = P(骰子1=2) + P(骰子1=4) + P(骰子1=6)
- P(骰子1={2, 4, 6}) = 1/6 + 1/6 + 1/6
结果是0.5或50%,正如我们直觉所预期的那样。
现在,我们可能考虑两个骰子同时掷出偶数的联合概率。独立随机变量的联合概率计算如下
- P(A and B) = P(A) * P(B)
这可以计算为骰子1掷出偶数的概率乘以骰子2掷出偶数的概率。第一个事件的概率限制了第二个事件的概率。
- P(骰子1={2, 4, 6} and 骰子2={2, 4, 6}) = P(骰子1={2, 4, 6}) * P(骰子2={2, 4, 6})
我们知道每个骰子掷出偶数的概率是0.5,因此掷出两个偶数的概率是3/6或0.5。代入后,我们得到:0.5 * 0.5 (0.25) 或 25%。
另一种看待这个问题的方式是,掷一个骰子有6种组合。同时掷两个骰子,对于骰子1的每一种组合,骰子2都有6种组合,总共有 (6×6) 36 种组合。骰子1的6种组合中有3种是偶数,而对于这3种情况,骰子2的6种组合中也有3种是偶数。这使得每个骰子都为偶数的情况有 (3×3) 9 种,在总共36种组合中占 (9/36 = 0.25) 25%。
提示:当您处理具有离散事件的独立变量时,如果对概率计算有疑问,可以从组合的角度思考,这样事情就会变得清晰起来。
我们可以根据对领域的了解构建一个联合概率表。下表列出了完整的表格,骰子1在顶部(x轴),骰子2在侧面(y轴)。每个单元格中事件的联合概率是使用联合概率公式计算的,例如 0.166 * 0.166 或 0.027,约 2.777%。
1 2 3 4 5 6 7 |
1 2 3 4 5 6 1 0.027 0.027 0.027 0.027 0.027 0.027 2 0.027 0.027 0.027 0.027 0.027 0.027 3 0.027 0.027 0.027 0.027 0.027 0.027 4 0.027 0.027 0.027 0.027 0.027 0.027 5 0.027 0.027 0.027 0.027 0.027 0.027 6 0.027 0.027 0.027 0.027 0.027 0.027 |
该表捕捉了两个随机变量dice1和dice2事件的联合概率分布。它看起来很单调,但我们可以用它来加深对独立变量的联合概率和边缘概率的理解。
例如,骰子1掷出2且骰子2掷出2的联合概率可以直接从表中读出,为2.777%。我们可以探讨更复杂的情况,比如骰子1掷出2且骰子2掷出奇数。
这可以被解读为将第二列(骰子1掷出2)与第一、三、五行(骰子2掷出奇数)的值相加。
- P(骰子1=2, 骰子2={1,3,5}) = 0.027 + 0.027 + 0.027
结果约为 0.083,或约 8.333%。
我们也可以用这个表来计算边缘概率。边缘概率的计算方法是,将骰子1的整个一列概率或骰子2的整个一行概率相加。
例如,我们可以通过将表格最后一行的概率相加来计算骰子2掷出6的边缘概率。结果约为0.166或16.666%,正如我们直觉所预期的那样。
重要的是,如果我们将表中所有单元格的概率相加,结果必须等于1.0。此外,如果我们将每一行的概率相加,那么这些和的总和也必须等于1.0。同样,如果我们将每一列的概率相加,那么这些和的总和也必须等于1.0。这是联合概率表的一个要求。
因为事件是独立的,所以计算条件概率时不需要特别处理。
- P(A given B) = P(A)
例如,无论骰子2掷出什么,骰子1掷出2的概率都是一样的。
- P(骰子1=2 given 骰子2=6) = P(骰子1=2)
因此,对于独立的随机变量,条件概率没有实际意义。
制作联合概率表是一个有用的工具,可以帮助我们更好地理解如何计算和探索联合概率和边缘概率。
在下一节中,让我们看一个更复杂的例子,涉及相关的随机变量。
想学习机器学习概率吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
两个城市的天气概率
我们可以通过使用两个相关随机变量事件的联合概率表来培养对联合概率和边缘概率的直觉。
假设有两个城市,城市1和城市2。这两个城市距离足够近,通常会受到相同天气的影响,但又足够远,以至于它们的天气不完全相同。
我们可以考虑这些城市在某一天离散的天气分类,如晴天、多云和雨天。当城市1是晴天时,城市2通常也是晴天,但并非总是如此。因此,两个城市的天气之间存在依赖关系。
现在,让我们来探讨不同类型的概率。
数据收集
首先,我们可以记录二十天内每个城市观测到的天气。
例如,第一天每个城市的天气是什么,第二天,以此类推。
1 2 3 4 5 |
天 | 城市1 | 城市2 1 晴天 晴天 2 晴天 多云 3 ... |
为简洁起见,完整的结果表已省略,我们稍后会虚构总数。
然后,我们可以计算观测到的配对事件的总数。
例如,城市1晴天且城市2晴天的总次数,城市1晴天且城市2多云的总次数,以此类推。
1 2 3 4 5 |
城市 1 | 城市 2 | 总计 晴天 晴天 6/20 晴天 多云 1/20 晴天 雨天 0/20 ... |
同样,为了简洁起见,省略了完整的表格,我们稍后会虚构总数。
这些数据为探索两个城市天气事件的概率提供了基础。
联合概率
首先,我们可能对每个城市天气事件的概率感兴趣。
我们可以创建一个包含配对或联合天气事件概率的表格。
下表总结了两个城市每种离散天气的概率,城市1在顶部定义(x轴),城市2在侧面定义(y轴)。
1 2 3 4 |
晴天 | 多云 | 雨天 晴天 6/20 2/20 0/20 多云 1/20 5/20 2/20 雨天 0/20 1/20 3/20 |
表中的一个单元格描述了每个城市中一个事件的联合概率,而表中的所有概率共同总结了两个城市天气事件的联合概率分布。
表中所有单元格的联合概率之和必须等于1.0。
我们可以计算两个城市天气的联合概率。例如,我们预计两个城市同时是晴天的联合概率会很高。这可以正式表述为:
- P(城市1=晴天 and 城市2=晴天)
或更简洁地表示为
- P(晴天, 晴天)
我们可以直接从表格中读出这个值为 6/20 或 0.3,即 30%。这是一个相对较高的概率。
我们可以进一步考虑第一个城市不下雨但第二个城市下雨的概率。我们可以这样表述:
- P(城市1=晴天或多云 and 城市2=雨天)
同样,我们可以直接从表中计算。首先,P(晴天,雨天) 是 0/20,而 P(多云,雨天) 是 1/20。然后我们可以将这些概率相加,得到 1/20 或 0.05,即 5%。这种情况可能发生,但可能性不大。
该表也给出了事件的边缘分布概念。例如,我们可能对城市1是晴天的概率感兴趣,无论城市2发生什么。这可以从表中通过对城市1为晴天的概率求和来读取,例如第一列的概率:
- P(城市1=晴天) = P(城市1=晴天, 城市2=晴天) + P(城市1=晴天, 城市2=多云) + P(城市1=晴天, 城市2=雨天)
或
- P(城市1=晴天) = 6/20 + 1/20 + 0/20
- P(城市1=晴天) = 7/20
因此,城市1晴天的边缘概率是0.35或35%。
我们可以对城市2做同样的操作,通过计算某一行中部分或全部概率的边缘概率。例如,城市2下雨天的概率可以计算为表格底行概率的总和:
- P(城市2=雨天) = 0/20 + 1/20 + 3/20
- P(城市2=雨天) = 4/20
因此,城市2下雨天的边缘概率是0.2或20%。
边缘概率通常很有趣且有用,最好将它们更新到联合概率表中;例如:
1 2 3 4 5 |
晴天 | 多云 | 雨天 | 边缘 晴天 6/20 2/20 0/20 8/20 多云 1/20 5/20 2/20 8/20 雨天 0/20 1/20 3/20 4/20 边缘 7/20 8/20 5/20 20/20 |
条件概率
我们可能对在另一个城市发生天气事件的情况下,某个天气事件发生的概率感兴趣。
这被称为条件概率,可以使用联合概率和边缘概率来计算。
- P(A | B) = P(A and B) / P(B)
例如,我们可能对在城市2是晴天的情况下,城市1是晴天的概率感兴趣。
这可以正式表述为
- P(城市1=晴天 given 城市2=晴天) = P(城市1=晴天 and 城市2=晴天) / P(城市2=晴天)
我们可以从上一节的表格中填入联合概率和边缘概率;例如:
- P(城市1=晴天 given 城市2=晴天) = 6/20 / 8/20
- P(城市1=晴天 given 城市2=晴天) = 0.3 / 0.4
结果是0.75或75%,这很直观。我们期望如果城市2是晴天,那么城市1也应该大部分时间是晴天。
这与在某一天两个城市都晴天的联合概率不同,后者的概率较低,为30%。
如果我们从组合数量的角度来考虑,这就更有意义了。在这种条件情况下,我们有更多的信息,因此我们不必在所有20天中计算概率。具体来说,我们假设城市2是晴天,这将天数从20天急剧减少到8天。在这8天中,有6天城市2是晴天,同时城市1也是晴天,因此比例为6/8或(0.75) 75%。
所有这些都可以从联合概率表中读出。
条件概率中一个经常被误解的重要方面是它不可逆。
- P(A given B) != P(B given A)
也就是说,在城市2是晴天的情况下城市1是晴天的概率,与在城市1是晴天的情况下城市2是晴天的概率是不同的。
- P(城市1=晴天 given 城市2=晴天) != P(城市2=晴天 given 城市1=晴天)
在这种情况下,在城市1是晴天的情况下城市2是晴天的概率计算如下:
- P(城市2=晴天 given 城市1=晴天) = P(城市2=晴天 and 城市1=晴天) / P(城市1=晴天)
- P(城市2=晴天 given 城市1=晴天) = 6/20 / 7/20
- P(城市2=晴天 given 城市1=晴天) = 0.3 / 0.35
- P(城市2=晴天 given 城市1=晴天) = 0.857
在这种情况下,概率更高,约为 85.714%。
我们也可以用条件概率来计算联合概率。
- P(A and B) = P(A given B) * P(B)
例如,如果我们只知道在城市1是晴天的情况下城市2是晴天的条件概率,以及城市2的边缘概率,我们可以这样计算联合概率:
- P(城市1=晴天 and 城市2=晴天) = P(城市2=晴天 given 城市1=晴天) * P(城市1=晴天)
- P(城市1=晴天 and 城市2=晴天) = 0.857 * 0.35
- P(城市1=晴天 and 城市2=晴天) = 0.3
这得出的结果是0.3或30%,正如我们所预期的。
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
书籍
- 《概率:写给热情的初学者》, 2016.
- 模式识别与机器学习, 2006.
- 机器学习:概率视角, 2012.
文章
- 概率,维基百科.
- 概率与统计中的符号,维基百科.
- 独立性(概率论),维基百科.
- 独立同分布随机变量,维基百科.
- 互斥性,维基百科.
- 边缘分布,维基百科.
- 联合概率分布,维基百科.
- 条件概率, 维基百科.
总结
在本教程中,您发现了计算联合概率、边缘概率和条件概率背后的直觉。
具体来说,你学到了:
- 如何为独立随机变量计算联合概率、边缘概率和条件概率。
- 如何从联合随机变量中收集观测数据并构建联合概率表。
- 如何从联合概率表中计算联合概率、边缘概率和条件概率。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
你好,
清晰明了。
一些拼写错误
the rolls of dice1 and diec2 do not affect each other (dice2 ?)
6 combinations of dice1 or (6×6) 32 combinations (36 combinations ?)
谢谢,已修复!
to geographically close cities => two geographically close cities
谢谢,已修复!
你如何计算联合概率表?
你用 "np.multiply.outer(k,m)" 吗?
在本教程中,我是手动计算概率的。
一篇很棒的文章,解释清晰简洁,例子阐明了概念,谢谢。
谢谢你。很高兴你喜欢。