斯坦福-CS109-计算机科学家的概率论-一-
斯坦福 CS109:计算机科学家的概率论(一)
原文:
chrispiech.github.io/probabilityForComputerScientists/en/index.html译者:飞龙
符号参考
原文:
chrispiech.github.io/probabilityForComputerScientists/en/intro/notation/
核心概率
| 符号 | 含义 |
|---|---|
| \(E\) | 大写字母可以表示事件 |
| \(A\) | 有时它们表示集合 |
| $ | E | $ | 事件或集合的大小 |
| \(E^C\) | 事件或集合的补集 |
| \(EF\) | 事件的“与”(也称为交集) |
| $ E \and F$ | 事件的“与”(也称为交集) |
| $ E \cap F$ | 事件的“与”(也称为交集) |
| $ E \lor F$ | 事件的“或”(也称为并集) |
| $ E \cup F$ | 事件的“或”(也称为并集) |
| \(\text{count}(E)\) | \(E\) 发生的次数 |
| \(\p(E)\) | 事件 \(E\) 的概率 |
| \(\p(E\vert F)\) | 在给定 \(F\) 的条件下事件 \(E\) 的条件概率 |
| \(\p(E,F)\) | 事件 \(E\) 和 \(F\) 的概率 |
| \(\p(E\vert F,G)\) | 在给定 \(F\) 和 \(G\) 的条件下事件 \(E\) 的条件概率 |
| \(n!\) | \(n\) 的阶乘 |
| \({n \choose k}\) | 二项式系数 |
| \({n \choose {r_1,r_2,r_3} }\) | 多项式系数 |
随机变量
| 符号 | 含义 |
|---|---|
| \(x\) | 小写字母表示常规变量 |
| \(X\) | 大写字母用于表示随机变量 |
| \(K\) | 大写 \(K\) 保留用于常数 |
| \(\E[X]\) | \(X\) 的期望值 |
| \(\Var(X)\) | \(X\) 的方差 |
| \(\p(X=x)\) | \(X\) 在 \(x\) 处的概率质量函数 (PMF) |
| \(\p(x)\) | \(X\) 在 \(x\) 处的概率质量函数 (PMF) |
| \(f(X=x)\) | \(X\) 在 \(x\) 处的概率密度函数 (PDF) |
| \(f(x)\) | \(X\) 在 \(x\) 处的概率密度函数 (PDF) |
| \(f(X=x,Y=y)\) | 联合概率密度 |
| \(f(X=x\vert Y=y)\) | 条件概率密度 |
| \(F_X(x)\) 或 \(F(x)\) | \(X\) 的累积分布函数 (CDF) |
| IID | 独立同分布 (Independent and Identically Distributed) |
参数分布
| 符号 | 含义 |
|---|---|
| \(X \sim \Ber(p)\) | \(X\) 是一个 Bernoulli 分布的随机变量 |
| \(X \sim \Bin(n,p)\) | \(X\) 是一个 Binomial 分布的随机变量 |
| \(X \sim \Poi(p)\) | \(X\) 是一个 Poisson 分布的随机变量 |
| \(X \sim \Geo(p)\) | \(X\) 是一个 Geometric 分布的随机变量 |
| \(X \sim \NegBin(r, p)\) | \(X\) 是一个 Negative Binomial 分布的随机变量 |
| \(X \sim \Uni(a,b)\) | \(X\) 是一个 Uniform 分布的随机变量 |
| \(X \sim \Exp(\lambda)\) | \(X\) 是一个 Exponential 分布的随机变量 |
| \(X \sim \Beta(a,b)\) | \(X\) 是一个 Beta 分布的随机变量 |
核心概率参考
原文:
chrispiech.github.io/probabilityForComputerScientists/en/intro/core_probability_ref/
定义:概率的经验定义
任何事件 \(E\) 的概率可以这样定义:
其中 \(\text{count}(E)\) 是 \(E\) 在 \(n\) 次实验中发生的次数。
定义: 核心恒等式
对于事件 \(E\) 和样本空间 \(S\)
| \(0 ≤ \p(E) ≤ 1\) | 所有概率都是介于 0 和 1 之间的数字。 |
|---|---|
| \(\p(S) = 1\) | 所有结果必须来自样本空间。 |
| \(\P(E) = 1 - \P(E^\c)\) | 从事件的补集中计算事件发生的概率。 |
定义:等可能结果的概率
如果 \(S\) 是一个具有等可能结果的样本空间,对于 \(S\) 中结果的一个子集事件 \(E\):$$ \begin{align} \p(E) &= \frac{\text{在 \(E\) 中的结果数量}}{\text{在 \(S\) 中的结果数量}} = \frac{|E|}{|S|} \end{align} $$定义:条件概率。
在事件 \(F\) 已经发生的情况下(即条件为)事件 \(E\) 的概率:$$ \p(E |F) = \frac{\p(E \and F)}{\p(F)} $$
定义:相互独立事件的或的概率
如果两个事件 \(E\) 和 \(F\) 是互斥的,那么 \(E\) 或 \(F\) 发生的概率是:$$ \p(E \or F) = \p(E) + \p(F) $$
对于 \(n\) 个事件 \(E_1, E_2, \dots E_n\),其中每个事件都是相互独立的(换句话说,没有结果在多个事件中)。那么:$$ \p(E_1 \or E_2 \or \dots \or E_n) = \p(E_1) + \p(E_2) + \dots + \p(E_n) = \sum_{i=1}^n \p(E_i) $$
定义:或的通用概率(包含-排除法则)
对于任意两个事件 \(E\) 和 \(F\):$$ \p(E \or F) = \p(E) + \p(F) − \p(E \and F) $$
对于三个事件,\(E\)、\(F\) 和 \(G\),公式如下:$$ \begin{align} \p(E \or F \or G) =& \text{ }\p(E) + \p(F) + \p(G) \ & −\p(E \and F) − \p(E \and G)−\p(F \and G) \ & +\p(E \and F \and G) \end{align} $$
对于超过三个事件,请参阅概率或章节。定义:独立事件的和的概率。
如果两个事件:\(E\)、\(F\) 是独立的,那么 \(E\) 和 \(F\) 同时发生的概率是:$$ \p(E \and F) = \p(E) \cdot \p(F) $$
对于 \(n\) 个相互独立的事件 \(E_1, E_2, \dots E_n\):$$ \p(E_1 \and E_2 \and \dots \and E_n) = \prod_{i=1}^n \p(E_i) $$
定义:和的通用概率(链式法则)
对于任意两个事件 \(E\) 和 \(F\):$$ \p(E \and F) = \p(E | F) \cdot \p(F) $$
对于 \(n\) 个事件 \(E_1, E_2, \dots E_n\):$$ \begin{align} \p(E_1 \and E_2 \and \dots \and E_n) = &\p(E_1) \cdot \p(E_2|E_1) \cdot \p(E_3 |E_1 \and E_2) \dots \ &\p(E_n|E_1 \dots E_{n−1}) \end{align} $$
定义:全概率公式
对于任意两个事件 \(E\) 和 \(F\):$$ \begin{align} \p(E) &= \p(E \and F) + \p(E \and F\c)\ &=\p(E | F) \p(F) + \p(E | F\c) \p(F\c) \end{align} $$
对于互斥事件:\(B_1, B_2, \dots B_n\),其中样本空间中的每个结果都落在这些事件之一中:$$ \begin{align} \p(E) &= \sum_{i=1}^n \p(E \and B_i) && \text{扩展我们的观察}\ &= \sum_{i=1}^n \p(E | B_i) \p(B_i) && \text{对每个项使用链式法则} \end{align} $$
定义:贝叶斯定理
贝叶斯定理最常见的形式是贝叶斯定理经典版:$$ \p(B|E) = \frac{\p(E | B) \cdot \p(B)}{\p(E)} $$
贝叶斯定理与全概率定律相结合:$$ \p(B|E) = \frac{\p(E | B) \cdot \p(B)}{\p(E|B)\cdot \p(B) + \p(E|B\c) \cdot \p(B\c)} $$
随机变量参考
原文:
chrispiech.github.io/probabilityForComputerScientists/en/intro/all_distributions/
离散随机变量
伯努利随机变量
| 符号: | \(X \sim \Ber(p)\) |
|---|---|
| 描述: | 一个布尔变量,以概率 \(p\) 为 1 |
| 参数: | \(p\),\(X=1\) 的概率。 |
| 支持集: | \(x\) 要么是 0,要么是 1 |
| PMF 方程: | \(\p(X=x) = \begin{cases} p && \text{if }x = 1\\ 1-p && \text{if }x = 0 \end{cases}\) |
| PMF (平滑): | \(\p(X=x) = p^x(1-p)^{1-x}\) |
| 期望: | \(\E[X] = p\) |
| 方差: | \(\var(X) = p (1-p)\) |
| PMF 图: |
参数 \(p\):
二项式随机变量
| 符号: | \(X \sim \Bin(n, p)\) |
|---|---|
| 描述: | 在 \(n\) 个相同、独立的实验中成功的次数,每个实验成功的概率为 \(p\)。 |
| 参数: | \(n \in \{0, 1, \dots\}\),实验次数。\(p \in [0, 1]\),单个实验成功的概率。 |
| 支持集: | \(x \in \{0, 1, \dots, n\}\) |
| PMF 方程: | $$\p(X=x) = {n \choose x}px(1-p)$$ |
| 期望: | \(\E[X] = n \cdot p\) |
| 方差: | \(\var(X) = n \cdot p \cdot (1-p)\) |
| PMF 图: |
参数 \(n\): 参数 \(p\):
泊松随机变量
| 符号: | \(X \sim \Poi(\lambda)\) |
|---|---|
| 描述: | 在固定时间段内发生的事件数量,如果 (a) 事件以恒定的平均速率发生,并且 (b) 事件的发生与上次事件的时间无关。 |
| 参数: | \(\lambda \in \mathbb{R}^{+}\),恒定的平均速率。 |
| 支持集: | \(x \in \{0, 1, \dots\}\) |
| PMF 方程: | $$\p(X=x) = \frac{\lambdaxe{-\lambda}}{x!}$$ |
| 期望: | \(\E[X] = \lambda\) |
| 方差: | \(\var(X) = \lambda\) |
| PMF 图: |
参数 \(\lambda\):
几何随机变量
| 符号: | \(X \sim \Geo(p)\) |
|---|---|
| 描述: | 达到成功所需的实验次数。假设每个实验是独立的,成功的概率为 \(p\)。 |
| 参数: | \(p \in [0, 1]\), 单个实验成功的概率。 |
| 支持集: | \(x \in \{1, \dots, \infty\}\) |
| PMF 方程: | $$\p(X=x) = (1-p)^{x-1} p$$ |
| 期望: | \(\E[X] = \frac{1}{p}\) |
| 方差: | \(\var(X) = \frac{1-p}{p²}\) |
| PMF 图: |
参数 \(p\):
负二项式随机变量
| 符号: | \(X \sim \NegBin(r, p)\) |
|---|---|
| 描述: | 达到 \(r\) 次成功所需的实验次数。假设每个实验是独立的,成功的概率为 \(p\)。 |
| 参数: | \(r > 0\),我们等待的成功次数。\(p \in [0, 1]\),单个实验成功的概率。 |
| 支持集: | \(x \in \{r, \dots, \infty\}\) |
| PMF 方程: | $$\p(X=x) = {x - 1 \choose r - 1}pr(1-p)$$ |
| 期望: | \(\E[X] = \frac{r}{p}\) |
| 方差: | \(\var(X) = \frac{r \cdot (1-p)}{p²}\) |
| PMF 图: |
参数 \(r\):参数 \(p\):
连续随机变量
均匀随机变量
| 符号: | \(X \sim \Uni(\alpha, \beta)\) |
|---|---|
| 描述: | 一个连续随机变量,其值在 \(\alpha\) 和 \(\beta\) 之间以相同的可能性取值。 |
| 参数: | \(\alpha \in \R\),变量的最小值。\(\beta \in \R\),\(\beta > \alpha\),变量的最大值。 |
| 支持集: | \(x \in [\alpha, \beta]\) |
| PDF 方程: | $$f(x) = \begin{cases} \frac{1}{\beta - \alpha} && \text{for }x \in [\alpha, \beta]\ 0 && \text{else} \end{cases}$$ |
| CDF 方程: | $$F(x) = \begin{cases} \frac{x - \alpha}{\beta - \alpha} && \text{for }x \in [\alpha, \beta]\ 0 && \text{for } x < \alpha \ 1 && \text{for } x > \beta \end{cases}$$ |
| 期望: | \(\E[X] = \frac{1}{2}(\alpha + \beta)\) |
| 方差: | \(\var(X) = \frac{1}{12}(\beta - \alpha)²\) |
| PDF 图: |
参数 \(\alpha\):参数 \(\beta\):
指数随机变量
| 符号: | \(X \sim \Exp(\lambda)\) |
|---|---|
| 描述: | 如果(a)事件以恒定的平均速率发生,并且(b)它们的发生与自上次事件以来经过的时间无关,则直到下一次事件的时间。 |
| 参数: | \(\lambda \in \mathbb{R}^{+}\),恒定的平均速率。 |
| 支持集: | \(x \in \mathbb{R}^+\) |
| PDF 方程: | $$f(x) = \lambda e^{-\lambda x}$$ |
| CDF 方程: | $$F(x) = 1 - e^{-\lambda x}$$ |
| 期望: | \(\E[X] = 1/\lambda\) |
| 方差: | \(\var(X) = 1/\lambda²\) |
| PDF 图: |
参数 \(\lambda\):
正态(又称高斯)随机变量
| 符号: | \(X \sim \N(\mu, \sigma²)\) |
|---|---|
| 描述: | 一种常见且自然发生的分布。 |
| 参数:| \(\mu \in \mathbb{R}\),均值。\(\sigma² \in \mathbb{R}\),方差。|
|
| 支持集: | \(x \in \mathbb{R}\) |
|---|---|
| PDF 方程: | $$f(x) = \frac{1}{\sigma \sqrt{2 \pi}} e^{-\frac{1}{2}\Big(\frac{x-\mu}{\sigma}\Big)²}$$ |
| CDF 方程: | $$\begin{align} F(x) &= \phi(\frac{x-\mu}{\sigma}) && \text{Where \(\phi\) is the CDF of the standard normal} \end{align}$$ |
| 期望: | \(\E[X] = \mu\) |
| 方差: | \(\var(X) = \sigma²\) |
| PDF 图: |
参数 \(\mu\):参数 \(\sigma\):
贝塔随机变量
| 符号: | \(X \sim \Beta(a, b)\) |
|---|---|
| 描述: | 在观察到 \(a-1\) 次成功和 \(b- 1\) 次失败后,从二项分布中得到的概率 \(p\) 的信念分布。 |
| 参数: | \(a > 0\),成功次数 + 1 \(b > 0\),失败次数 + 1 |
| 支持集: | \(x \in [0, 1]\) |
| PDF 方程: | \(f(x) = B(a,b) \cdot x^{a-1} \cdot (1-x)^{b-1}\) 其中 \(B(a,b) = \frac{\Gamma(a)\Gamma(b)}{\Gamma(a,b)}\) |
| CDF 方程: | 没有封闭形式 |
| 期望: | \(\E[X] = \frac{a}{a+b}\) |
| 方差: | \(\var(X) = \frac{ab}{(a+b)²(a+b+1)}\) |
| PDF 图: |
参数 \(a\):参数 \(b\):
Python 参考
chrispiech.github.io/probabilityForComputerScientists/en/intro/python/
阶乘
将 \(n!\) 计算为整数。此示例计算 \(20!\):
import math
print(math.factorial(20))
选择
截至 Python 3.8,你可以从 math 模块中计算 \(n \choose m\)。此示例计算 \(10 \choose 5\):
import math
print(math.comb(10, 5))
自然指数
计算 \(e^x\)。例如,这计算 \(e³\)
import math
print(math.exp(3))
SciPy 统计库
SciPy 是一个基于 NumPy 的免费和开源的科学计算库。你可能发现使用 SciPy 来检查你在问题集的书面部分中获得的答案很有帮助。NumPy 有从许多常见分布中抽取样本的能力(在 python 解释器中输入 help(np.random)),但 SciPy 还具有计算观察事件概率的附加功能,并且可以直接在概率质量/密度函数上执行计算。
二项分布
创建一个二项分布随机变量 \(X\) 并计算其概率质量函数(PMF)或累积密度函数(CDF)。我们非常喜欢 scipy 统计库,因为它定义了所有你可能会关心的随机变量函数,包括期望、方差,甚至我们在 CS109 中没有讨论过的,如熵。此示例声明 \(X \sim \text{Bin}(n = 10, p = 0.2)\)。然后计算 \(X\) 的一些统计量。然后计算 \(P(X = 3)\) 和 \(P(X \leq 4)\)。最后,它从 \(X\) 中生成一些随机样本:
from scipy import stats
X = stats.binom(10, 0.2) # Declare X to be a binomial random variable
print(X.pmf(3)) # P(X = 3)
print(X.cdf(4)) # P(X <= 4)
print(X.mean()) # E[X]
print(X.var()) # Var(X)
print(X.std()) # Std(X)
print(X.rvs()) # Get a random sample from X
print(X.rvs(10)) # Get 10 random samples form X
从一个终端,你总是可以使用“help”命令来查看一个变量(或包)上定义的所有方法的完整列表:
from scipy import stats
X = stats.binom(10, 0.2) # Declare X to be a binomial random variable
help(X) # List all methods defined for X
泊松分布
创建一个泊松随机变量 \(Y\)。此示例声明 \(Y \sim \text{Poi}(\lambda = 2)\)。然后计算 \(P(Y = 3)\):
from scipy import stats
Y = stats.poisson(2) # Declare Y to be a poisson random variable
print(Y.pmf(3)) # P(Y = 3)
print(Y.rvs()) # Get a random sample from Y
几何分布
创建一个几何随机变量 \(X\),表示成功所需的试验次数。此示例声明 \(X \sim \text{Geo}(p = 0.75)\):
from scipy import stats
X = stats.geom(0.75) # Declare X to be a geometric random variable
print(X.pmf(3)) # P(X = 3)
print(X.rvs()) # Get a random sample from Y
正态分布
创建一个正态分布随机变量 \(A\)。此示例声明 \(A \sim N(\mu = 3, \sigma² = 16)\)。然后计算 \(f_Y(0)\) 和 \(F_Y(0)\)。非常重要!!! 在课堂上,正态分布的第二个参数是方差(\(\sigma²\))。在 scipy 库中,第二个参数是标准差(\(\sigma\)):
import math
from scipy import stats
A = stats.norm(3, math.sqrt(16)) # Declare A to be a normal random variable
print(A.pdf(4)) # f(3), the probability density at 3
print(A.cdf(2)) # F(2), which is also P(Y < 2)
print(A.rvs()) # Get a random sample from A
指数分布
创建一个指数随机变量 \(B\)。此示例声明 \(B \sim \text{Exp}(\lambda = 4)\):
from scipy import stats
# `λ` is a common parameterization for the exponential,
# but `scipy` uses `scale` which is `1/λ`
B = stats.expon(scale=1/4)
print(B.pdf(1)) # f(1), the probability density at 1
print(B.cdf(2)) # F(2) which is also P(B < 2)
print(B.rvs()) # Get a random sample from B
Beta 分布
创建一个 Beta 随机变量 \(X\)。此示例声明 \(X \sim \text{Beta}(\alpha = 1, \beta = 3)\):
from scipy import stats
X = stats.beta(1, 3) # Declare X to be a beta random variable
print(X.pdf(0.5)) # f(0.5), the probability density at 1
print(X.cdf(0.7)) # F(0.7) which is also P(X < 0.7)
print(X.rvs()) # Get a random sample from X
计算器
原文:
chrispiech.github.io/probabilityForComputerScientists/en/intro/calculators/
阶乘计算器 \({n!}\)
| n |
|---|
组合计算器 \({n \choose k}\)
| n | |
|---|---|
| k |
Phi 计算器, \(\Phi(x)\)
| x |
|---|
逆 Phi 计算器, \(\Phi^{-1}(y)\)
| y |
|---|
正态分布函数计算器
| x | |
|---|---|
| mu | |
| std |
Beta 累积分布函数计算器
| x | |
|---|---|
| a | |
| b |
第一部分:核心概率
计数
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part1/counting/
虽然你可能认为你在三岁时已经很好地掌握了计数的概念,但事实是你必须等到现在才能学会真正计数。你现在上这门课是不是很高兴?!但说真的,计数就像房子的基础(房子是我们将在本书后面做的所有伟大事情,比如机器学习)。房子很棒。另一方面,基础基本上只是洞里的混凝土。但不要没有基础就建房子。那样不会好。
步骤计数
定义:计数步骤规则(又称乘法计数规则)
如果一个实验有两个部分,第一部分可以产生 \(m\) 种结果之一,而第二部分无论第一部分的结果如何都可以产生 \(n\) 种结果之一,那么实验的总结果数是 \(m \cdot n\)。
使用集合符号重写,计数步骤规则表明,如果一个有两个部分的实验在第一部分有来自集合 \(A\) 的结果,其中 \(|A| = m\),在第二部分有来自集合 \(B\) 的结果(无论第一部分的结果如何,\(B\) 中的结果数量都是相同的),其中 \(|B| = n\),那么实验的总结果数是 $|A||B| = m \cdot n $。
简单示例:考虑一个有 100 个桶的哈希表。两个任意字符串独立地散列并添加到表中。字符串存储在表中的可能方式有多少种?每个字符串可以被散列到 100 个桶中的任何一个。由于第一个字符串散列的结果不会影响第二个字符串的散列,因此两个字符串存储在哈希表中的方式有 100 * 100 = 10,000 种。
彼得·诺维格,《人工智能》这一经典教科书的作者,提出了以下令人信服的观点,说明了为什么计算机科学家需要知道如何计数。首先,让我们为一个大数设定一个基准:可观测宇宙中原子的数量,通常估计为 \(10^{80}\)。宇宙中肯定有很多原子。正如一位领先专家所说,
“空间很大。真的很大。你简直无法相信它有多么广大,多么令人难以置信的大。我的意思是,你可能认为化学家在路上的距离很远,但与空间相比,那只是小菜一碟。” - 道格拉斯·亚当斯
这个数字经常被用来展示计算机永远无法解决的问题。问题可以迅速增长到荒谬的大小,我们可以通过使用计数步骤规则来理解这一点。
有一个艺术项目旨在展示所有可能的图片。这肯定需要很长时间,因为必须有很多可能的图片。但有多少呢?我们将假设一个名为真彩色的颜色模型,其中每个像素可以是 \(2^{24}\) ≈ 1700 万种不同颜色中的一种。
你可以从以下哪些中生成多少不同的图片:(a) 1200 万像素的手机相机,(b) 300 像素的网格,和(c) 只有 12 像素的网格?

答案:我们可以使用计数步骤规则。图像可以逐个像素、逐步创建。每次选择一个像素时,你可以在 1700 万种颜色中选择其颜色。一个包含 \(n\) 个像素的数组可以产生 \((17 million)^n\) 种不同的图片。\((17 million)^{12}\) ≈ \(10^{86}\),所以这个 12 像素的小网格产生的图片数量比宇宙中原子数量多一百万倍!那么 300 像素的网格呢?它可以产生 \(10^{2167}\) 张图片。你可能认为宇宙中原子的数量很大,但与 300 像素网格中的图片数量相比,那只是小菜一碟。12M 像素呢?\(10^{86696638}\) 张图片。
示例:围棋的独特状态
例如,围棋棋盘有 19×19 个点,用户可以在这些点上放置棋子。每个点可以是空的,或者被黑子或白子占据。通过计数步骤规则,我们可以计算出独特的棋盘配置数量。

在围棋中,有 19×19 个点。每个点可以放置黑子、白子,或者完全不放子。
在这里,我们将一步一步地构建棋盘,每次添加一个点,我们都有一个独特的选择,可以决定将该点设置为三种选项之一:{黑子,白子,无子}。使用这种构建方法,我们可以应用计数步骤规则。如果只有一个点,就会有三种独特的棋盘配置。如果有四个点,你会有 \(3 \cdot 3 \cdot 3 \cdot 3 = 81\) 种独特的组合。在围棋中,有 \(3^{(19×19)} ≈ 10^{172}\) 种可能的棋盘位置。我们构建棋盘的方式没有考虑到哪些是违反围棋规则的非法位置。结果是,“只有”大约 \(10^{170}\) 个位置是合法的。这大约是宇宙中原子数量的平方。换句话说:如果每个原子都有一个原子组成的另一个宇宙,那么宇宙中的原子数量才会和围棋棋盘的独特配置数量一样多。
作为一名计算机科学家,这类结果可能非常重要。虽然计算机很强大,但需要存储棋盘每种配置的算法并不是一个合理的方案。没有计算机能存储比宇宙中原子数量平方还多的信息!
上述论点可能会让你觉得一些问题由于计数法则的乘积规则而变得极其困难。让我们花一点时间来谈谈计数法则的乘积规则是如何帮助我们的!大多数对数时间算法都利用了这个原则。
想象一下,你正在构建一个需要从数据中学习的机器学习系统,并且你想要为它合成生成一千万个独特的数据点。你需要编码多少步才能达到一千万?假设在每一步你都有一个二选一的选择,根据计数法则的步数规则,你产生的独特数据点的数量将是 \(2^n\)。如果我们选择 \(n\) 使得 \(\log_{2} 10,000,000 < n\)。你只需要编码 \(n=24\) 个二进制决策。
示例:掷两个骰子。两个六面的骰子,面数为 1 到 6,被掷出。掷骰子的可能结果有多少种?
解答:注意,我们并不关心两个骰子的总数值(“die”是“dice”的单数形式),而是关心所有掷骰子的明确结果集合。由于第一个骰子可以出现 6 种可能值,第二个骰子也有 6 种可能值(无论第一个骰子出现了什么),所以潜在的结果总数是 36(= 6 × 6)。这些可能的结果明确地列在下面,作为一系列的配对,表示这对骰子掷出的数值:
使用 或 进行计数
如果你想要考虑所有独特结果的总数,当结果可以来自源 \(A\) 或源 \(B\) 时,你使用的方程取决于是否有一些结果同时存在于 \(A\) 和 \(B\) 中。如果没有,你可以使用更简单的“互斥计数”规则。否则,你需要使用稍微复杂一些的包含排除规则。
定义:互斥计数
如果一个实验的结果可以来自集合 \(A\) 或集合 \(B\),其中集合 \(A\) 中的任何结果都不与集合 \(B\) 中的任何结果相同(称为互斥),那么实验的可能结果有 \(|A \or B| = |A|+|B|\) 种。
示例:路线总和。一个路线查找算法需要找到从内罗毕到达累斯萨拉姆的路线。它找到了通过乞力马扎罗山或蒙巴萨的路线。有 20 条通过乞力马扎罗山的路线,15 条通过蒙巴萨的路线,以及 0 条同时通过乞力马扎罗山和蒙巴萨的路线。总共有多少条路线?
解答:路线可以来自乞力马扎罗山 或 蒙巴萨。这两组路线是互斥的,因为两组中都没有共同的路线。因此,路线的总数是加法:20 + 15 = 35。
如果你能够证明两个组是互斥的,计数就变得简单了,只需要进行加法。当然,并不是所有的集合都是互斥的。在上面的例子中,假设有一条路线穿过乞力马扎罗山和蒙巴萨。我们会重复计算这条路线,因为它会被包含在这两个集合中。如果集合不是互斥的,计数“或”仍然是加法,我们只需要考虑任何重复计数。
定义:包含-排除计数
如果实验的结果可以来自集合 \(A\) 或集合 \(B\),并且集合 \(A\) 和 \(B\) 可能重叠(即 \(A\) 和 \(B\) 不是互斥的),那么实验的结果数量是 \(|A \or B| = |A|+|B| −|A \and B|\)。
注意,包含-排除原理推广了任意集合 \(A\) 和 \(B\) 的计数求和规则。在 \(A \and B = ∅\) 的情况下,包含-排除原理给出了与计数求和规则相同的结果,因为 \(|A \and B| = 0\)。
示例:一个 8 位字符串(一个字节)通过网络发送。接收者识别的有效字符串集合必须以 "01" 开头或以 "10" 结尾。有多少这样的字符串?
解答:符合接收者标准的潜在位串可以是以 "01" 开头的 64 个字符串(因为最后 6 位是未指定的,允许有 \(2⁶ = 64\) 种可能性)或者以 "10" 结尾的 64 个字符串(因为前 6 位是未指定的)。当然,这两个集合是重叠的,因为以 "01" 开头并以 "10" 结尾的字符串同时存在于这两个集合中。有 \(2⁴\) = 16 个这样的字符串(因为中间的 4 位可以是任意的)。将这个描述转换为相应的集合表示法,我们有:\(|A|\) = 64,\(|B|\) = 64,\(|A \and B|\) = 16,所以根据包含-排除原理,有 64 + 64 − 16 = 112 个字符串符合指定的接收者标准。
过度计数和纠正
计数的一个策略有时是先对解决方案进行过度计数,然后纠正任何重复的计数。这在更容易在放宽的假设下生成所有结果,或者有人引入约束时尤其常见。如果你能论证你过度计数的每个元素都是相同多次数,你可以简单地通过除法来纠正。如果你能精确地计算出有多少元素被过度计数,你可以通过减法来纠正。
作为证明这个观点的简单例子,让我们重新审视生成所有图像的问题,但这次我们只有 4 个像素(2x2),每个像素只能是蓝色或白色。有多少种独特的图像?生成任何图像是一个四步过程,你一次选择一个像素。由于每个像素有两个选择,所以有 \(2⁴ = 16\) 种独特的图像(它们并不完全是毕加索的作品——但嘿,这是 4 个像素):
现在假设我们增加一个新的“约束”条件,即我们只想接受那些蓝色像素数量为奇数的图片。有两种方法可以得到答案。你可以从最初的 16 张图片开始,计算出你需要减去 8 张图片,这些图片要么有 0 个、2 个或 4 个蓝色像素(这在下一章之后更容易计算)。或者你可以使用互斥计数法进行计数:有 4 种方法可以制作出只有 1 个蓝色像素的图片,有 4 种方法可以制作出有 3 个蓝色像素的图片。两种方法都会得到相同的答案,即 8。
接下来,让我们添加一个更难的约束条件:镜像不可区分性。如果你可以水平翻转任何图片以创建另一个,它们就不再被认为是独特的。例如,这两张图片都出现在我们的 8 张奇数蓝色像素图片集中,但现在它们被认为是相同的(在水平翻转后它们是不可区分的):
考虑到镜像不可区分性,有多少图片的蓝色像素数量为奇数?答案是,对于每个具有奇数蓝色像素的独特图片,在这个新的约束条件下,你已经将其计算了两次:本身和它的水平翻转。为了让你确信每个图片都被精确地计算了两次,你可以查看包含 8 张具有奇数蓝色像素的图片集中的所有示例。每个图片旁边都有一个在水平翻转后不可区分的图片。由于每个图片在 8 张图片集中都被精确地计算了两次,我们可以除以 2 来得到更新后的计数。如果我们列出它们,我们可以确认在最后一个约束条件之后,剩下 8/2=4 张图片。
将任何数学(包括计数)应用于新颖的情境,可以像是一门艺术,也可以是一门科学。在下一章中,我们将通过逐步计数和“或”计数的基本第一原理构建一个有用的工具集。
组合数学
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part1/combinatorics/
计数问题可以从第一部分描述的基本构建块中解决:计数。然而,一些计数问题在概率世界的普遍性如此之高,以至于了解一些高级计数抽象是有价值的。在解决问题时,如果你能从这些典型例子中找到类比,你就可以利用相应的组合公式:
-
区分对象的排列
-
不区分对象的排列
-
区分对象的组合
-
区分对象的分组
-
不区分对象的分组
-
固定大小容器中的分组
虽然这些绝对不是唯一的常见计数范例,但这是一个有用的集合。
不区分对象的排列
定义:排列规则
排列是 n 个区分开对象的有序排列。这些\(n\)个对象可以以\(n \cdot (n – 1) \cdot (n – 2) \cdots 2 \cdot 1 = n!\)种方式排列。
如果你是在排列一组区分开的对象的子集,或者其中一些对象是不区分的,那么情况会有所不同。我们很快就会处理这些情况!注意,唯一与区分是同义词。
示例:字符串 "BAYES" 有多少种独特的字符排列顺序?解答:由于字符的顺序很重要,我们正在考虑 5 个区分开字符 B、A、Y、E 和 S 的所有排列:\(5! = 120\)。以下是完整的列表:
BAYES, BAYSE, BAEYS, BAESY, BASYE, BASEY, BYAES, BYASE, BYEAS, BYESA, BYSAE, BYSEA, BEAYS, BEASY, BEYAS, BEYSA, BESAY, BESYA, BSAYE, BSAEY, BSYAE, BSYEA, BSEAY, BSEYA, ABYES, ABYSE, ABEYS, ABESY, ABSYE, ABSEY, AYBES, AYBSE, AYEBS, AYESB, AYSBE, AYSEB, AEBYS, AEBSY, AEYBS, AEYSB, AESBY, AESYB, ASBYE, ASBEY, ASYBE, ASYEB, ASEBY, ASEYB, YBAES, YBASE, YBEAS, YBESA, YBSAE, YBSEA, YABES, YABSE, YAEBS, YAESB, YASBE, YASEB, YEBAS, YEBSA, YEABS, YEASB, YESBA, YESAB, YSBAE, YSBEA, YSABE, YSAEB, YSEBA, YSEAB, EBAYS, EBASY, EBYAS, EBYSA, EBSAY, EBSYA, EABYS, EABSY, EAYBS, EAYSB, EASBY, EASYB, EYBAS, EYBSA, EYABS, EYASB, EYSBA, EYSAB, ESBAY, ESBYA, ESABY, ESAYB, ESYBA, ESYAB, SBAYE, SBAEY, SBYAE, SBYEA, SBEAY, SBEYA, SABYE, SABEY, SAYBE, SAYEB, SAEBY, SAEYB, SYBAE, SYBEA, SYABE, SYAEB, SYEBA, SYEAB, SEBAY, SEBYA, SEABY, SEAYB, SEYBA, SEYAB
示例:一部智能手机有一个 4 位数的密码。假设屏幕上有 4 个数字上的污渍。可能有多少种不同的密码?
解答:由于密码中数字的顺序很重要,我们应该使用排列。而且由于我们知道有四个污渍,所以密码中的每个数字都是区分开的。因此,我们可以代入排列公式:4! = 24。
不区分对象的排列
定义: 不可区分对象的排列
通常当有 \(n\) 个对象时:
如果 \(n_1\) 是相同的(不可区分的),那么:
\(n_2\) 是相同的,
...
如果 \(n_r\) 是相同的,那么不同排列的数量是:
B 部分: 如果屏幕上有 2 个数字的污渍呢?
解答: 有两种可能性:两个数字各使用两次,或者一个数字使用三次,另一个数字使用一次。$$ \frac{4!}{2!\cdot 2!} + 2 \cdot \frac{4!}{3!\cdot 1!} = 6 + (2 \cdot 4) = 6 + 8 = 14 $$
你可以使用计算机的力量来枚举所有排列。以下是一个使用内置的 itertools 库的 Python 代码示例:
>>> import itertools
# get all 4! = 24 permutations of 1,2,3,4 as a list:
>>> list(itertools.permutations([1,2,3,4]))
[(1, 2, 3, 4), (1, 2, 4, 3), (1, 3, 2, 4), (1, 3, 4, 2), (1, 4, 2, 3), (1, 4, 3, 2), (2, 1, 3, 4), (2, 1, 4, 3), (2, 3, 1, 4), (2, 3, 4, 1), (2, 4, 1, 3), (2, 4, 3, 1), (3, 1, 2, 4), (3, 1, 4, 2), (3, 2, 1, 4), (3, 2, 4, 1), (3, 4, 1, 2), (3, 4, 2, 1), (4, 1, 2, 3), (4, 1, 3, 2), (4, 2, 1, 3), (4, 2, 3, 1), (4, 3, 1, 2), (4, 3, 2, 1)]
# get all 3!/2! = 3 unique permutations of 1,1,2 as a set:
>>> set(itertools.permutations([1,1,2]))
{(1, 2, 1), (2, 1, 1), (1, 1, 2)}
独特对象的组合
定义: 组合
组合是从 n 个对象中选择 r 个对象的非有序选择。如果所有对象都是独特的,并且一旦选择就不会“替换”,那么进行选择的方式数是:
这里是所有从 5 个独特的数字列表中选择 3 个项目的 10 种方式:\({5 \choose 3}\):
# Get all ways of choosing three numbers from [1,2,3,4,5]
>>> list(itertools.combinations([1,2,3,4,5], 3))
[(1, 2, 3), (1, 2, 4), (1, 2, 5), (1, 3, 4), (1, 3, 5), (1, 4, 5), (2, 3, 4), (2, 3, 5), (2, 4, 5), (3, 4, 5)]
注意顺序并不重要。由于(1, 2, 3)在组合集中,所以我们不会包括(3, 2, 1)作为相同的选取,因为这被认为是相同的选择。注意,如果有些对象彼此之间没有区别,这个公式就不适用。
我们是如何得到公式\(\frac{n!}{r!(n-r)!}\)的?考虑从一组 n 个对象中选择 r 个无序对象的一般方法,例如,“7 选 3”:
-
首先考虑所有 n 个对象的排列。有\(n!\)种方式来做这件事。
-
然后选择排列中的前 r 个。有一种方式来做这件事。
-
注意,选择的 r 个对象的顺序无关紧要。有\(r!\)种方式来排列它们。选择保持不变。
-
注意,未选择的对象的顺序无关紧要。有\((n − r)!\)种方式来排列它们。选择保持不变。
你有 \(n\) 个步骤(放置每个项目),对于每个项目,你有 \(r\) 种选择
问题:比如说你想要将 10 个可区分的球放入 5 个瓮中(不!等等!别这么说!不是瓮!)。好吧,好吧。没有瓮。比如说我们要将 10 个不同的字符串放入哈希表的 5 个桶中。有多少种可能的方法可以这样做?
解决方案:你可以将其视为 10 个独立的实验,每个实验有 5 种结果。使用我们针对不同项目的分类规则,这将得出 \(5^{10}\)。
使用不可区分对象的分类
虽然前面的例子允许我们将 \(n\) 个可区分的对象放入 \(r\) 个不同的组中,但更有趣的问题是处理 \(n\) 个不可区分的对象。
除法法:
假设你想要将 \(n\) 个不可区分的项目放入 \(r\) 个容器中。除法法通过想象你将通过排序两种类型的对象来解决此问题,你的 \(n\) 个原始元素和 \((r - 1)\) 个分隔符。因此,你正在排列 \(n + r - 1\) 个对象,其中 \(n\) 个是相同的(你的元素)和 \(r - 1\) 个是相同的(分隔符)。因此,总的结果数是:
除法法可以通过“星号和竖线”法推导出来。这是一个创造性的构造,其中我们考虑不可区分项目的排列,用星号 * 表示,以及容器之间的分隔符,用竖线 | 表示。这些星号和竖线的任何不同的排列都代表我们对项目到容器分配的独特分配。
假设我们想要将 5 个不可区分的对象分成 3 个容器。我们可以将问题视为寻找排列 5 个星号和 2 个竖线 *****|| 的方法数。这些符号的任何排列都代表一个独特的分配。以下是一些示例:
**|*|** 表示第一个桶中有 2 个项目,第二个桶中有 1 个项目,第三个桶中有 2 个项目。
****||* 表示第一个桶中有 4 个项目,第二个桶中没有项目,第三个桶中有 1 个项目。
||***** 表示第一个桶中没有项目,第二个桶中没有项目,第三个桶中有 5 个项目。
为什么只有 2 个分隔符,而有 3 个桶?这是一个围栏问题的例子。你有 2 个分隔符,创建了三个容器。我们已经有了一种计算具有一些不可区分项的排列的方法。对于上面的例子,我们有一个排列中有七个元素(5 个星号和 2 个分隔符):
部分 A: 假设你是一个初创孵化器,你有 1000 万美元(以 100 万美元的增量)要投资到 4 家公司中。你有多少种分配这笔钱的方式?
解决方案: 这就像把 10 个球放入 4 个罐子中。使用分隔法,我们得到:$$ \text{总方式数}= \binom{10+4-1}{10} = \binom{13}{10} = 286 $$ 这个问题类似于解决整数方程 \(x_1 + x_2 + x_3 + x_4 = 10\),其中 \(x_i\) 代表对第 \(i\) 家公司的投资,且 \(x_i \geq 0\) 对于所有 \(i = 1, 2, 3, 4\)。
部分 B: 如果你知道你想要至少在公司 1 中投资 300 万美元呢?
解决方案: 给公司 1 投资 300 万美元只有一种方式。剩余资金的投资方式与将 7 个球放入 4 个罐子相同。$$ \text{总方式数} = \binom{7+4-1}{7} = \binom{10}{7} = 120 $$ 这个问题类似于解决整数方程 \(x_1 + x_2 + x_3 + x_4 = 10\),其中 \(x_1 \geq 3\) 且 \(x_2, x_3, x_4 \geq 0\)。为了将这个问题转化为我们可以通过分隔法解决的整数解方程,我们需要调整 \(x_1\) 的界限,使得问题变为 \(x_1 + x_2 + x_3 + x_4 = 7\),其中 \(x_i\) 的定义与部分 A 相同。
部分 C: 如果你不需要投资全部 1000 万美元呢?(比如经济紧张,你可能想保留你的钱。)
解决方案: 想象一下你有一个额外的公司:你自己。现在你正在向 5 家公司投资 1000 万美元。因此,答案是相同的,就像把 10 个球放入 5 个罐子中。$$ \text{总数}= \binom{10+5-1}{10} = \binom{14}{10} = 1001 $$ 这个问题类似于解决整数方程 \(x_1 + x_2 + x_3 + x_4 + x_5 = 10\),其中 \(x_i \geq 0\) 对于所有 \(i = 1, 2, 3, 4, 5\)。
将桶划分为固定大小的容器
将桶划分为固定大小的容器:
如果有 \(n\) 个不同的对象,将它们放入 \(r\) 个对象组中,使得第 \(i\) 组的大小为 \(n_i\),且 \(\sum_{i=1}^{r} n_i = n\),那么放置方式的总数是:$$\frac{n!}{n_1!n_2!\cdots n_r!} = \binom{n}{n_1, n_2, \dots, n_r}$$ 其中 \(\binom{n}{n_1, n_2, \dots, n_r}\) 是称为多项式系数的特殊符号。
你可能已经注意到,这与“无区别对象的排列”中的公式完全相同。这里有一个深刻的平行关系。想象将对象分配到其组中的方法之一是想象组本身作为对象。每个组中有一个对象对应于一个“槽位”。所以如果组 1 中有两个槽位,组 2 中有三个槽位,组 3 中有一个槽位,你就可以有六个对象(1, 1, 2, 2, 2, 3)。每个独特的排列都可以用来做出一个独特的分配。
问题:
Camazon 公司有 13 台不同的新服务器,他们希望将这些服务器分配到 3 个数据中心,其中数据中心 A、B 和 C 分别有 6 个、4 个和 3 个空服务器机架。可能的服务器分配方式有多少种?
解决方案: 这是对我们的多项式系数表示的直接应用。设置 \(n_1 = 6, n_2 = 4, n_3 = 3\),\(\binom{13}{6,4,3} = 60,060\)。
解决这个问题的另一种方法是从组合的第一性原理作为一个多部分实验来进行。我们首先以 \(\binom{13}{6}\) 种方式选择分配给数据中心 A 的 6 台服务器。现在在剩下的 7 台服务器中,我们以 \(\binom{7}{4}\) 种方式选择分配给数据中心 B 的 4 台服务器。最后,我们从剩下的 3 台服务器中选择 3 台服务器,以 \(\binom{3}{3}\) 种方式。根据计数乘法规则,分配所有服务器的总方式数为 \(\binom{13}{6} \binom{7}{4} \binom{3}{3} = \frac{13!}{6!4!3!} = 60,060\)。
概率的定义
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part1/probability/
当有人说“你在一枚珍珠贝中找到珍珠的概率是 1/5,000?”或者“明天降雨的概率是 52%”时,这意味着什么?
事件和实验
当我们谈论概率时,总有一个隐含的上下文,我们正式称之为“实验”。例如:抛两个硬币是概率学家称之为实验的事情。为了精确地谈论概率,我们必须首先定义两个集合:实验所有可能结果的集合,以及我们认为是事件的子集(什么是集合?)。
定义:样本空间,\(S\)
样本空间是实验所有可能结果的集合。例如:
-
抛硬币:\(S\) =
-
抛两个硬币:\(S\) =
-
掷一个六面的骰子:\(S\) =
-
你一天收到的电子邮件数量:\(S = \{x|x ∈ ℤ, x ≥ 0\}\)(非负整数)
-
一天中的 YouTube 小时数:\(S = \{x|x ∈ ℝ,0 ≤ x ≤ 24\}\)
定义:事件,\(E\)
事件是\(S\)的某个子集,我们为其赋予意义。在集合表示法中(\(E ⊆ S\))。例如:
-
硬币正面朝上:\(E\) =
-
在两次抛硬币中至少出现一次正面 =
-
骰子掷出 3 或更小的点数:E =
-
你一天收到的电子邮件少于 20 封:\(E = \{x|x ∈ ℤ,0 ≤ x < 20\}\)(非负整数)
-
浪费的一天(≥ 5 个 YouTube 小时):\(E = \{x|x ∈ ℝ, 5 ≤ x ≤ 24\}\)
事件可以用大写字母表示,如\(E\)或\(F\)。
[待办] 在概率的世界里,事件是二元的:要么发生,要么不发生。
概率的定义
直到 20 世纪,人类才找到了精确定义“概率”这个词的方法:
用英语来说,就是:假设你进行\(n\)次“实验”的试验,这个“实验”可能导致特定的“事件”发生。事件发生的概率,\(\p(\text{Event})\),是导致事件发生的试验次数,即\(\text{count}(\text{Event})\),与进行的试验次数\(n\)的比值。在极限情况下,当你的试验次数趋向于无穷大时,这个比值将收敛到真正的概率。人们也将其他语义应用于概率的概念。一个常见的意义是,\(\p(E)\)是事件 E 发生的可能性的度量。
示例:极限情况下的概率
这里我们使用概率的定义来计算事件\(E\)发生的概率,即在一个公平的六面骰子上掷出“5”或“6”。点击“运行试验”按钮开始运行实验“掷骰子”。注意\(\p(E)\)如何收敛到\(2/6\)或 0.33 循环。
事件 \(E\):掷一个六面骰子得到 5 或 6。
骰子结果:***$n= $ 0 $\text{count}(E) = $ 0 $ \p(E) \approx \frac {\text{count}(E)} {n} = $
*** ***不确定性的度量:人们可能会倾向于认为概率代表了世界中的某种自然随机性。这可能是有道理的。但也许世界并不随机。我提出了一种更深入的概率思考方式。作为人类,我们不知道的事情太多了,而概率是我们用有限的知识表达对事件发生信念的强大语言。这种解释承认了你对事件的自身不确定性。也许如果你知道每个水分子的位置,你就能完美预测明天的天气。但我们没有这样的知识,因此我们使用概率来谈论根据我们所拥有的信息明天降雨的可能性。
概率的起源:概率的不同解释反映在你在现实世界(无论是多么不寻常的世界)中遇到的概率的多种来源中。有些概率是通过数学证明进行解析计算的。有些概率是从数据、实验或模拟中计算得出的。有些概率只是被编造出来以代表一种信念。大多数概率是从上述方法的组合中产生的。例如,有人会提出一个先验信念,然后使用数据和证据对这个信念进行数学更新。以下是从数据计算概率的一个例子:
概率和模拟:计算概率的另一种方式是通过模拟。对于一些复杂的问题,其中概率很难通过解析方法计算,你可以使用计算机进行模拟。如果你的模拟能够从样本空间中生成可信的试验,那么事件 E 的概率大约等于产生 E 结果的模拟次数的比例。再次强调,根据概率的定义,随着模拟次数接近无穷大,估计值会变得更加准确。
概率和百分比:你可能会听到人们将概率称为百分比。比如说,明天下雨的概率是 32%。正确的说法应该是,0.32 是降雨的概率。百分比仅仅是概率乘以 100。在拉丁语中,“percent”意为“每百”。
问题: 使用概率的定义来近似回答问题:“新生象崽为雄性的概率是多少?” 与你想象的相反,新生象的性别结果在雄性和雌性之间并不等可能。你从《动物繁殖科学》报告中有数据,其中指出在缅甸出生的象有 3,070 头,其中 2,180 头是雄性 [1]。人类出生时的性别比例也不是 50/50 [2]。
答案: 实验是:缅甸的一次单独象出生。
样本空间是出生时可能分配的性别的集合,\(\{Male, Female, Intersex\}\)。
\(E\) 是新生象崽为雄性的事件,在集合表示法中是样本空间 \(\{Male\}\) 的子集。结果并不等可能。
根据概率的定义,试验结果与总试验次数的比率将趋向于我们期望的概率:
由于 3,000 相当小于无穷大,这是一个近似值。然而,结果却相当好。一些重要的注意事项:我们的估计并不保证适用于缅甸以外的象。在接下来的课程中,我们将发展用于“在 3,000 次试验后,我们可以在数字 0.71 的情况下有多大的信心?”的语言。使用课程后面的工具,我们可以说,我们有 98% 的信心,真实概率在 0.710 的 0.02 范围内。
概率公理
这里有一些关于概率的基本真理,我们将其作为公理接受:
| 公理 1: \(0 ≤ \p(E) ≤ 1\) | 所有概率都是介于 0 和 1 之间的数字。 |
|---|---|
| 公理 2: \(\p(S) = 1\) | 所有结果都必须来自 样本空间。 |
| 公理 3: 如果 \(E\) 和 \(F\) 是互斥的,那么 \(\p(E \text{ 或 } F) = \p(E) + \p(F)\) | 互斥事件的“或”的概率 |
这三个公理正式称为 柯尔莫哥洛夫公理,并被认为概率论的基础。它们也是非常有用的恒等式!
你可以通过思考概率的数学定义来确信第一个公理。当你进行实验的试验时,不可能得到比试验更多的事件(因此概率小于 1),也不可能得到事件发生的次数少于 0(因此概率大于 0)。第二个公理也是有意义的。如果你的事件是样本空间,那么每个试验都必须产生该事件。这有点像说;如果你吃蛋糕(事件),那么你吃蛋糕(与事件相同的样本空间)的概率是 1。第三个公理更复杂,在这本教科书中,我们专门用一章来理解它:或的概率。它适用于具有特殊属性“互斥”的事件:事件不共享任何结果。
这些公理具有重大的历史意义。在 20 世纪初,人们并不清楚概率是否与其他数学领域有所不同——也许其他数学领域的技巧和证明系统无法适用。科尔莫哥洛夫的巨大成功在于向世界展示,数学的工具实际上适用于概率。基于这一套公理,数学家们构建了概率理论的体系。
可证明的推论
我们通常将这些称为可以直接从上述三个公理中证明的推论。
| 身份 1: \(\p(E\c) = 1 - \p(E)\) | 事件 E 不发生的概率 |
|---|---|
| 身份 2: 如果 \(E ⊆ F\),那么 \(\p(E) ≤ \p(F)\) | 子事件 |
这个第一个推论特别有用。对于任何事件,如果你知道它发生的概率,你可以计算出它不发生的概率,我们用概率符号写作 \(E\c\),反之亦然。我们还可以使用这个推论向你展示如何证明概率论中的定理。
证明: \(\p(E\c) = 1 - \p(E)\) $$ \begin{align} \p(S) &= \p(E \or E\c) && \text{事件 \(E\) 或 \(E\c\) 覆盖样本空间中的每个结果} \ \p(S) &= \p(E) + \p(E\c) && \text{事件 \(E\) 和 \(E\c\) 是互斥的} \ 1 &= \p(E) + \p(E\c) && \text{概率公理 2} \ \p(E\c) &= 1 - \p(E) && \text{通过重新排列} \end{align} $$***
等可能结果
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part1/equally_likely/
一些样本空间具有等可能的结果。我们喜欢这样的样本空间,因为我们可以通过计数简单地计算这些样本空间中的概率问题。以下是一些具有等可能结果的例子:
-
抛掷硬币:S =
-
抛掷两个硬币:S =
-
抛掷六面骰子:S =
因为每个结果都是等可能的,并且样本空间的概率必须是 1,我们可以证明每个结果必须具有概率:
根据等可能结果规则计算概率的问题,设置问题有一些技巧。 (1) 第一步是明确定义你的样本空间,并论证你的样本空间中的所有结果都是等可能的。 (2) 接下来,你需要计算样本空间中的元素数量,(3) 最后你需要计算事件空间的大小。事件空间必须是你在第(1)部分定义的样本空间中的所有元素。第一步给你留下了很多选择!例如,你可以决定使不可区分的对象变得不同,只要你的计算事件空间大小时做出相同的假设。
示例: 两个骰子之和等于 7 的概率是多少?
有缺陷的解决方案: 你可以将你的样本空间定义为两个骰子所有可能的和(2 到 12)。然而,这个样本空间未能通过“等可能性”测试。你得到和为 2 的概率并不等于得到和为 7 的概率。
解决方案: 考虑前一章中我们考虑的样本空间,其中我们将骰子视为不同的,并列举了样本空间中的所有结果。第一个数字是骰子 1 的投掷,第二个数字是骰子 2 的投掷。请注意,(1, 2) 与 (2, 1) 是不同的。由于每个结果都是等可能的,并且样本空间恰好有 36 个结果,因此任何单个结果的概率是 \(\frac{1}{36}\)。以下是所有结果的可视化:
| (1,1) | (1,2) | (1,3) | (1,4) | (1,5) | (1,6) |
|---|---|---|---|---|---|
| (2,1) | (2,2) | (2,3) | (2,4) | (2,5) | (2,6) |
| (3,1) | (3,2) | (3,3) | (3,4) | (3,5) | (3,6) |
| (4,1) | (4,2) | (4,3) | (4,4) | (4,5) | (4,6) |
| (5,1) | (5,2) | (5,3) | (5,4) | (5,5) | (5,6) |
| (6,1) | (6,2) | (6,3) | (6,4) | (6,5) | (6,6) |
事件(两个骰子之和为 7)是样本空间中两个骰子之和为 7 的子集。事件中的每个结果都用蓝色突出显示。共有 6 种这样的结果:(1, 6), (2, 5), (3, 4), (4, 3), (5, 2), (6, 1)。请注意,(1, 6)与(6, 1)是不同的结果。为了使结果等可能,我们必须使骰子不同。$$ \begin{align} \p(\text{两个骰子之和为 7}) &= \frac{|E|}{|S|} && \text{由于结果等可能} \ &= \frac{6}{36} = \frac{1}{6} && \text{事件中有 6 种结果} \end{align} $$
有趣的是,这个想法也适用于连续样本空间。考虑计算机函数"random"的所有可能结果的样本空间,该函数产生介于 0 和 1 之间的实数值,其中所有实数值等可能。现在考虑事件\(E\),即生成的数字在[0.3 到 0.7]的范围内。由于样本空间等可能,\(\p(E)\)是\(E\)的大小与\(S\)的大小的比值。在这种情况下,\(\p(E) = \frac{0.4}{1} = 0.4\)。
“或”的概率
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part1/prob_or/
计算事件 \(E\) 或事件 \(F\) 发生的概率的公式,写作 \(\p(E \or F)\) 或等价地写作 \(\p(E ∪ F)\),与计算两个集合的大小深度相似。就像计数一样,你可以使用的方程取决于事件是否“互斥”。如果事件是互斥的,计算任一事件发生的概率非常直接。否则,你需要更复杂的“包含排除”公式。
互斥事件
如果两个事件:\(E\),\(F\) 被认为是互斥的(在集合表示法中 \(E ∩ F = ∅\)),那么没有结果同时属于这两个事件(回想一下,事件是一组结果,它是样本空间的子集)。用英语来说,互斥意味着两个事件不能同时发生。
互斥性可以可视化。考虑以下视觉样本空间,其中每个结果是一个六边形。所有五十个六边形的集合是整个样本空间:

两个事件:\(E\),\(F\) 的互斥示例。
两个事件 \(E\) 和 \(F\) 是同一样本空间的子集。从视觉上看,我们可以注意到这两个集合没有重叠。它们是互斥的:没有结果同时属于这两个集合。
与互斥事件的“或”
定义:互斥事件的“或”概率
如果两个事件:\(E\),\(F\) 是互斥的,那么 \(E\) 或 \(F\) 发生的概率是:$$ \p(E \or F) = \p(E) + \p(F) $$
这个性质适用于计算 \(E\) 或 \(F\) 的概率的任何方法。此外,这个想法可以扩展到超过两个事件。假设你有 \(n\) 个事件 \(E_1, E_2, \dots E_n\),其中每个事件与其他事件互斥(换句话说,没有结果在多个事件中)。那么:$$ \p(E_1 \or E_2 \or \dots \or E_n) = \p(E_1) + \p(E_2) + \dots + \p(E_n) = \sum_{i=1}^n \p(E_i) $$
你可能已经注意到,这是概率的一个公理。尽管它可能看起来直观,但它是我们接受而不需要证明的三个规则之一。
注意:互斥性仅使计算 \(E \or F\) 的概率变得容易,而不是其他组合事件的方式,例如 \(E \and F\)。
到目前为止,我们知道如果事件具有互斥性质,我们就可以计算“或”事件的概率。如果它们不具有这种性质怎么办?
与非互斥事件的“或”
不幸的是,并不是所有事件都是互斥的。如果你想计算 \(\p(E \or F)\),其中事件 \(E\) 和 \(F\) 不是互斥的,你不能简单地添加概率。作为一个简单的合理性检查,考虑事件 \(E\):掷硬币得到正面,其中 \(\p(E) = 0.5\)。现在想象样本空间 \(S\),掷硬币得到正面或反面。这些事件不是互斥的(正面的结果在两者中都有)。如果你错误地假设它们是互斥的,并试图计算 \(\p(E \or S)\),你会得到这个错误的推导:
错误的推导:错误地假设了互斥性
计算事件 \(E\),掷骰子得到偶数(2,4 或 6),或事件 \(F\),掷骰子得到 3 或更少(1,2,3)的概率。$$ \begin{align} \p(E \or F) &= \p(E) + \p(F) && \text{错误地假设了互斥性} \ &= 0.5 + 0.5 && \text{用 \(E\) 和 \(S\) 的概率替换} \ &= 1.0 && \text{哎呀!} \end{align} $$
概率不能是 1,因为结果 5 既不是 3 或更少,也不是偶数。问题在于我们重复计算了得到 2 的概率,而解决方案是减去这个重复计算的概率。
发生了什么问题?如果两个事件不是互斥的,简单地添加它们的概率会重复计算任何在两个事件中都出现的结果的概率。有一个用于计算两个非互斥事件“或”的公式:它被称为“包含-排除”原理。
定义:包含-排除原理
对于任何两个事件:E,F:$$ \p(E \or F) = \p(E) + \p(F) − \p(E \and F) $$
这个公式也有超过两个事件的版本,但它会变得相当复杂。请参阅下两个部分以获取更多详细信息。
注意,包含-排除原理也适用于互斥事件。如果两个事件是互斥的,\(\p(E \and F) = 0\),因为 \(E\) 和 \(F\) 同时发生是不可能的。因此,公式 \(\p(E) + \p(F) - \p(E \and F)\) 简化为 \(\p(E) + \p(F)\)。
三事件的包含-排除原理
如果我们有三个事件,它们不是互斥的,并且我们想知道“或”的概率 $ \P(E_1 \or \E_2 \or E_3)$,包含-排除属性看起来是什么样子?
回想一下,如果它们是互斥的,我们只需添加概率。如果不是互斥的,你需要使用三个事件的包含-排除公式:
用文字来说,要得到三个事件的概率,你需要:(1) 添加每个事件单独发生的概率。(2) 然后你需要减去每对事件同时发生的概率。(3) 最后,你需要加上所有三个事件同时发生的概率。
\(n\) 事件的包含-排除原理
在我们探讨一般公式之前,让我们再看一个例子。四个事件的包含-排除:
你看出了这个模式吗?对于 \(n\) 个事件,\(E_1, E_2, \dots E_n\):将每个事件单独的概率相加。然后减去所有事件对的概率。然后加上所有 3 个事件的子集。然后减去所有 4 个事件的子集。继续这个过程,直到子集的大小为 \(n\),如果子集的大小是奇数,则加上子集,否则减去它们。交替相加和相减是包含-排除原理名称的由来。这是一个复杂的过程,你应该首先检查是否有更简单的方法来计算你的概率。这可以用数学公式表示——但它是一个相当难以用符号表达的复杂模式:
\(Y_r\) 的符号特别难以解析。\(Y_r\) 对所有选择 \(r\) 个事件子集的方式求和。对于每个 \(r\) 个事件的选取,计算这些事件的“与”的概率。\((-1)^{r+1}\) 表示:交替相加和相减,从相加开始。
在这里遵循数学符号并不是特别重要。主要的收获是,包含-排除原理在多个事件的情况下会变得极其复杂。通常,在这种情况下取得进展的方法是找到一种使用另一种方法来解决你的问题的方法。
计算非互斥事件的“或”的公式通常需要计算事件的“与”的概率。更多内容请参阅和的概率章节。
条件概率
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part1/cond_prob/
在英语中,条件概率表示为“在已经观察到某些其他事件 F 的情况下,事件 E 发生的可能性是什么”。它是机器学习和概率中的一个关键概念,因为它允许我们在面对新证据时更新我们的概率。
当你基于一个事件的发生进行条件化时,你进入了该事件已经发生的世界。正式地说,一旦你基于 \(F\) 进行条件化,现在可能的结果只有与 \(F\) 一致的结果。换句话说,你的样本空间现在将缩减为 \(F\)。顺便提一下,在事件 \(F\) 发生的宇宙中,所有概率规则仍然适用!
定义:条件概率。
在事件 F 已经发生的情况下(即基于事件 F 的条件),事件 E 发生的概率:$$ \p(E |F) = \frac{\p(E \and F)}{\p(F)} $$
让我们通过一个可视化来理解为什么条件概率公式是正确的。再次考虑事件 \(E\) 和 \(F\),它们的可能结果都是样本空间中 50 个等可能结果的子集,每个结果都表示为一个六边形:

基于事件 F 的条件意味着我们已经进入了事件 F 已经发生的世界(此时,F,它有 14 个等可能的结果,已成为我们的新样本空间)。在事件 F 发生的条件下,事件 E 发生的条件概率是 E 的结果中与 F 一致的部分。在这种情况下,我们可以直观地看到这些是 \(E \and F\) 中的三个结果。因此,我们有:$$ \p(E |F) = \frac{\p(E \and F)}{\p(F)} = \frac{3/50}{14/50} = \frac{3}{14} \approx 0.21 $$ 即使这个视觉示例(具有等可能结果空间)对于获得直觉很有用,但条件概率无论样本空间是否有等可能结果都适用!
条件概率示例
让我们用一个现实世界的例子来更好地理解条件概率:电影推荐。想象一下,像 Netflix 这样的流媒体服务想要根据用户观看了一部不同的电影\(F\)(比如Amélie)来计算用户观看电影\(E\)(例如,Life is Beautiful)的概率。首先,让我们回答一个更简单的问题:用户观看电影 Life is Beautiful,\(E\)的概率是多少?我们可以使用概率的定义和一个电影观看数据集[1]来解决这个问题:$$ \begin{align} \p(E) &= \lim_{n \rightarrow \infty} \frac{\text{count}(E)}{n} \approx \frac{\text{# people who watched movie \(E\)}}{\text{# people on Netflix}} \ &= \frac{1,234,231}{50,923,123} \approx 0.02 \end{align} $$ 实际上,我们可以为许多电影\(E\)做同样的事情:
\(\p(E) = 0.02\)
\(\p(E) = 0.01\)
\(\p(E) = 0.05\)
\(\p(E) = 0.09\)
\(\p(E) = 0.03\)
现在来一个更有趣的问题。在已知用户观看了 Amélie(\(F\))的情况下,用户观看电影 Life is Beautiful(\(E\))的概率是多少?我们可以使用条件概率的定义。$$ \begin{align} \p(E|F) &= \frac{\p(E \and F)}{\p(F)} && \text{条件概率的定义}\ &\approx \frac{ (\text{# who watched \(E \and F\)}) / (\text{# of people on Netflix}) }{ (\text{# who watched movie \(F\)}) / (\text{# people on Netflix}) } && \text{概率的定义} \ &\approx \frac{\text{# of people who watched both \(E \and F\)}}{\text{# of people who watched movie \(F\)}} && \text{简化} \end{align} $$ 如果我们让\(F\)表示某人观看电影 Amélie 的事件,我们现在可以计算\(\p(E|F)\),即某人观看电影\(E\)的条件概率:
\(\p(E|F) = 0.09\)
\(\p(E|F) = 0.03\)
\(\p(E|F) = 0.05\)
\(\p(E|F) = 0.02\)
\(\p(E|F)\) = 1.00
为什么在观察到某人观看了 Amélie(\(F\))之后,有些概率上升,有些概率下降,而有些概率保持不变?如果你知道某人观看了 Amélie,他们更有可能观看 Life is Beautiful,而不太可能观看 Star Wars。我们对这个人的信息有了新的了解!
条件范式
当你基于一个事件进行条件化时,你进入了一个该事件已经发生的世界。在这个新的世界中,所有概率定律仍然适用。因此,只要你在同一事件上保持一致的条件化,我们所学到的每一个工具仍然适用。让我们看看当我们对事件进行一致的条件化时(在这种情况下是 \(G\))的一些老朋友:
| 规则名称 | 原始规则 | 基于 \(G\) 的规则 |
|---|---|---|
| 概率公理 1 | \(0 ≤ \p(E) ≤ 1\) | \(0 ≤ \p(E | G) ≤ 1\) |
| 概率公理 2 | \(\p(S) = 1\) | \(\p(S | G) = 1\) |
| 概率公理 3 | 对于互斥事件,\(\p(E \lor F) = \p(E) + \p(F)\) | 对于互斥事件,\(\p(E \lor F | G) = \p(E | G) + \p(F | G)\) |
| Identity 1 | \(\p(E^c) = 1 - \p(E)\) | \(\p(E^c | G) = 1 - \p(E | G)\) |
基于多个事件的条件化
条件范式也适用于条件概率的定义!再次,如果我们一致地基于某个事件 \(G\) 的发生进行条件化,规则仍然适用:$$ \p(E|F, G) = \frac{\p(E \land F| G)}{\p(F| G)} $$ 术语 \(\p(E|F, G)\) 是对多个事件条件化的新符号。你应该将这个术语读作“在 F 和 G 都已发生的情况下,E 发生的概率”。这个方程表明,在 \(G\) 发生的世界中,\(E|F\) 的条件概率定义仍然适用。你认为 \(\p(E|F, G)\) 应该等于 \(\p(E|F)\) 吗?答案是:有时是,有时不是。
独立性
chrispiech.github.io/probabilityForComputerScientists/en/part1/independence/
到目前为止,我们已经讨论了互斥作为两个或更多事件可以拥有的一个重要的“属性”。在本章中,我们将向您介绍第二个属性:独立性。独立性可能是需要考虑的最重要属性之一!就像互斥一样,如果你能确立这个属性适用(无论是通过逻辑还是通过声明为假设),这将使分析概率计算变得容易得多!
定义: 独立性
如果知道一个事件的结局不会改变你对另一个事件是否发生的信念,那么这两个事件被认为是独立的。例如,你可能会说两个独立的骰子滚动是相互独立的:第一个骰子的结果不会给你关于第二个骰子结果的信息——反之亦然。
另一种定义
通过使用称为链式法则的方程,可以推导出独立性的另一个定义,我们将在稍后学习,在两个事件独立的情况下。考虑两个独立事件\(A\)和\(B\):$$\begin{align} \P(A,B) &= \p(A) \cdot \p(B|A) && \href{ ../../part1/prob_and/}{\text{链式法则}} \ &= \p(A) \cdot \p(B) && \text{独立性} \end{align}$$
独立性是对称的
这个定义是对称的。如果\(E\)与\(F\)独立,那么\(F\)也与\(E\)独立。我们可以从被称为贝叶斯定理的法律开始证明\(\p(F | E) = \p(F)\)意味着\(\p(E | F) = \p(E)\),我们将在稍后介绍:$$\begin{align} \p(E | F) &= \frac{\p(F|E) \cdot \p(E)}{\p(F)} && \text{贝叶斯定理} \ &= \frac{\p(F) \cdot \p(E)}{\p(F)} && \p(F | E) = \p(F) \ &= \p(E) && \text{约简} \end{align}$$
广义独立性
如果对于每个包含\(r\)个元素(其中\(r \leq n\))的子集:$$ \p(E_{1'}, E_{2'}, \dots, E_{r'}) = \prod_{i=1}^r \p(E_i') $$
例如,考虑 5 次抛硬币得到 5 个正面的概率,其中我们假设每次抛硬币都是相互独立的。
设\(H_i\)为第\(i\)次抛硬币得到正面的事件:$$\begin{align} \p(H_1,&H_2,H_3,H_4,H_5) \ &= \p(H_1) \cdot \p(H_2) \cdots \p(H_5) && \text{独立性} \ &= \prod_{i=1}⁵ \p(H_i) && \text{乘积符号}\ &= \prod_{i=1}⁵ \frac{1}{2} \ &= \frac{1}{2}⁵ \ &= 0.03125 \end{align}$$
如何建立独立性
你如何证明两个或更多事件是独立的?默认选项是数学上证明。如果你能证明 \(\p(E | F) = \p(E)\),那么你就已经证明了这两个事件是独立的。当处理来自数据的概率时,很少有事情会完全符合独立性的数学定义。这可能有两个原因:首先,从数据或模拟计算出来的事件并不完全精确,可能无法知道 \(\p(E)\) 和 \(\p(E |F)\) 之间的差异是由于概率估计的不准确,还是事件之间的依赖性。其次,在我们的复杂世界中,许多事物实际上相互影响,即使只是微小的程度。尽管如此,我们经常做出错误但有用的独立性假设。由于独立性使得人类和机器计算复合概率变得容易得多,你可以宣布这些事件是独立的。这可能意味着你的计算结果略有错误——但这种“建模假设”可能使得出结果变得可行。
独立性是一个属性,如果你认为一个事件不太可能影响你对另一个事件发生的信念(或者如果这种影响是可以忽略不计的),那么通常会“假设”它是独立的。让我们通过一个例子来更好地理解。
示例:并行网络
在网络中,例如互联网,计算机可以发送信息。通常,在两台计算机之间有多个路径(由路由器介导),只要有一条路径是可用的,就可以发送信息。考虑以下具有 \(n\) 个 独立 路由器的并行网络,每个路由器有 \(p_i\) 的概率可以正常工作(其中 1 ≤ \(𝑖\) ≤ \(𝑛\))。设 \(E\) 为从 \(A\) 到 \(B\) 存在一条可用路径的事件。\(\p(E)\) 是多少?!
一个简单的网络,连接了两台计算机,A 和 B。设 \(F_i\) 为路由器 \(i\) 失效的事件。注意,问题指出路由器是独立的,因此我们假设事件 \(F_i\) 之间都是独立的。 $$\begin{align} \p(E) &= \p(\text{至少有一个路由器工作}) \ &= 1 - \p(\text{所有路由器都失败}) \ &= 1 - \p(F_1 \text{ 和 } F_2 \text{ 和 } \dots \text{ 和 } F_n) \ &= 1 - \prod_{i=1}^n \p(F_i) && \text{事件 } F_i \text{ 的独立性}\ &= 1 - \prod_{i=1}^n 1 - p_i \end{align}$$ 其中 \(p_i\) 是路由器 \(i\) 正常工作的概率。
独立性与互补性
给定独立事件 \(A\) 和 \(B\),我们可以证明 \(A\) 和 \(B^C\) 是独立的。形式上,我们想要证明:\(\P( A B^C) = \P( A)\P(B^C)\)。这需要从一条称为总概率定律的规则开始,我们将在稍后介绍。 $$\begin{align} \P (AB^C ) &= \P (A) - \P (AB) && \href{ ../../part1/law_total/}{\text{LOTP}} \ &= \P (A) - \P (A)\P (B) &&\text{独立性}\ &= \P (A)[1 - \P (B)]&&\text{代数}\ &= \P (A)\P(B^C)&&\href{ ../..//part1/probability/}{\text{恒等式 1}}\ \end{align}$$
条件独立性
我们之前看到,如果你始终对事件进行条件化,概率定律仍然成立。因此,独立性的定义也适用于条件事件的宇宙。我们使用术语“条件独立性”来指代在始终条件化时独立的事件。例如,如果有人声称事件 \(E_1, E_2, E_3\) 在给定事件 \(F\) 的条件下是条件独立的,这意味着 $$ \p(E_1, E_2, E_3 | F) = P(E_1|F) \cdot P(E_2|F) \cdot P(E_3|F) $$ 这可以用乘积符号更简洁地表示为 $$ \p(E_1, E_2, E_3 | F) = \prod_{i=1}³ P(E_i|F) $$
警告: 当对事件进行条件化时,概率的规则保持不变,但事件之间的独立性属性可能会改变。在条件化一个事件时,原本相关的事件可能变得独立,而原本独立的事件可能变得相关。例如,如果事件 \(E_1, E_2, E_3\) 在给定事件 \(F\) 的条件下是条件独立的,那么不一定有 $$ \p(E_1,E_2,E_3) = \prod_{i=1}³ P(E_i) $$ 因为此时我们不再对 \(F\) 进行条件化。
“和”的概率
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part1/prob_and/
两个事件(例如 \(E\) 和 \(F\))的“和”的概率,记作 \(\p(E \and F)\),是两个事件同时发生的概率。你可能还会看到等价记法 \(\p(EF)\),\(\p(E ∩ F)\) 和 \(\p(E,F)\) 来表示“和”的概率。计算事件 \(E\) 和事件 \(F\) 同时发生的概率取决于事件是否“独立”。与互斥事件使得计算事件的“或”的概率变得容易一样,独立性是一种使得计算事件的“和”的概率变得容易的性质。
与独立事件相关
如果事件是 独立的,那么计算“和”的概率就变得简单,即乘法:
定义:独立事件的“和”的概率。
如果两个事件:\(E\),\(F\) 是独立的,那么 \(E\) 和 \(F\) 同时发生的概率是:$$ \p(E \and F) = \p(E) \cdot \p(F) $$
这个性质与 \(E\) 和 \(F\) 的概率是如何计算的以及事件是否互斥无关。
独立性原理不仅适用于两个事件,也适用于更多事件。对于 \(n\) 个相互之间是 相互独立的*事件 \(E_1, E_2, \dots E_n\),事件的独立性方程也适用于所有事件的子集。$$ \p(E_1 \and E_2 \and \dots \and E_n) = \prod_{i=1}^n \p(E_i) $$
我们可以通过结合条件概率的定义和独立性定义来证明这个方程。
证明:如果 \(E\) 与 \(F\) 独立,那么 \(\p(E \and F) = \p(E) \cdot \p(F)\)
参见 独立性 章节了解何时可以假设两个事件是独立的
与相关事件相关
不独立的事件称为 *相关事件。如何计算相关事件的“和”的概率?如果你的事件是互斥的,你可能能够使用称为德摩根定律的技术,我们将在后面的章节中介绍。对于相关事件的“和”的概率,有一个直接公式称为链式法则,可以直接从条件概率的定义中推导出来:
定义:链式法则。
条件概率定义中的公式可以重新排列,以推导出计算任何两个事件“和”的概率的通用方法:$$ \p(E \and F) = \p(E | F) \cdot \p(F) $$
当然,\(E\) 没有什么特殊之处表明它应该先出现。等价地:$$ \p(E \and F) = \p(F \and E) = \p(F | E) \cdot \p(E) $$
我们称这个公式为“链式法则”。直观上,它表明观察事件 \(E\) 和 \(F\) 的概率是观察 \(F\) 的概率,乘以在观察到 \(F\) 的条件下观察 \(E\) 的概率。它可以推广到超过两个事件:$$ \begin{align} \p(E_1 \and E_2 \and \dots \and E_n) = &\p(E_1) \cdot \p(E_2|E_1) \cdot \p(E_3 |E_1 \and E_2) \dots \ &\p(E_n|E_1 \dots E_{n−1}) \end{align} $$
总概率定律
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part1/law_total/
有一次,一个敏锐的人观察到,当我们看一张图片时,就像我们为条件概率所看到的图片:

那个事件 \(E\) 可以被认为有两个部分,一部分在 \(F\) 中,\((E \and F)\),另一部分不在 \(F\) 中,\((E \and F\c)\)。这是因为 \(F\) 和 \(F\c\) 是(a)相互排斥的结果集合,它们(b)一起覆盖整个样本空间。经过进一步的研究,这被证明在数学上是正确的,并且引起了极大的欢庆:
这个观察结果在结合链式法则时特别有用,它产生了一个非常有用的工具,被赋予了响亮的名字,即总概率定律:$$ \begin{align} \p(E) &= \p(E \and F) + \p(E \and F\c) \ &= \p(E | F) \p(F) + \p(E | F\c) \p(F\c) \ \end{align} $$
总概率定律 (LOTP)
如果我们将上述观察结果与链式法则结合起来,我们得到一个非常有用的公式,简称为总概率定律 (LOTP):$$ \begin{align} \p(E) &= \p(E | F) \p(F) + \p(E | F\c) \p(F\c) \end{align} $$
存在着更一般的规则。如果你能将样本空间划分为任意数量的相互排斥的事件:\(B_1, B_2, \dots B_n\),使得样本空间中的每个结果都落在这些事件之一中,那么:$$ \begin{align} \p(E) &= \sum_{i=1}^n \p(E \and B_i) && \text{扩展我们的观察}\ &= \sum_{i=1}^n \p(E | B_i) \p(B_i) && \text{在每个项上使用链式法则} \end{align} $$
对多个背景事件的推广
事件 \(F\) 和 \(F^C\) 总是相互排斥的,并且它们总是覆盖整个样本空间,无论 \(F\) 代表什么!如果你能找到超过两个相互排斥的背景事件,并且它们的并集覆盖整个样本空间(结果的全集),那么你可以使用总概率定律的推广版本。
为了推广总概率定律,想象我们可以将样本空间划分为几个相互排斥的背景事件 \(( B_1, B_2, \dots, B_n )\),其中这些集合覆盖整个样本空间。在这种情况下,任何事件 \(E\) 都可以通过考虑 \(E\) 在这些不相交集合中的可能性来分解。

在上面的图像中,你可以计算出\(\p(E)\)等于$$\p\Big[(E \and B_1) \text{ }\or \text{ }(E \and B_2)\text{ } \or \text{ } \dots \text{ } \or \text{ }(E \and B_n)\big]$$在现实世界中有很多案例,其中(a)在背景事件\(B_i\)和样本空间的离散化背景下思考事件\(E\)的概率要容易得多,样本空间可以划分为几个互斥的背景事件\(B_i\)。让我们从一个包含三个事件\(B_1, B_2, B_3\)的例子开始。假设你正在尝试确定随机选择的人测试呈阳性某种疾病的可能性,\(\p(E)\)。人口可以被划分为三个互斥的群体:
-
\(B_1\): 高风险个体(例如,已知接触过该疾病的个体)
-
\(B_2\): 中等风险个体(例如,有该疾病家族史但没有直接接触的人)
-
\(B_3\): 低风险个体(例如,没有已知风险因素的普通人群)
这些组中每个组测试呈阳性疾病的概率都不同,一个随机个体测试呈阳性的总概率可以分解如下:$$ \begin{align} \P(E) &= \P(E \and B_1) + \P(E \and B_2) + \P(E \and B_3) && \text{LOTP}\ &= \P(E | B_1)P(B_1) + \P(E | B_2)P(B_2) + \P(E | B_3)P(B_3) && \text{Chain Rule}\ &= \sum_{i=1}^{3} P(E \mid B_i)P(B_i) && \text{Sum Notation} \end{align} $$
其中:
-
\(P(E | B_1)\) 是在一个人属于高风险组的情况下测试呈阳性的概率
-
\(P(E | B_2)\) 是在中等风险组中某个人测试呈阳性的概率,
-
\(P(E | B_3)\) 是在一个人属于低风险组的情况下测试呈阳性的概率。
-
$ P(B_1)$, \(P(B_2)\) 和 \(P(B_3)\) 是一个人属于高风险、中等风险和低风险组的概率。
这之所以有效,是因为每个人都可以属于以下背景事件之一(\(B_1, B_2, B_3\)),换句话说,这些集合覆盖了样本空间。此外,每个人只属于一个集合,因此它们是互斥的。这很有帮助,因为在这种背景下,在背景事件中思考测试呈阳性事件\(E\)的概率更容易,你已知患者的风险程度。
贝叶斯定理
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part1/bayes_theorem/
贝叶斯定理是计算机科学家在概率论中最普遍的结果之一。简而言之,贝叶斯定理提供了一种将一个方向的条件概率(例如 \(\p(E|F)\))转换为另一个方向(例如 \(\p(F|E)\))的方法。
贝叶斯定理是一个我们可以自己推导的数学恒等式。从条件概率的定义开始,然后使用链式法则展开 \(\and\) 项:$$ \begin{align} \p(F|E) &= \frac{\p(F \and E)}{\p(E)} && \text{条件概率的定义} \\ &= \frac{\p(E | F) \cdot \p(F)}{\p(E)} && \text{用链式法则替换 \(\p(F \and E)\)} \end{align} $$
这个定理对 \(E\) 或 \(F\) 没有任何假设,因此它适用于任何两个事件。贝叶斯定理非常有用,因为它实际上是一种普遍的方式来回答问题:“我如何根据证据更新对某事的信念,而这件事不是直接可观察的。”这是有充分理由的。对于许多“噪声”测量,根据世界的真实状态估计噪声观察的概率是直接的。然而,你真正想了解的是相反的条件概率:给定证据,世界的真实状态的概率是什么。有无数的现实世界情况符合这种情况:
示例 1:医学测试
*你想知道的是什么:给定测试结果,疾病的可能性
*容易知道的是什么:在给定疾病的真实状态下,测试结果的可能性
*因果关系:我们相信疾病影响测试结果
示例 2:学生能力
*你想知道的是什么:给定他们的答案,学生对某一学科的知识
*容易知道的是什么:在给定学生对某一学科的知识的情况下,答案的可能性
*因果关系:我们相信能力影响答案
示例 3:手机位置
*你想知道的是什么:给定到塔的噪声距离测量,手机在哪里
*容易知道的是什么:在给定到塔的真实距离的情况下,噪声测量中的误差
*因果关系:我们相信手机位置影响距离测量
这里有一个模式:在每个例子中,我们关心的是了解一些不可观察的——或者难以观察的——世界状态。这种世界状态“导致”了一些容易观察到的证据。例如:有流感(我们想了解的事情)导致发烧(我们可以轻易观察到的),而不是反过来。我们通常将不可观察的状态称为“信念”,可观察的状态称为“证据”。因此,让我们重新命名事件!让我们将我们想了解的不可观察事物称为\(B\)(信念)。让我们将我们有证据的事物称为\(E\)(证据)。这使得贝叶斯定理允许我们根据证据计算更新的信念:\(\p(B | E)\)
定义:贝叶斯定理
贝叶斯定理最常见的形式是贝叶斯定理经典版:$$ \p(B|E) = \frac{\p(E | B) \cdot \p(B)}{\p(E)} $$
贝叶斯规则公式中的不同项有不同的名称。项\(\p(B|E)\)通常称为“后验”:这是你在考虑证据\(E\)后对\(B\)的更新信念。项\(\p(B)\)通常称为“先验”:这是你在看到任何证据之前的信念。项\(\p(E|B)\)称为更新,\(\p(E)\)通常称为归一化常数。
当分母未知时,有几种处理这种情况的技术。一种技术是使用全概率定律展开项,从而得到另一个公式,称为带有全概率定律的贝叶斯定理:$$ \p(B|E) = \frac{\p(E | B) \cdot \p(B)}{\p(E|B)\cdot \p(B) + \p(E|B\c) \cdot \p(B\c)} $$
回想一下全概率定律,它是我们新分母的原因:$$ \begin{align} \p(E) = \p(E|B)\cdot \p(B) + \p(E|B\c) \cdot \p(B\c) \end{align} $$
应用贝叶斯规则公式的常见场景是当你想了解在观察到某个“已观察”事件的情况下,“不可观察”事件的概率!例如,你想知道一个学生在观察到他们解决特定问题后理解某个概念的概率。结果发现,首先估计学生在理解概念的情况下解决问题的概率,然后应用贝叶斯定理要容易得多。直观上,你可以将这视为根据证据更新信念。
贝叶斯定理应用
有时,贝叶斯定理(correct)的结果可能会让人感到反直觉。在这里,我们将通过一个经典的结果来进行分析:贝叶斯定理在医学测试中的应用。我们展示了一个动态解决方案,并提供了可视化工具来理解所发生的情况。
示例: 基于噪声测试的疾病概率
在这个问题中,我们将计算患者有疾病给定疾病测试结果的概率。阳性测试结果意味着测试认为患者有疾病。你知道以下信息,这在医学测试中很典型:
本例中的数字来自乳腺钼靶检查。癌症的严重性凸显了贝叶斯概率在重要场景中的应用潜力。乳腺癌的自然发生率为 8%。对于患有乳腺癌的患者,钼靶检查有 95%的概率返回阳性结果。对于没有乳腺癌的人,测试有 7%的概率返回阳性结果。在这个演示中,您可以输入不同的输入数字,它将重新计算。
答案
在测试结果为阳性时,患者患有疾病的发生概率是:
术语:
设 \(I\) 为患者患有疾病的事件
设 \(E\) 为测试结果为阳性的事件
\(\p(I|E)\) = 阳性测试结果下患病的概率。这是我们想要计算的数字。
\(\p(E|I)\) = 患有疾病时阳性结果的概率 = \(\p(E|I\c)\) = 无疾病时阳性结果的概率 = \(\p(I)\) = 疾病的自然概率 =
贝叶斯定理:
在这个问题中,我们知道 \(\p(E|I)\) 和 \(\p(E|I\c)\),但我们想了解 \(\p(I|E)\)。我们可以应用贝叶斯定理将我们对一个条件的了解转化为对反向条件的了解。
现在我们只需要将数值代入这个公式。我们唯一没有明确知道的是 \(\p(I\c)\)。但我们可以简单地计算它,因为 \(\p(I\c) = 1 - \p(I)\)。因此:
自然频率直觉
建立贝叶斯定理直觉的一种方法是通过考虑“自然频率”。让我们采取另一种方法来回答上述关于给定测试结果对疾病信念的概率问题。在这种情况下,我们将想象我们有一个 1000 人的群体。让我们考虑其中有多少人患有疾病并测试呈阳性,以及有多少人没有疾病但测试呈阳性。这种可视化是基于上面的数字。您可以随意更改它们!
有许多关于患有疾病的人数可能性,但一个非常合理的数字是 1000,这是我们的总人口数乘以疾病的发生概率。
\(1000 \times \p(\text{Illness})\) 患有疾病的人。
\(1000 \times (1- \p(\text{Illness}))\) 没有疾病的人。
我们将用蓝色标记患有疾病的人,用粉色标记没有疾病的人(这些颜色不表示性别!)。
某些患有疾病的人将测试呈阳性(我们将用深蓝色表示),以及某些没有疾病的人将测试呈阳性(我们将用深粉色表示):
\(1000 \times \p(\text{Illness}) \times \p(\text{Positive}|\text{Illness})\) 患有疾病并测试呈阳性的人。
\(1000 \times \p(\text{Illness}\c) \times \p(\text{Positive}|\text{Illness}\c)\) 没有疾病但测试呈阳性的人。
这里是整个 1000 人的群体:
测试呈阳性且患有疾病的人数是?
测试呈阳性但未患病的人数是?
测试呈阳性的总人数是?
在测试呈阳性的子集中,患病的人数的比例是 ?/? = ?,这是答案的一个近似。如果我们不是使用 1000 个假设的人,而是使用更多的人,那么近似值将更接近实际答案(我们使用贝叶斯定理计算出的答案)。
贝叶斯与全概率公式
应用贝叶斯定理时,一个经典的挑战是计算贝叶斯定理分母中的归一化常数 \(\p(E)\) 的概率。计算这个概率的一种常见策略是使用全概率公式。我们扩展的贝叶斯定理使用了全概率公式的简单版本:\(\p(E) = \p(E|F)\p(F) + \p(E|F^c) \p(F^c)\)。有时你可能需要更扩展的全概率公式 law of total probability:\(\p(E) = \sum_i\p(E|B_i)\p(B_i)\)。回想一下,这只有在事件 \(B_i\) 互斥且覆盖样本空间时才有效。
例如,假设我们正在尝试追踪一部电话,这部电话可能位于 \(n\) 个离散位置中的任何一个,并且我们有关于电话是否位于位置 \(B_i\) 的先验信念 \(\p(B_1) \dots \p(B_n)\)。现在我们获得了一些证据(例如来自特定基站的特定信号强度),我们称之为 \(E\),我们需要更新所有概率以成为 \(\p(B_i |E)\)。我们应该使用贝叶斯定理!
假设电话在位置 \(B_i\),观察到的概率 \(\p(E|B_i)\),这是专家可以提供给你的。在这种情况下,给定位置 \(B_i\) 的特定信号强度将由基站与位置 \(B_i\) 之间的距离决定。
由于我们假设电话必须在确切的一个位置,我们可以通过首先应用贝叶斯定理,然后应用全概率公式的通用版本来找到给定 \(E\) 的任何事件 \(B_i\) 的概率:
未知归一化常数
有时候我们想使用贝叶斯定理来更新信念,但我们不知道 \(E\) 的概率,\(\p(E)\)。希望并未完全丧失。这个术语被称为“归一化常数”,因为它与事件 \(B\) 是否发生无关。我们上面使用的解决方案是全概率公式:\(\p(E) = \p(E |B) \p(B) + \p(E|B\c)\p(B\c)\)。这允许我们计算 \(\p(E)\)。
这里是处理未知概率 \(\p(E)\) 的另一种策略。我们可以通过计算 \(\frac{\p(B|E)}{\p(B\c|E)}\) 的比值来使其抵消。这个比值告诉你,在给定 \(E\) 的情况下,\(B\) 发生的可能性比不发生 \(B\) 的可能性多多少倍:$$ \begin{align} \frac{\p(B|E)}{\p(B\c|E)} &= \frac{ \frac{\p(E|B)\p(B)}{\p(E)} }{ \frac{\p(E|B\c)\p(B\c)}{\p(E)} } && \text{将贝叶斯定理应用于两个项} \ &= \frac{ \p(E|B)\p(B) }{ \p(E|B\c)\p(B\c) } && \text{项 \(\p(E)\) 相互抵消} \end{align} $$
对数概率
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part1/log_probabilities/
对数概率 \(\log \p(E)\) 简单来说就是对数函数应用于概率。例如,如果 \(\p(E) = 0.00001\),那么 \(\log \p(E) = \log(0.00001) \approx -11.51\)。注意,在这本书中,默认的底数是自然底数 \(e\)。对数概率之所以是数字概率的一个基本工具,有许多原因:(a) 计算机在表示非常小的数时可能相当有限;(b) 对数有将乘法转换为加法的神奇能力,而计算机在加法上要快得多。
你可能已经注意到上述例子中的对数产生了负数。回想一下,\(\log b = c\),其中隐含的自然底数 \(e\) 与陈述 \(e^c = b\) 是相同的。它说 \(c\) 是 \(e\) 的指数,产生 \(b\)。如果 \(b\) 是介于 0 和 1 之间的数,你应该将 \(e\) 提到什么幂次才能产生 \(b\)?如果你将 \(e⁰\) 提到幂次,它会产生 1。要产生一个小于 1 的数,你必须将 \(e\) 提到一个小于 0 的幂次。这就是说:如果你对一个概率取对数,结果将是一个负数。$$ \begin{align} 0 &\leq \p(E) \leq 1 && \text{概率的第一公理} \ -\infty &\leq \log \p(E) \leq 0 && \text{对数概率的规则} \end{align} $$
产品成为加法
概率 \(\p(E)\) 和 \(\p(F)\) 的乘积在对数空间中变为加法:$$ \log (\p(E) \cdot \p(F) ) = \log \p(E) + \log \p(F) $$
这特别方便,因为计算机在加法上比在乘法上更有效率。它还可以使推导更容易书写。这在你需要将许多概率相乘时尤其正确:$$ \log \prod_i \p(E_i) = \sum_i \log \p(E_i) $$
表示非常小的概率
计算机具有处理许多事件并考虑非常不可能的情况的概率的能力。虽然计算机能够完成所有的计算,但浮点表示意味着计算机不能以完美的精度表示小数。实际上,Python 无法表示小于 2.225e-308 的任何概率。另一方面,那个数字的对数是 -307.652,对计算机来说很容易存储。
你为什么会关心这个问题呢?在数字世界中,计算机经常被要求对数据的概率进行推理,或者对整个数据集进行推理。例如,也许你的数据是单词,你想要推理一个特定的作者写出这些特定单词的概率。虽然这个概率非常小(我们谈论的是一个精确的文档),但它可能比不同作者用特定单词写出特定文档的概率要大。对于这类小的概率,如果你使用计算机,你将需要使用对数概率。
多次抛硬币
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part1/many_flips/
在本节中,我们将考虑\(n\)次抛硬币时正面出现的次数。这个思想实验将成为大量概率理论的基础!它远远超出了抛硬币的范畴。
假设一枚硬币正面出现的概率为\(p\)。大多数硬币是公平的,因此正面出现的概率为\(p=0.5\)。有许多事件,抛硬币是一个很好的类比,但\(p\)的值不同,所以让我们将\(p\)作为一个变量。你可以尝试在这里模拟抛硬币。请注意,H代表正面,T代表反面。我们认为每一枚硬币都是独特的:
硬币抛掷模拟器
抛掷次数 \(n\): 正面概率 \(p\): 模拟器结果:总正面次数: py`Using the math in this chapter we will be able to show that the probability of getting exactly heads (when the probability of heads on each flip is ) = . Specifically in this chapter: 1. Warmups: We calculate the probability of a few exact outcomes. 2. Exactly $k$ heads. We derive the general formula. 3. More than $k$ heads. We explore this interesting related problem. ## Warmups In all of these warmups we are going to consider the probability of different outcomes when you flip a coin $n$ times and each time the probability of heads is $p$. In each solution we will consider the case where $n=10$ and $p=0.6$. **What is the probability that all $n$ flips are heads?** This question is asking what is the probability of getting the outcome: H, H, H, H, H, H, H, H, H, H py Where each flip lands in heads (`H`). Each coin flip is independent so we can use the rule for probability of **and** with independent events. As such, the probability of $n$ heads is $p$ multiplied by itself $n$ times: $p^n$. If $n=10$ and $p=0.6$ then the probability of $n$ heads = $p^n = 0.6^{10} \approx$ 0.006. **What is the probability that all $n$ flips are tails?** Lets say $n=10$ this question is asking what is the probability of getting: T, T, T, T, T, T, T, T, T, T py Each coin flip is independent. The probability of tails on any coin flip is $1-p$. Again, since the coin flips are independent, the probability of tails $n$ times on $n$ flips is $(1-p)$ multiplied by itself $n$ times: $(1-p)^n$. If $n=10$ and $p=0.6$ then the probability of $n$ tails is around 0.0001. **First $k$ heads then $n-k$ tails** Lets say $n=10$ and $k=4$, this question is asking what is the probability of getting: H, H, H, H, T, T, T, T, T, T py The coins are still independent! The first $k$ heads occur with probability $p^k$ the run of $n-k$ tails occurs with probability $(1-p)^{n-k}$. The probability of $k$ heads then $n-k$ tails is the product of those two terms: $p^k \cdot (1-p)^{n-k}$ ## Exactly $k$ heads Next lets try to figure out the probability of exactly $k$ heads in the $n$ flips. Importantly we don't care where in the $n$ flips that we get the heads, as long as there are $k$ of them. Note that this question is different than the question of first $k$ heads and then $n-k$ tails which requires that the $k$ heads come first! That particular result does generate exactly $k$ coin flips, but there are others. There are many others! Lets ask the computer to list the ways we could generate exactly $k=4$ heads within $n=10$ coin flips. The output region is scrollable: (H, H, H, H, T, T, T, T, T, T) (H, H, H, T, H, T, T, T, T, T) (H, H, H, T, T, H, T, T, T, T) (H, H, H, T, T, T, H, T, T, T) (H, H, H, T, T, T, T, H, T, T) (H, H, H, T, T, T, T, T, H, T) (H, H, H, T, T, T, T, T, T, H) (H, H, T, H, H, T, T, T, T, T) (H, H, T, H, T, H, T, T, T, T) (H, H, T, H, T, T, H, T, T, T) (H, H, T, H, T, T, T, H, T, T) (H, H, T, H, T, T, T, T, H, T) (H, H, T, H, T, T, T, T, T, H) (H, H, T, T, H, H, T, T, T, T) (H, H, T, T, H, T, H, T, T, T) (H, H, T, T, H, T, T, H, T, T) (H, H, T, T, H, T, T, T, H, T) (H, H, T, T, H, T, T, T, T, H) (H, H, T, T, T, H, H, T, T, T) (H, H, T, T, T, H, T, H, T, T) (H, H, T, T, T, H, T, T, H, T) (H, H, T, T, T, H, T, T, T, H) (H, H, T, T, T, T, H, H, T, T) (H, H, T, T, T, T, H, T, H, T) (H, H, T, T, T, T, H, T, T, H) (H, H, T, T, T, T, T, H, H, T) (H, H, T, T, T, T, T, H, T, H) (H, H, T, T, T, T, T, T, H, H) (H, T, H, H, H, T, T, T, T, T) (H, T, H, H, T, H, T, T, T, T) (H, T, H, H, T, T, H, T, T, T) (H, T, H, H, T, T, T, H, T, T) (H, T, H, H, T, T, T, T, H, T) (H, T, H, H, T, T, T, T, T, H) (H, T, H, T, H, H, T, T, T, T) (H, T, H, T, H, T, H, T, T, T) (H, T, H, T, H, T, T, H, T, T) (H, T, H, T, H, T, T, T, H, T) (H, T, H, T, H, T, T, T, T, H) (H, T, H, T, T, H, H, T, T, T) (H, T, H, T, T, H, T, H, T, T) (H, T, H, T, T, H, T, T, H, T) (H, T, H, T, T, H, T, T, T, H) (H, T, H, T, T, T, H, H, T, T) (H, T, H, T, T, T, H, T, H, T) (H, T, H, T, T, T, H, T, T, H) (H, T, H, T, T, T, T, H, H, T) (H, T, H, T, T, T, T, H, T, H) (H, T, H, T, T, T, T, T, H, H) (H, T, T, H, H, H, T, T, T, T) (H, T, T, H, H, T, H, T, T, T) (H, T, T, H, H, T, T, H, T, T) (H, T, T, H, H, T, T, T, H, T) (H, T, T, H, H, T, T, T, T, H) (H, T, T, H, T, H, H, T, T, T) (H, T, T, H, T, H, T, H, T, T) (H, T, T, H, T, H, T, T, H, T) (H, T, T, H, T, H, T, T, T, H) (H, T, T, H, T, T, H, H, T, T) (H, T, T, H, T, T, H, T, H, T) (H, T, T, H, T, T, H, T, T, H) (H, T, T, H, T, T, T, H, H, T) (H, T, T, H, T, T, T, H, T, H) (H, T, T, H, T, T, T, T, H, H) (H, T, T, T, H, H, H, T, T, T) (H, T, T, T, H, H, T, H, T, T) (H, T, T, T, H, H, T, T, H, T) (H, T, T, T, H, H, T, T, T, H) (H, T, T, T, H, T, H, H, T, T) (H, T, T, T, H, T, H, T, H, T) (H, T, T, T, H, T, H, T, T, H) (H, T, T, T, H, T, T, H, H, T) (H, T, T, T, H, T, T, H, T, H) (H, T, T, T, H, T, T, T, H, H) (H, T, T, T, T, H, H, H, T, T) (H, T, T, T, T, H, H, T, H, T) (H, T, T, T, T, H, H, T, T, H) (H, T, T, T, T, H, T, H, H, T) (H, T, T, T, T, H, T, H, T, H) (H, T, T, T, T, H, T, T, H, H) (H, T, T, T, T, T, H, H, H, T) (H, T, T, T, T, T, H, H, T, H) (H, T, T, T, T, T, H, T, H, H) (H, T, T, T, T, T, T, H, H, H) (T, H, H, H, H, T, T, T, T, T) (T, H, H, H, T, H, T, T, T, T) (T, H, H, H, T, T, H, T, T, T) (T, H, H, H, T, T, T, H, T, T) (T, H, H, H, T, T, T, T, H, T) (T, H, H, H, T, T, T, T, T, H) (T, H, H, T, H, H, T, T, T, T) (T, H, H, T, H, T, H, T, T, T) (T, H, H, T, H, T, T, H, T, T) (T, H, H, T, H, T, T, T, H, T) (T, H, H, T, H, T, T, T, T, H) (T, H, H, T, T, H, H, T, T, T) (T, H, H, T, T, H, T, H, T, T) (T, H, H, T, T, H, T, T, H, T) (T, H, H, T, T, H, T, T, T, H) (T, H, H, T, T, T, H, H, T, T) (T, H, H, T, T, T, H, T, H, T) (T, H, H, T, T, T, H, T, T, H) (T, H, H, T, T, T, T, H, H, T) (T, H, H, T, T, T, T, H, T, H) (T, H, H, T, T, T, T, T, H, H) (T, H, T, H, H, H, T, T, T, T) (T, H, T, H, H, T, H, T, T, T) (T, H, T, H, H, T, T, H, T, T) (T, H, T, H, H, T, T, T, H, T) (T, H, T, H, H, T, T, T, T, H) (T, H, T, H, T, H, H, T, T, T) (T, H, T, H, T, H, T, H, T, T) (T, H, T, H, T, H, T, T, H, T) (T, H, T, H, T, H, T, T, T, H) (T, H, T, H, T, T, H, H, T, T) (T, H, T, H, T, T, H, T, H, T) (T, H, T, H, T, T, H, T, T, H) (T, H, T, H, T, T, T, H, H, T) (T, H, T, H, T, T, T, H, T, H) (T, H, T, H, T, T, T, T, H, H) (T, H, T, T, H, H, H, T, T, T) (T, H, T, T, H, H, T, H, T, T) (T, H, T, T, H, H, T, T, H, T) (T, H, T, T, H, H, T, T, T, H) (T, H, T, T, H, T, H, H, T, T) (T, H, T, T, H, T, H, T, H, T) (T, H, T, T, H, T, H, T, T, H) (T, H, T, T, H, T, T, H, H, T) (T, H, T, T, H, T, T, H, T, H) (T, H, T, T, H, T, T, T, H, H) (T, H, T, T, T, H, H, H, T, T) (T, H, T, T, T, H, H, T, H, T) (T, H, T, T, T, H, H, T, T, H) (T, H, T, T, T, H, T, H, H, T) (T, H, T, T, T, H, T, H, T, H) (T, H, T, T, T, H, T, T, H, H) (T, H, T, T, T, T, H, H, H, T) (T, H, T, T, T, T, H, H, T, H) (T, H, T, T, T, T, H, T, H, H) (T, H, T, T, T, T, T, H, H, H) (T, T, H, H, H, H, T, T, T, T) (T, T, H, H, H, T, H, T, T, T) (T, T, H, H, H, T, T, H, T, T) (T, T, H, H, H, T, T, T, H, T) (T, T, H, H, H, T, T, T, T, H) (T, T, H, H, T, H, H, T, T, T) (T, T, H, H, T, H, T, H, T, T) (T, T, H, H, T, H, T, T, H, T) (T, T, H, H, T, H, T, T, T, H) (T, T, H, H, T, T, H, H, T, T) (T, T, H, H, T, T, H, T, H, T) (T, T, H, H, T, T, H, T, T, H) (T, T, H, H, T, T, T, H, H, T) (T, T, H, H, T, T, T, H
维度灾难
在机器学习中,就像计算机科学的许多领域一样,经常涉及到高维点,高维空间具有一些令人惊讶的概率性质。
随机值 \(X_i\) 是一个均匀分布的值(Uni(0, 1))。
维度为 \(d\) 的随机点是一个包含 \(d\) 个随机值的列表:\([X_1 \dots X_d]\)。

随机值 \(X_i\) 如果小于 0.01 或大于 0.99,则认为它接近边缘。随机值接近边缘的概率是多少?
设 \(E\) 为随机值接近边缘的事件。\(P(E) = P(X_i < 0.01) + P(X_i > 0.99) = 0.02\)
维度为 \(3\) 的随机点 \([X_1, X_2, X_3]\) 如果其任意一个值接近边缘,则认为它接近边缘。一个 3 维的点接近边缘的概率是多少?
这个事件等价于点的所有维度都不接近边缘的补集,即:\(1 - (1 - P(E))³ = 1 - 0.98³ \approx 0.058\)
维度为 \(100\) 的随机点 \([X_1, \dots X_{100}]\) 如果其任意一个值接近边缘,则认为它接近边缘。一个 100 维的点接近边缘的概率是多少?
同样地,结果是:\(1 - (1 - P(E))^{100} = 1 - 0.98^{100} \approx 0.867\) 高维点有许多其他现象:例如,点之间的欧几里得距离开始收敛。
Enigma Machine
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/enigma/
最早的计算机之一是在二战期间建造的,用于破解纳粹的“Enigma”密码。这是一个难题,因为用于制作秘密密码的“Enigma”机器有如此多的独特配置。纳粹每天都会选择一个新的配置,如果盟军能够找出每天的配置,他们就能阅读所有敌人的信息。一种解决方案是尝试所有配置,直到找到一个可以产生可读德语的配置。这引发了一个问题:有多少种配置?

二战期间建造的用于搜索不同 Enigma 配置的机器。
Enigma 机器有三个转子。每个转子可以设置为 26 个不同位置中的一个。三个转子有多少种独特的配置?
使用计数步骤规则:\(26 \cdot 26 \cdot 26 = 26³ = 17,576\)。
更重要的是,这台机器有一个插板,可以交换字母的电信号。在插板上,线可以连接任何一对字母以产生新的配置。线不能连接到自身。线是不可区分的。从‘K’到‘L’的线与从‘L’到‘K’的线是不可区分的。我们将逐步考虑任意数量的线。

Enigma 插板。由于电气原因,每个字母有两个插孔,每个插头有两个触点。从语义上讲,这相当于每个字母一个插头位置。
一根线: 有多少种方式可以放置恰好一根连接两个字母的线?
从 26 个字母中选择 2 个是一个组合。使用组合公式:\({26 \choose 2} = 325\)。
两根线: 有多少种方式可以放置恰好两根线?回想一下,线不被认为是可区分的。每个字母最多只能连接一根线,因此你不能有一根线连接‘K’到‘L’,另一根线连接‘L’到‘X’。
放置第一根线有\({26 \choose 2}\)种方式,放置第二根线有\({24 \choose 2}\)种方式。然而,由于线是不可区分的,我们双倍计算了每一种可能性。因为每一种可能性都被计算了两次,所以我们应该除以 2:$$ \text{总数} = \frac{ {26 \choose 2} \cdot {24 \choose 2} }{2} = 44,850 $$
三根线: 有多少种方式可以放置恰好三根线?
放置第一根线有 \({26 \choose 2}\) 种方式,放置第二根线有 \({24 \choose 2}\) 种方式。现在放置第三根线有 \({22 \choose 2}\) 种方式。然而,由于线是不可区分的,并且我们的步数计数隐含地将其视为可区分的,所以我们已经对每种可能性进行了重复计数。每个三个字母的组合被重复计数了多少次?这是三个不同对象的排列数:3! $$ \text{Total} = \frac{ {26 \choose 2} \cdot {24 \choose 2} \cdot {22 \choose 2}}{3!} = 3,453,450 $$ 另一种得到相同答案的方法是:首先选择要配对的字母,然后进行配对。选择正在布线的字母有 \({26 \choose 6}\) 种方式。然后我们需要配对这些字母。考虑配对字母的一种方法是首先对它们进行排列(6!种方式),然后配对前两个字母,然后是下一对,再下一对,依此类推。例如,如果我们的字母是 {A,B,C,D,E,F},并且我们的排列是 BADCEF,那么这对应于将 B 连接到 A,D 连接到 C,E 连接到 F。我们过度计数了很多。首先,由于配对顺序不重要,我们过度计数了 3!倍。其次,由于每个配对内字母的顺序不重要,我们过度计数了\(2³\)倍。$$ \text{Total} = {26 \choose 6} \frac{6!}{3! \cdot 2³} = 3,453,450 $$
任意线:放置 \(k\) 根线,从而连接 \(2 \cdot k\) 个字母,有多少种方式?在二战期间,德国人总是使用固定数量的线。但有一种担忧是,如果他们发现恩尼格玛机被破解,他们可以简单地使用任意数量的线。
使用恰好 \(i\) 根线的组合方式与使用恰好 \(j\) 根线的组合方式互斥,如果 \(i \neq j\)(因为没有任何一种方式可以同时使用恰好 \(i\) 和 \(j\) 根线)。因此,\(\text{Total} = \sum_{k=0}^{13} \text{Total}_k\),其中 Total\(_k\) 是使用恰好 \(k\) 根线的组合方式的数量。继续我们关于使用确切数量的线的逻辑:$$ \text{Total}k = \frac{\prod^{k} {28 - 2i \choose 2} }{k!} $$ 将所有内容整合起来:$$ \begin{align} \text{Total} &= \sum_{k=0}^{13} \text{Total}k \ &= \sum^{13} \frac{\prod_{i=1}^{k} {28 - 2i \choose 2} }{k!} \ &= 532,985,208,200,576 \end{align} $$
在二战中实际使用的恩尼格玛机有 10 根线连接 20 个字母,允许有 150,738,274,937,250 种独特的配置。恩尼格玛机还从 5 个转子集中选择了 3 个转子,这又增加了\({5 \choose 3} = 60\)的另一个因子。
当你将设置转子方式的数量与设置插线板的方式数量相加,你就能得到恩尼格玛机配置的总数。将这个过程视为两个步骤,我们可以将之前计算出的两个数字相乘:17,576 · 150,738,274,937,250 · 60 \(\approx 159 \cdot 10^{18}\) 唯一设置。因此,艾伦·图灵和他的团队在布莱奇利公园继续建造了一台可以帮助测试许多配置的机器——这是第一台计算机的前身。
偶然
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/serendipity/
“偶然”这个词来源于波斯童话故事《三个幸运王子》
问题
与朋友偶然相遇的概率是多少?想象你生活在一个拥有大量普通人口(例如,有 17,000 名学生的斯坦福大学)。人口中有一小部分是你的朋友。如果你从这个人口中看到一些人,你遇到至少一个朋友的机会有多大?假设从人口中看到每个人都是等可能的。
答案
你看到至少一个朋友的概率是:
术语
首先,让我们定义一些有用的术语:
\(p\) = 总人口 = \(s\) = 看到的人数 = \(f\) = 朋友数量 =
方法
由于看到 \(s\) 个人的每一种方式都是等可能的,我们可以使用“等可能事件”概率计算方法:
\(P(E) = \frac{|E|}{|S|}\)
其中 \(S\) 是样本集(所有看到 \(s\) 个人的方式)和 \(E\) 是事件集(所有看到 \(s\) 个人的方式,其中至少有一个人是朋友)。
解决这个问题的方法之一是直接计算你看到 1 个或更多朋友的所有方式。这很困难。你需要计算你看到正好一个朋友的方式,然后是正好两个朋友,以此类推。计算你没有看到朋友的方式要容易得多。如果我们能计算出看到零个朋友的概率,我们的答案就是那个数字减去 1。
没有看到朋友的概率
让样本空间 (\(S\)) 是你可以看到 \(s\) 个人的方式集合。样本空间的大小是:总人口中选择看到的人数。
事件空间 (\(E\)) 是你可以看到没有朋友的方式集合。事件空间的大小是:非朋友的数量(即人口 - 朋友)中选择看到的人数。
因此,没有看到朋友的概率是:
$\text{prob(not seen)} = \frac{ \left( {\begin{array}{{20}c} p - f \ s \ \end{array}} \right) } { \left( {\begin{array}{c} p \ s \ \end{array}} \right) } $
看到朋友的概率
现在,你看到至少一个朋友的概率是 1 减去你没有看到朋友的概率。
$\text{prob(seen)} = 1 - \frac{ \left( {\begin{array}{{20}c} p - f \ s \ \end{array}} \right) } { \left( {\begin{array}{c} p \ s \ \end{array}} \right) } $
那等于
这不是令人惊讶的吗?
随机洗牌
这里有一个令人惊讶的声明。如果你将一副标准牌洗七次,几乎可以肯定地说,牌的确切排序从未被见过!哇!让我们来探索一下。我们可以正式地提出这个问题:在从时间开始以来的\(n\)次洗牌中,你的排序是独一无二的概率是多少?
52 张牌的排序
我们的冒险从一个简单的观察开始:有非常多的方式来排序 52 张牌。但标准牌组的确切独特排序有多少呢?
有\(52!\)种方式来排序一副标准牌。由于每张牌都是独一无二的(每张牌都有独特的花色和数值组合),因此我们可以应用不同对象的排列规则:$$\begin{align} \text{Num. Unique Orderings} &= 52! \end{align}$$ 这是一个巨大的数字。\(52!\)等于 80658175170943878571660636856403766975289505440883277824000000000000。
那超过了\(8 \cdot 10^{67}\)。回想一下,据估计,可观测宇宙中有大约\(10^{82}\)个原子。
已见洗牌次数
当然,我们不知道\(n\)的值是多少——没有人计算过人类洗牌的次数。我们可以提出一个合理的过高估计。假设\(k\) = 70 亿人自从发明牌以来每秒洗一次牌。扑克牌可能最早在 9 世纪的唐朝被发明。据我所知,最古老的 52 张牌是伊斯坦布尔的托普卡比牌组,大约在公元 15 世纪。这样,我们的过高估计是\(n = s \cdot k \approx 10^{20}\)。
接下来,让我们计算那些\(n\)次历史洗牌中没有一次与你特定的 52 张牌排序相匹配的概率。有两种有效的方法:使用等可能结果和使用独立性。
等可能结果
一种计算你 52 张牌的排序在历史上独一无二概率的方法是使用等可能结果. 考虑所有可能排序的所有已发牌的样本空间。这个集合中的每个结果都将有\(n\)个牌组,每个牌组都有自己的排序。因此,样本空间的大小是\(|S| = (52!)^{n}\)。注意,样本空间中的所有结果都是等可能的——我们可以通过对称性来说服自己——没有任何排序比其他排序更有可能。从那个样本空间中,我们想要计算没有排序与你匹配的结果数量。有\(52! - 1\)种方式来排序 52 张不是你的牌。我们可以通过步骤构建事件空间:对于历史上的每次\(n\)次洗牌,选择那些\(52! - 1\)种排序中的任意一种。因此,\(|E| = (52!-1)^n\)。
设 \(U\) 为你 52 张牌的特定排序是唯一的 $$\begin{align} \P(U) &= \frac{|E|}{|S|} && \text{等可能的结果}\ &= \frac{(52!-1)n}{(52!)n} \ &= \frac{(52!-1){10{20}}}{(52!){10{20}}} && n = 10^{20} \ &= \Big(\frac{52!-1}{52!}\Big) {10{20}} \end{align}$$ 理论上这是正确的答案,但这些数字如此之大,以至于不清楚如何评估它,即使使用计算机。一个好主意是首先计算对数概率:$$\begin{align} \log \P(U) &= \log \Big[\Big(\frac{52!-1}{52!}\Big) {10{20}}\Big] \ &= 10^{20} \cdot \log \Big(\frac{52!-1}{52!}\Big) \ &= 10^{20} \cdot \Big[ \log (52!-1) - \log(52!) \Big] \ &= 10^{20} \cdot (-1.24 \times 10^{-68}) \ &= -1.24 \times 10^{-48} \end{align}$$ 现在如果我们取消对数(并使用 \(e^{-x}\) 对于小的 \(x\) 值非常接近 \(1 - x\) 的这一事实):$$\begin{align} \P(U) &= e^{-1.24 \times 10^{-48}} \ &\approx 1 - 1.24 \times 10^{-48} \end{align}$$
因此,你特定排序是唯一的概率非常接近于 \(1\),而其他人得到相同排序的概率,\(1 - P(U)\),是一个小数点后有 47 个零的数字。可以肯定地说,你的排序是唯一的。
在 python 中,你可以使用一个名为 decimal 的特殊库来计算非常小的概率。以下是如何计算 \(\log \frac{52!-1}{52!}\) 的一个例子:
from decimal import *
import math
n = math.pow(10, 20)
card_perms = math.factorial(52)
denominator = card_perms
numerator = card_perms - 1
# decimal library because these are tiny numbers
getcontext().prec = 100 # increase precision
log_numer = Decimal(numerator).ln()
log_denom = Decimal(denominator).ln()
log_pr = log_numer - log_denom
# approximately -1.24E-68
print(log_pr)
我们还可以使用二项式近似来检查我们的结果。
对于小的 \(x\) 值,\((1 - x)^n\) 的值非常接近于 \(1 - nx\),这为我们计算 \(P(U)\) 提供了另一种方法:$$\begin{align} \P(U) &= \frac{(52!-1)n}{(52!)n} \ &= \Big(1 - \frac{1}{52!}\Big){10{20}} && n = 10^{20} \ &\approx 1 - \frac{10^{20}}{52!} \ &\approx 1 - 1.24 \times 10^{-48} \end{align}$$
这与使用 python 的 decimal 库得到的结果一致。
独立性
另一种方法是定义事件 \(D_i\),即第 \(i\) 张牌的洗牌不同于你的。因为我们假设每次洗牌都是独立的,所以 \(P(U) = \prod_i P(D_i)\)。\((D_i)\) 的概率是多少?如果你考虑 \(D_i\) 的样本空间,它是以 52!种方式排序一副牌。事件空间是除了你的排序之外的 52! - 1 种结果。
计算放置边的方案:现在让我们向网络中添加随机边!假设相同的网络(具有 10 个节点)有 12 条随机边。如果每对节点等可能地有一条边,我们有多少种独特的方式来选择 12 条边的位置?
令 \(k = \binom{10}{2}\) 为边的可能位置数,我们有 12 条不同的(无向)边,所以有 \(\binom k {12}\) 种放置边的方案。
节点度数的概率:现在我们有一个随机生成的图,让我们来探索节点的度数!在具有 10 个节点和 12 条边的相同网络中,随机选择一个节点。我们的节点恰好具有度数 \(i\) 的概率是多少?注意 \(0 \leq i \leq 9\)。回想一下,由于图中只有 10 个节点,所以从我们选择的节点只能连接到 9 个节点。
令 \(E\) 为我们的节点恰好有 \(i\) 个连接的事件。我们将首先使用 \(|E| / |S|\) 来计算 \(P(E)\) 的分布。样本空间是选择 12 条边的方案集合,事件空间是选择边的方案集合,使得我们恰好选择了与当前节点(有 9 个可能连接的边)相连的 \(i\) 条边。为了构建事件空间 \(E\),我们可以考虑一个两步过程:
-
从与我们的节点相连的 9 个可能边位置中选择 \(i\) 条边。
-
选择剩余的 \(12 - i\) 条边的位置。这些边可以连接到除了与我们的节点相连的 9 条边之外的任何 \(k\) 个位置。
因此答案是 $$\begin{align} P(E) &= \frac{|E|}{|S|} \ &= \frac{\binom{9}{i} \binom{k-9}{12-i}}{\binom k {12}}. \end{align}$$
集合多样性(基尼不纯度)
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/diversity_shapes/
在这个问题中,我们将询问一个简单的问题:从集合中选择两个对象时,它们不同的概率是多少。这个统计量,正式称为基尼不纯度,在随机森林算法和社会科学中都有应用。这是 2023 年秋季斯坦福期中考试的问题。
a) 考虑以下形状集合。如果你选择两个形状带替换,两个形状相同的概率是多少?注意,可能得到两个三角形:在你选择第一个三角形后,将其放回形状集合中,它可以再次被选择。

定义样本空间为选择两个形状的 49 种不同结果(第一个形状有 7 种选择,第二个形状也有 7 种选择)。注意,在我们构建样本空间的过程中,我们选择了将形状视为彼此完全不同。因此,\(S\)中的结果是一个不同形状的有序元组。例如,\(S\)中的一个结果是(Shape\(_4\),Shape\(_2\))。\(|S| = 7 \times 7 = 49\)。注意,\(S\)中的所有结果都是等可能的(这就是我们为什么将形状视为不同的原因)。
令\(E\)为\(S\)中两个形状匹配的子集,令\(A\)为有两个正方形的事件,令\(B\)为有两个三角形的事件。注意,\(A\)和\(B\)是互斥的。根据计数步骤规则,\(|A| = 6 \cdot 6 = 36\),因为创建事件\(A\)的结果需要两个步骤:选择一个正方形然后选择另一个正方形。同样地,\(|B| = 1 \cdot 1 = 1\)。
b) 考虑以下形状集合。如果你选择两个形状带替换,两个形状不同的概率是多少?注意,上一个问题是询问两个形状相同的概率。两个不同物品的概率被称为集合的基尼不纯度。

定义相同的样本空间为选择两个形状的 49 种不同结果(第一个形状有 7 种选择,第二个形状也有 7 种选择)。\(|S| = 7 \times 7 = 49\)。注意,\(S\)中的所有结果都是等可能的。
令\(E\)为\(S\)中两个形状匹配的子集。
令\(A\)为有两个正方形的集合事件。
令\(B\)为有两个三角形的事件。
设 \(C\) 为有两个星星的事件。注意 \(A\)、\(B\) 和 \(C\) 是互斥的。根据计数步骤规则
\(|A| = 4 \cdot 4 = 16\)
\(|B| = 2 \cdot 2 = 4\)
\(|C| = 1 \cdot 1 = 1\)
决策树中的基尼不纯度
注意:这个下一个问题与上面的问题并没有显著不同。这个问题的目的是向你展示基尼不纯度的概念如何与决策树相联系。
决策树(及其大哥随机森林)是一些最流行的分类人工智能算法,它们不使用深度神经网络。它们是基于数据,节点到节点构建的。一旦构建,它们就可以用来做出分类决策。在构建决策树时的关键决策是决定下一个要添加哪个节点。做出这个决定的一种方法是通过选择新节点,使得最终在决策树末尾聚集在一起的形状的基尼不纯度最大程度地减少。

此外:这个特定的节点是根据一个值(这与形状略有关系)来分割形状的。值为 0 的形状进入左子节点,值为 1 的形状进入右子节点。
c) 考虑上图中的节点。设 \(G_L\) 为从左侧形状中选择两个形状不同的概率(基尼不纯度),设 \(G_R\) 为从右侧形状中选择两个形状不同的概率(再次是基尼不纯度)。max(\(G_L, G_R\)) 的值是多少?我们只使用形状类型来计算基尼不纯度。这个值代表用于在左右节点之间排序的特征,在这个问题中可以忽略。
首先,让我们将一组形状的 \(G\) 的计算进行推广。设 \(n\) 为该集合中形状的数量。设 \(n_i\) 为集合中类型为 \(i\) 的形状的数量。计算两个共享区域相同与两个形状不同概率的问题将比计算两个形状不同概率的问题更容易。如果我们设置样本空间 \(S\) 为所有选择两个形状的方式的集合(将每个形状视为不同的,并将选择视为有序的)。事件空间 \(E\) 然后是形状相同的事件的子集。因为选择相同类型的形状与选择另一种类型的相同形状是互斥的,我们可以通过计算每种类型形状的两个形状相同的概率并将它们相加来计算两个形状相同的概率:$$ $$\begin{align} G &= 1- P(\text{same})\ &= 1 - \frac{|E|}{|S|}\ &= 1 - \frac{\sum_{i}^n n_i²}{|S|}\ \end{align}$$ $$
$ G_L = 1 - \frac{2² + 5²}{7²}$ 和 \(G_R = 1 - \frac{2² + 1²}{3²}\). 对于那些好奇的人来说,\(G_R\) 是这两个中的较大者。
进一步学习
注意:在中期考试中,学生被要求计算“期望”基尼系数,而不是最大值。这使用了期望,一个我们将在下一节学习的概念。我们还要求计算泊松随机变量的基尼不纯度,这是一个来自第三部分的概念。
细菌进化
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/bacteria_evolution/
现代生活的美妙之处在于我们有抗生素来杀死细菌感染。然而,我们只有有限数量的抗生素药物,而细菌正在进化以对我们抗生素产生抵抗力。在这个例子中,我们将使用概率来理解细菌中抗生素耐药性的进化。
假设你肠道中有 100 万感染性细菌,其中 10%的细菌发生了使它们对抗生素略微具有抵抗力的突变。你服用了一疗程的抗生素。具有突变基因的细菌存活的概率是 20%,而没有突变基因的细菌存活的概率是 1%。
随机选择的细菌在抗生素中存活的概率是多少?
设 \(E\) 为细菌存活的事件,设 \(M\) 为细菌发生突变的事件。根据总概率定律(LOTP):
存活的细菌具有突变基因的概率是多少?
使用上一节中的相同事件,这个问题要求的是 \(\p(M | E)\)。我们没有给出这个方向的条件概率,而是知道 \(P(E|M)\)。这种情况下需要用到贝叶斯定理:
在抗生素疗程结束后,69%的细菌具有突变基因,比之前的 10%显著增加。如果这个种群被允许繁殖,你将拥有一个对抗生素具有高度抵抗力的细菌群体!
第二部分:随机变量
随机变量
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part2/rvs/
随机变量(RV)是一个以概率取值的变量,它们是概率理论中最重要的结构之一。你可以把 RV 视为编程语言中的一个变量,实际上随机变量对概率理论的重要性与变量对编程的重要性一样。随机变量取值,有类型,并且在其适用范围内有域。
随机变量与我们所建立的所有基础理论都有关。我们可以定义当随机变量取满足数值测试的值时发生的事件(例如,变量是否等于 5,变量是否小于 8)。
让我们来看一个随机变量的第一个例子。假设我们抛三枚公平的硬币。我们可以定义一个随机变量 Y,表示三枚硬币上“正面”的总数。我们可以使用以下符号来询问 Y 取不同值的概率:
| 设 \(Y\) 为三次抛硬币的正面数 |
|---|
| \(\p(Y = 0)\) = 1/8 |
| \(\p(Y = 1)\) = 3/8 |
| \(\p(Y = 2)\) = 3/8 |
| \(\p(Y = 3)\) = 1/8 |
| \(\p(Y ≥ 4)\) = 0 |
尽管我们为随机变量和事件使用相同的符号(两者都使用大写字母),但它们是不同的概念。事件是一个场景,随机变量是一个对象。随机变量取特定值(或值范围)的场景是一个事件。当可能时,我将尝试使用字母 E、F、G 表示事件,用 X、Y、Z 表示随机变量。
使用随机变量是一种方便的符号技术,有助于分解问题。存在许多不同类型的随机变量(指示符、二元、选择、伯努利等)。随机变量类型的主要两大类是离散型和连续型。离散随机变量只能取整数值。连续随机变量可以取小数值。我们将通过离散随机变量来发展我们的直觉,然后介绍连续型。
随机变量的性质
随机变量有许多性质,其中一些我们将深入探讨。以下是一个简要总结。每个随机变量都有:
| 属性 | 符号示例 | 描述 |
|---|---|---|
| 意义 | 随机变量的语义描述 | |
| 符号 | \(X\) | 用于表示随机变量的字母 |
| 支持集或值域 | \(\{0, 1, \dots, 3\}\) | 随机变量可以取的值 |
| 分布函数(PMF 或 PDF) | \(\P(X=x)\) | 一个函数,将 RV 可以取的值映射到可能性。 |
| 期望 | \(\E[X]\) | 加权平均值 |
| 方差 | \(\var(X)\) | 测量分散程度的指标 |
| 标准差 | \(\std(X)\) | 方差的平方根 |
| 频率 | 随机变量的最可能值 |
你应该设定一个目标,深入理解这些属性的含义。除了上表中的属性之外,还有许多其他属性:如 熵、中位数、偏度、峰度。
随机变量与事件
随机变量和事件是两个不同的概念。事件是实验的一个结果,或一组结果。随机变量更像是实验——它最终会得到一个结果。概率是关于事件的,所以如果你想在随机变量的上下文中谈论概率,你必须构造一个事件。你可以使用任何关系运算符:<, ≤, >, ≥, =, 或 ≠(不等于)来构造事件。这类似于编码,你可以使用关系运算符从数字创建布尔表达式。
让我们继续我们的随机变量 \(Y\) 的例子,它代表三次抛硬币中正面的数量。以下是使用变量 \(Y\) 的一些事件:
| 事件 | 含义 | 概率陈述 |
|---|---|---|
| \(Y= 1\) | \(Y\) 取值为 1(出现了一次正面) | \(\p(Y=1)\) |
| \(Y< 2\) | \(Y\) 取值为 0 或 1(注意这个 \(Y\) 不能是负数) | \(\p(Y<2)\) |
| \(X > Y\) | \(X\) 取的值大于 \(Y\) 取的值。 | \(\p(X>Y)\) |
| \(Y= y\) | \(Y\) 取的值由非随机变量 \(y\) 表示 | \(\p(Y = y)\) |
你将在本教材以及科学和数学研究论文中看到许多类似最后一个例子,\(\p(Y=y)\),的例子。这允许我们一般地讨论 \(Y\) 取某个值的可能性。例如,在本书的后面部分,我们将推导出对于三次抛硬币,其中 \(Y\) 是正面的数量,得到恰好 \(y\) 个正面的概率是:$$ \begin{align} \P(Y = y) = \frac{0.75}{y!(3-y)!} && \text{If } 0 \leq y \leq 3 \end{align} $$ 上面的陈述是一个函数,它接受参数 \(y\) 作为输入,并返回数值概率 \(\P(Y=y)\) 作为输出。这个特定的表达式允许我们用一个表达式讨论正面数量为 0、1、2 或 3 的概率。你可以将 \(y\) 的任何一个值代入以获得相应的概率。对于非随机值,通常使用小写符号。在“事件”中使用等号可能会令人困惑。例如,这个表达式 \(\P(Y = 1) = 0.375\) 表示什么?它表示“\(Y\) 取值为 1”的概率是 0.375。对于离散随机变量,这个函数被称为“概率质量函数”并且是我们下一章的主题。
概率质量函数
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part2/pmf/
对于一个随机变量,最重要的信息是:每个结果的可能性有多大?对于离散随机变量,这种信息被称为“概率质量函数”。概率质量函数(PMF)提供了随机变量每个可能赋值的“质量”(即数量)的概率。
形式上,概率质量函数是随机变量可能取的值和随机变量取该值的概率之间的映射。在数学中,我们称这些关联为函数。表示函数的方法有很多:你可以写一个方程,你可以画一个图,你甚至可以在列表中存储许多样本。让我们先从将 PMF 视为图表开始,其中 \(x\) 轴是随机变量可能取的值,\(y\) 轴是随机变量取该值的概率。
在下面的例子中,左侧我们展示了一个概率质量函数(PMF),以图表的形式表示随机变量:\(X\) = 六面骰子掷出的值。右侧我们展示了一个对比示例,即随机变量 \(X\) = 两个骰子之和的 PMF:

左:单个六面骰子掷出的 PMF。右:两个骰子之和的 PMF。
在等可能概率部分中的两个骰子之和的例子。再次强调,这些图中提供的信息是随机变量取不同值的可能性。在右侧的图中,\(x\) 轴上的值 "\(6\)" 与 \(y\) 轴上的概率 \(\frac{5}{36}\) 相关联。这个 \(x\) 轴指的是事件“两个骰子之和为 6”或 \(Y=6\)。\(y\) 轴告诉我们该事件的概率是 \(\frac{5}{36}\)。完整地说:\(\p(Y=6) = \frac{5}{36}\)。值 "\(2\)" 与 "\(\frac{1}{36}\)" 相关联,这告诉我们 \(\p(Y=2) = \frac{1}{36}\),两个骰子之和为 2 的概率是 \(\frac{1}{36}\)。没有与 "\(1\)" 相关联的值,因为两个骰子之和不能为 1。如果你觉得这种表示法令人困惑,请回顾随机变量部分。
这里是相同信息以方程形式表示:
作为最后的例子,这里是用 Python 代码表示的 \(Y\) 的概率质量函数(PMF),即两个骰子之和:
def pmf_sum_two_dice(y):
# Returns the probability that the sum of two dice is y
if y < 2 or y > 12:
return 0
if y <= 7:
return (y-1) / 36
else:
return (13-y) / 36
符号
你可能会觉得 \(\p(Y=y)\) 的表示法是多余的。在概率研究论文和更高级的工作中,数学家们经常使用缩写 \(\p(y)\) 来表示 \(\p(Y=y)\)。这种缩写假设小写值(例如 \(y\))有一个大写字母对应物(例如 \(Y\)),即使它没有明确写出,也代表一个随机变量。在这本书中,我们将经常使用事件 \(\P(Y=y)\) 的完整形式,但偶尔也会使用缩写 \(\p(y)\)。
概率之和必须为 1
对于一个变量(称之为 \(X\))要成为合适的随机变量,它必须满足的条件是:如果你将 \(\p(X = k)\) 的值对所有可能的值 \(k\) 进行求和,结果必须是 1:$$ \sum_{k} \p(X = k) = 1 $$
为了进一步理解这一点,让我们推导一下为什么是这样。一个随机变量取某个值是一个事件(例如 \(X = 2\))。这些事件中的每一个都是互斥的,因为随机变量将取恰好一个值。这些互斥的情况定义了整个样本空间。为什么?因为 \(X\) 必须取 某个 值。
数据到直方图到概率质量函数
存储似然函数(记住,PMF 是离散随机变量似然函数的名称)的一个令人惊讶的方法就是简单地列出数据。我们模拟了将两个骰子相加 10,000 次来生成这个示例数据集:
`[8, 4, 9, 7, 7, 7, 7, 5, 6, 8, 11, 5, 7, 7, 7, 6, 7, 8, 8, 9, 9, 4, 6, 7, 10, 12, 6, 7, 8, 9, 3, 7, 4, 9, 2, 8, 5, 8, 9, 6, 8, 7, 10, 7, 6, 7, 7, 5, 4, 6, 9, 5, 7, 4, 2, 11, 10, 11, 8, 4, 11, 9, 7, 10, 12, 4, 8, 5, 11, 5, 3, 9, 7, 5, 5, 5, 3, 8, 6, 11, 11, 2, 7, 7, 6, 5, 4, 6, 3, 8, 5, 8, 7, 6, 9, 4, 3, 7, 6, 6, 6, 5, 6, 10, 5, 9, 9, 8, 8, 7, 4, 8, 4, 9, 8, 5, 10, 10, 9, 7, 9, 7, 7, 10, 4, 7, 8, 4, 7, 8, 9, 11, 7, 9, 10, 10, 2, 7, 9, 4, 8, 8, 12, 9, 5, 11, 10, 7, 6, 4, 8, 9, 9, 6, 5, 6, 5, 6, 11, 7, 3, 10, 7, 3, 7, 7, 10, 3, 6, 8, 6, 8, 5, 10, 2, 7, 4, 8, 11, 9, 3, 4, 2, 8, 8, 6, 6, 12, 11, 10, 10, 10, 8, 4, 9, 4, 4, 6, 6, 7, 8, 2, 5, 7, 6, 9, 5, 5, 8, 4, 7, 7, 7, 6, 5, 6, 8, 6, 5, 7, 8, 4, 9, 8, 8, 9, 7, 2, 8, 3, 5, 5, 10, 7, 9, 12, 6, 4, 5, 7, 6, 4, 7, 6, 10, 3, 8, 5, 7, 7, 3, 6, 7, 7, 6, 6, 9, 12, 9, 10, 7, 10, 8, 10, 3, 9, 9, 4, 7, 8, 6, 8, 12, 5, 6, 2, 4, 4, 5, 5, 8, 7, 9, 10, 6, 7, 10, 7, 6, 8, 9, 8, 10, 3, 7, 8, 8, 8, 4, 7, 7, 8, 3, 8, 5, 9, 2, 8, 6, 11, 7, 8, 7, 6, 8, 5, 5, 3, 6, 7, 9, 7, 11, 5, 8, 2, 11, 9, 9, 7, 12, 8, 6, 9, 7, 7, 5, 7, 6, 9,
注意,这些数据本身代表了对概率质量函数的一个近似。如果你想近似\(\p(Y=3)\),你只需简单地计算你的数据中“3”出现的次数。这是基于概率定义的一个近似。以下是数据的完整直方图,显示了每个值出现的次数:

标准化直方图(其中每个值都除以你的数据列表长度)是对 PMF 的一个近似。对于离散数字的数据集,直方图显示了每个值的计数(在这种情况下为\(y\))。根据概率的定义,如果你将这个计数除以进行的实验次数,你将得到事件\(\p(Y=y)\)的概率的一个近似。在我们的例子中,我们的数据集中有 10,000 个元素。3 出现的次数是 552 次。注意:$$\begin{align} \frac{\text{count}(Y=3)}{n} &= \frac{552}{10000} = 0.0552 \ \p(Y=3) &= \frac{4}{36} = 0.0555 \end{align} $$
在这种情况下,因为我们进行了 10,000 次试验,直方图是对概率质量函数(PMF)的一个非常好的近似。我们以骰子点数之和为例,因为它容易理解。现实世界中的数据集通常代表更令人兴奋的事件。
预期值
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part2/expectation/
一个随机变量完全由其概率质量函数(PMF)表示,该函数表示随机变量可以取的每个值及其对应的概率。PMF 可以包含大量信息。有时总结随机变量是有用的!一个随机变量最常见、也许也是最有用的总结是其“预期值”。
定义:预期值
随机变量 X 的预期值,记作\(\E[X]\),是随机变量可以取的所有值的平均值,每个值都按照随机变量取该值的概率进行加权。$$ \E[X] = \sum_x x \cdot \p(X=x) $$
预期值还有许多其他名称:均值、加权平均、质心、一阶矩。所有这些都是使用相同的公式计算的。
回想一下,\(\p(X=x)\),也写作\(\p(x)\),是随机变量\(X\)的概率质量函数。以下是根据概率质量函数计算两个骰子之和的预期值的代码:
def expectation_sum_two_dice():
exp_sum_two_dice = 0
# sum of dice can take on the values 2 through 12
for x in range(2, 12 + 1):
pr_x = pmf_sum_two_dice(x) # pmf gives Pr sum is x
exp_sum_two_dice += x * pr_x
return exp_sum_two_dice
def pmf_sum_two_dice(x):
# Return the probability that two dice sum to x
count = 0
# Loop through all possible combinations of two dice
for dice1 in range(1, 6 + 1):
for dice2 in range(1, 6 + 1):
if dice1 + dice2 == x:
count += 1
return count / 36 # There are 36 possible outcomes (6x6)
如果我们手动计算,我们会得到如果\(X\)是两个骰子的和,\(\E[X] = 7\):$$ \E[X] = \sum_x x \cdot \p(X=x) = 2 \cdot \frac{1}{36} + 3 \cdot \frac{2}{36} + \dots + 12 \frac{1}{36} = 7 $$ 7 是如果你无限次地取两个骰子的和所期望得到的“平均”数。在这种情况下,它也恰好是众数,即两个骰子之和的最可能值,但这并不总是如此!
预期值的属性
属性:预期值的线性
属性:无意识统计学家定律 (LOTUS)
当已知随机变量 X 的概率分布,但不知道 g(X)的分布时,也可以计算随机变量 X 的函数 g(X)的预期值。这个定理有一个幽默的名字“无意识统计学家定律”(LOTUS),因为它非常有用,以至于你应该能够无意识地使用它。
属性:常数的预期值
有时在证明中,你可能会得到常数的预期值(而不是随机变量的预期值)。例如,\(\E[5]\)代表什么?由于 5 不是一个随机变量,它不会改变,并且始终是 5,\(\E[5] = 5\)。
预期值和的证明
期望值的一个非常有用的性质是,随机变量期望值的总和可以通过对每个随机变量自身的期望值求和来计算。在随机变量相加的学习中,我们将会了解到,在相加随机变量时计算完整的概率质量函数(或概率密度函数)相当困难,尤其是在随机变量相互依赖的情况下。然而,期望值的总和总是可以分解的:$$E[X+Y] = E[X] + E[Y]$$ 这个非常有用的结果有些令人惊讶。我相信,理解这个结果的最佳方式是通过证明。然而,这个证明将使用课程阅读材料中下一节的一些概念,即概率模型。一旦你学会了如何联合思考随机变量,你将能够理解这个证明。阅读材料中有一个部分详细介绍了这个证明,并给出了为什么它是正确的可视化解释!随机变量和的期望值证明。
无意识统计学家定律的例子
期望值的性质:$$E[g(X)] = \sum_x g(x)\p(X=x)$$ 仅通过阅读方程式就既有用又难以理解。它允许我们计算任何函数应用于随机变量后的函数的期望值!在计算方差时,一个将证明非常有用的函数是 \(E[X²]\)。根据无意识统计学家定律:$$E[X²] = \sum_x x² \p(X=x)$$ 在这种情况下,\(g\) 是平方函数。为了计算 \(E[X²]\),我们以类似于 \(E[X]\) 的方式计算期望值,只是在将值乘以概率质量函数之前,我们先对 \(x\) 的值进行平方。以下是一段代码,用于计算两个骰子之和的 \(E[X²]\):
def expectation_sum_two_dice_squared():
exp_sum_two_dice_squared = 0
# sum of dice can take on the values 2 through 12
for x in range(2, 12 + 1):
pr_x = pmf_sum_two_dice(x) # pmf gives Pr(x)
exp_sum_two_dice_squared += x**2 * pr_x
return exp_sum_two_dice_squared
连续随机变量的期望值
在课程阅读材料后面的部分,我们将学习关于连续随机变量的知识。对于这些类型的随机变量,期望值非常相似。详见连续随机变量。
方差
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part2/variance/
定义:随机变量的方差
方差是衡量随机变量围绕均值的“分散”程度的度量。对于期望值 \(\E[X] = µ\) 的随机变量 X,其方差为:$$ \var(X) = \E[(X–µ)²] $$ 从语义上讲,这是样本与分布均值的平均距离。在计算方差时,我们通常使用方差方程的不同(等价)形式:$$ \begin{align} \var(X) &= \E[X²] - \E[X]² \end{align} $$
在上一节中,我们展示了期望是随机变量的一个有用总结(它计算随机变量的“加权平均”)。接下来要理解随机变量的最重要的属性之一是方差:即分散程度的度量。
首先,让我们考虑三组评分者的概率质量函数。当每个评分者对一个旨在获得 70/100 分的作业进行评分时,他们各自都有可能给出的评分的概率分布。
三种类型同行评分者的分布。数据来自一个大规模在线课程。
组 \(C\) 中评分者的分布有不同的期望值。他们在评分一个价值 70 分的作业时给出的平均分数是 55/100。这显然不是很好!但评分者 \(A\) 和 \(B\) 之间的区别是什么?他们都有相同的期望值(等于正确分数)。组 \(A\) 中的评分者有更高的“分散”。在评分一个价值 70 分的作业时,他们有合理的可能性给出 100 分,或者给出 40 分。组 \(B\) 中的评分者分散度较小。大部分概率质量都接近 70。你希望有像组 \(B\) 那样的评分者:在期望上他们给出正确分数,并且他们有较低的分散度。顺便说一句:组 \(B\) 的分数来自一个基于同行评分的概率算法。
理论家想要一个数字来描述分散程度。他们发明了方差,它是随机变量可能取的值与随机变量均值之间的距离的平均值。对于距离函数有许多合理的选择,概率理论家选择了均值的平方偏差:$$ \var(X) = \E[(X–µ)²] $$
证明:\(\var(X) = \E[X²] - \E[X]²\)
使用 \(\E[X²] - \E[X]²\) 来计算方差要容易得多。你当然不需要知道为什么它是一个等价的表达式,但如果你想知道,这里是有证明。
标准差
方差在比较两个分布的“分散程度”时特别有用,并且它有一个有用的特性,即易于计算。一般来说,较大的方差意味着围绕平均值的偏差更多——分散程度更大。然而,如果你看前面的例子,方差的单位是点的平方。这使得数值难以解释。52 点\(²\)的分散程度意味着什么?一个更可解释的分散程度度量是方差的平方根,我们称之为标准差 \(\std(X) = \sqrt{\var(X)}\)。我们评分者的标准差是 7.2 点。在这个例子中,人们发现用点而不是点\(²\)来考虑分散程度更容易。顺便说一下,标准差是样本(从分布中)到平均值的平均距离,使用的是欧几里得距离函数。
连续随机变量中的方差
在课程阅读的后期,我们将学习连续随机变量。这些类型随机变量的方差非常相似。有关详细信息,请参阅连续随机变量。
伯努利分布
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part2/bernoulli/
参数随机变量
在概率的世界中,有许多经典且常见的随机变量抽象。在课程的这个阶段,你将学习到几个最重要的参数离散分布。在解决问题时,如果你能识别出随机变量符合这些格式之一,那么你可以使用其预先推导的概率质量函数(PMF)、期望、方差和其他属性。这类随机变量被称为参数随机变量。如果你能论证一个随机变量属于所研究的参数类型之一,你只需提供参数即可。一个很好的类比是编程中的类。创建参数随机变量与调用带有输入参数的构造函数非常相似。
伯努利随机变量
伯努利随机变量(也称为 布尔 或 指示 随机变量)是最简单的参数随机变量。它可以取两个值,1 和 0。如果概率为 \(p\) 的实验结果是成功,则取值为 1,否则为 0。一些例子包括抛硬币、随机二进制数字、磁盘驱动器是否崩溃以及某人是否喜欢 Netflix 电影。在这里,\(p\) 是参数,但伯努利随机变量的不同实例可能具有不同的 \(p\) 值。
这里是伯努利随机变量关键属性的完整描述。如果 \(X\) 被声明为参数为 \(p\) 的伯努利随机变量,记作 \(X ∼ \Ber(p)\):
伯努利随机变量
| 符号: | \(X \sim \Ber(p)\) |
|---|---|
| 描述: | 一个以概率 \(p\) 为 1 的布尔变量 |
| 参数: | \(p\),\(X=1\) 的概率。 |
| 支持集: | \(x\) 要么是 0,要么是 1 |
| PMF 方程: | \(\p(X=x) = \begin{cases} p && \text{if }x = 1\\ 1-p && \text{if }x = 0 \end{cases}\) |
| PMF (平滑): | \(\p(X=x) = p^x(1-p)^{1-x}\) |
| 期望: | \(\E[X] = p\) |
| 方差: | \(\var(X) = p (1-p)\) |
| PMF 图: |
参数 \(p\):
由于伯努利分布的随机变量是参数化的,一旦你声明一个随机变量为伯努利类型,你就可以自动知道所有这些预先推导出的属性!其中一些属性对于伯努利来说是直接证明的。例如,你可以求解期望:
证明: 伯努利的期望。如果 \(X\) 是参数为 \(p\) 的伯努利随机变量,\(X \sim \Ber(p)\):
证明: 伯努利的方差。如果 \(X\) 是参数为 \(p\) 的伯努利随机变量,\(X \sim \Ber(p)\):
要计算方差,首先计算 \(E[X²]\):$$ \begin{align} E[X²] &= \sum_x x² \cdot \p(X=x) &&\text{LOTUS}\ &= 0² \cdot (1-p) + 1² \cdot p\ &= p \end{align} $$ $$ \begin{align} \var(X) &= E[X²] - E[X]²&& \text{方差的定义} \ &= p - p² && \text{代入 }E[X²]=p, E[X] = p \ &= p (1-p) && \text{提取 }p \end{align}$$
指示随机变量
定义:指示随机变量
指示变量是一个伯努利随机变量,当基础事件发生时取值为 1,否则为 0。
指示随机变量是将事件的“真/假”结果转换为数字的一种方便方法。这个数字可能更容易融入方程中。参见二项期望推导以获取示例。
一个随机变量 \(I\) 是事件 \(A\) 的指示变量,如果 \(A\) 发生时 \(I = 1\),而 \(A\) 不发生时 \(I = 0\)。指示随机变量是伯努利随机变量,其概率为 \(p=\P(A)\)。\(I\) 是指示随机变量的常用名称。
这里有一些指示随机变量的性质:\(\P(I=1)=\P(A)\) 和 \(\E[I]=\P(A)\)。
二项分布
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part2/binomial/
在本节中,我们将讨论二项分布。首先,想象以下例子。考虑一个实验的\(n\)次独立试验,其中每次试验成功的概率为\(p\)。设\(X\)为\(n\)次试验中的成功次数。这种情况在自然界中非常普遍,因此已经对这种现象进行了大量研究。像\(X\)这样的随机变量被称为二项随机变量。如果你能识别出某个过程符合这种描述,你就可以继承许多已经证明的性质,如 PMF 公式、期望和方差!

这里有一些二项随机变量的例子:
-
\(n\)次抛硬币中正面的次数
-
在随机生成的长度为\(n\)的位字符串中 1 的个数
-
在 1000 个计算机集群中磁盘崩溃的次数,假设磁盘崩溃是独立发生的
二项随机变量
| 符号: | \(X \sim \Bin(n, p)\) |
|---|---|
| 描述: | 在\(n\)个相同、独立的实验中,每个实验成功的概率为\(p\),成功的次数。 |
| 参数: | \(n \in \{0, 1, \dots\}\),实验的数量。\(p \in [0, 1]\),单个实验成功的概率。 |
| 支持集: | \(x \in \{0, 1, \dots, n\}\) |
| PMF 公式: | $$\p(X=x) = {n \choose x}px(1-p)$$ |
| 期望: | \(\E[X] = n \cdot p\) |
| 方差: | \(\var(X) = n \cdot p \cdot (1-p)\) |
| PMF 图: |
参数\(n\):参数\(p\):
考虑二项分布的一种方式是将其视为\(n\)个伯努利变量的和。假设\(Y_i \sim \Ber(p)\)是一个指示伯努利随机变量,如果实验\(i\)成功则\(Y_i\)为 1。那么如果\(X\)是\(n\)次实验中的总成功次数,\(X \sim \Bin(n, p)\):$$ X = \sum_{i=1}^n Y_i $$
回想一下,\(Y_i\)的结果将是 1 或 0,所以一种思考\(X\)的方式是将其视为这些 1 和 0 的总和。
二项概率质量函数
关于二项分布,最重要的属性是它的概率质量函数:

回想一下,我们在第一部分推导了这个公式。有一个完整的例子是关于\(n\)次抛硬币中\(k\)次正面的概率,其中每次抛硬币正面朝上的概率为\(0.5\):多次抛硬币。简要回顾一下,如果你认为每个实验都是独特的,那么从\(n\)次实验中排列\(k\)次成功的方案有\({n \choose k}\)种。对于任何互斥的排列,该排列的概率是\(p^k \cdot (1-p)^{n-k}\)。
二项分布的名称来源于术语\({n \choose k}\),它正式称为二项系数。
二项期望
计算二项分布的期望值有简单和困难两种方法。简单的方法是利用二项分布是伯努利指示随机变量的和这一事实。\(X = \sum_{i=1}^{n} Y_i\) 其中 \(Y_1\) 是第 \(i\) 次实验是否成功的指示器:\(Y_i \sim \Ber(p)\)。由于随机变量期望值之和等于期望值的和,我们可以将每个伯努利的期望值相加,\(\E[Y_i] = p\):$$ \begin{align} \E[X] &= \E\Big[\sum_{i=1}^{n} Y_i\Big] && \text{因为 }X = \sum_{i=1}^{n} Y_i \ &= \sum_{i=1}^{n}\E[ Y_i] && \text{期望值的和} \ &= \sum_{i=1}^{n}p && \text{伯努利的期望值} \ &= n \cdot p && \text{求和 \(n\) 次} \end{align} $$ 困难的方法是使用期望值的定义:$$ \begin{align} \E[X] &= \sum_{i=0}^n i \cdot \p(X = i) && \text{期望值的定义} \ &= \sum_{i=0}^n i \cdot {n \choose i} pi(1-p) && \text{代入概率质量函数} \ & \cdots && \text{许多步骤之后} \ &= n \cdot p \end{align} $$
Python 中的二项分布
如你所料,你可以在代码中使用二项分布。二项分布的标准库是 scipy.stats.binom。
这个包提供的最有帮助的方法之一是计算概率质量函数。例如,假设 \(X \sim \text{Bin}(n=5,p=0.6)\),你想找到 \(\P(X=2)\),你可以使用以下代码:
from scipy import stats
# define variables for x, n, and p
n = 5
p = 0.6
x = 2
# use scipy to compute the pmf
p_x = stats.binom.pmf(x, n, p)
# use the probability for future work
print(f'P(X = {x}) = {p_x}')
控制台:
P(X = 2) = 0.2304
另一个特别有用的函数是生成二项分布的随机样本的能力。例如,假设 \(X \sim \Bin(n=10, p = 0.3)\) 代表网站请求的数量。我们可以使用以下代码从这个分布中抽取 100 个样本:
from scipy import stats
# define variables for x, n, and p
n = 10
p = 0.3
x = 2
# use scipy to compute the pmf
samples = stats.binom.rvs(n, p, size=100)
# use the probability for future work
print(samples)
控制台:
[4 5 3 1 4 5 3 1 4 6 5 6 1 2 1 1 2 3 2 5 2 2 2 4 4 2 2 3 6 3 1 1 4 2 6 2 4
2 3 3 4 2 4 2 4 5 0 1 4 3 4 3 3 1 3 1 1 2 2 2 2 3 5 3 3 3 2 1 3 2 1 2 3 3
4 5 1 3 7 1 4 1 3 3 4 4 1 2 4 4 0 2 4 3 2 3 3 1 1 4]
你可能想知道什么是随机样本!随机样本是对我们的随机变量进行随机赋值。上面我们有 100 个这样的赋值。值 \(x\) 被选中的概率由概率质量函数给出:\(\p(X=x)\)。你会注意到,尽管 8 是上述二项分布的一个可能的赋值,但在 100 个样本中我们从未看到过值 8。为什么?因为 \(P(X=8) \approx 0.0014\)。你需要抽取 1,000 个样本,才可能期望看到 8。
此外,还有获取均值、方差等功能。你可以阅读 scipy.stats.binom 文档,特别是方法列表。
泊松分布
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part2/poisson/
泊松随机变量给出在固定时间间隔(或空间)内发生特定数量事件的概率。它假设事件以已知的恒定平均速率发生,并且与上次事件发生的时间无关。
泊松随机变量
| 符号: | \(X \sim \Poi(\lambda)\) |
|---|---|
| 描述: | 在固定时间段内发生的事件数量,如果(a)事件以恒定的平均速率发生,并且(b)它们与上次事件发生的时间无关。 |
| 参数: | \(\lambda \in \mathbb{R}^{+}\),恒定的平均速率。 |
| 支持集: | \(x \in \{0, 1, \dots\}\) |
| PMF 方程: | $$\p(X=x) = \frac{\lambdaxe{-\lambda}}{x!}$$ |
| 期望: | \(\E[X] = \lambda\) |
| 方差: | \(\var(X) = \lambda\) |
| PMF 图: |
参数 \(\lambda\):
泊松直觉
在本节中,我们展示了泊松推导背后的直觉。这不仅是一种深入理解泊松分布的好方法,也是对二项分布的良好实践。
让我们来解决预测在固定时间段(下一分钟)内发生特定数量事件概率的问题。例如,假设你正在开发一个共享出行应用程序,你关心特定区域收到的请求数量的概率。根据历史数据,你知道每分钟的请求平均数为 \(\lambda = 5\)。在一分钟内收到 1 个、2 个、3 个等请求的概率是多少?
:我们可以通过使用二项分布来近似解决这个问题!假设我们将一分钟分成 60 秒,并将每一秒作为一个指示伯努利变量——你要么收到请求,要么不收。如果你在一秒内收到请求,指示变量为 1。否则为 0。以下是我们的 60 个二元指示变量的可视化。在这个例子中,假设我们在 2.75 秒和 7.12 秒收到请求,相应的指示变量是蓝色填充的方框:
*1 分钟
在一分钟内接收到的总请求数可以近似为六十个指示变量的和,这恰好符合二项分布——伯努利分布的和的描述。具体定义 \(X\) 为一分钟内的请求数。\(X\) 是一个有 \(n=60\) 次试验的二项分布。在单次试验中成功的概率 \(p\) 是多少?为了使 \(X\) 的期望值等于观察到的历史平均值 \(\lambda =5\),我们应该选择 \(p\) 使得 \(\lambda = \E[X]\)。$$ \begin{align} \lambda &= \E[X] && \text{期望值与历史平均值匹配} \ \lambda &= n \cdot p && \text{二项分布的期望值是 } n \cdot p \ p &= \frac{\lambda}{n} && \text{求解 \(p\)} \end{align} $$ 在这个例子中,由于 \(\lambda=5\) 且 \(n=60\),我们应该选择 \(p=5/60\) 并声明 \(X \sim \Bin(n=60, p=5/60)\)。现在我们有了 \(X\) 的形式,我们可以通过使用二项分布的概率质量函数来回答关于请求数量的概率问题:$$\p(X = x) = {n \choose x} p^x (1-p)^{n-x}$$
例如:$$\p(X=1) = {60 \choose 1} (5/60)¹ (55/60)^{60-1} \approx 0.0295$$ $$\p(X=2) = {60 \choose 2} (5/60)² (55/60)^{60-2} \approx 0.0790$$ $$\p(X=3) = {60 \choose 3} (5/60)³ (55/60)^{60-3} \approx 0.1389$$ 很好!但别忘了这只是一个近似。我们没有考虑到在单个秒内可能发生多个事件的事实。解决这个问题的方法之一是将我们的分钟分割成更细的区间(将它们分割成 60 秒的选择相当随意)。相反,让我们将我们的分钟分割成 600 分秒,再次在 2.75 秒和 7.12 秒有请求:1 分钟
现在 \(n=600\),\(p=5/600\),且 \(X \sim \Bin(n=600, p=6/600)\)。我们可以使用这个更好的近似重复我们的示例计算:$$\p(X=1) = {600 \choose 1} (5/600)¹ (595/60)^{600-1} \approx 0.0333$$ $$\p(X=2) = {600 \choose 2} (5/600)² (595/600)^{600-2} \approx 0.0837$$ $$\p(X=3) = {600 \choose 3} (5/600)³ (595/600)^{600-3} \approx 0.1402$$
选择任何 \(n\) 的值,这是我们分割分钟的桶的数量:
\(n\) 越大,近似值越准确。那么当 \(n\) 是无穷大时会发生什么?它变成了泊松分布!
泊松分布,二项分布的极限
或者,如果我们真的关心确保我们不会在同一个桶中出现两个事件,我们可以将我们的分钟分割成无限小的桶:
1 分钟
证明:泊松分布的推导
现在我们将我们的分钟无限分割,\(X\) 的概率质量函数(PMF)看起来会是什么样子?我们可以写出方程,并随着 \(n\) 趋向于无穷大来思考它。回想一下,\(p\) 仍然等于 \(\lambda/n\):
虽然这个表达式看起来可能令人畏惧,但它简化得很好。这个证明使用了我们在这本书中没有介绍的一些特殊的极限规则:
这是一个美丽的表达式!现在我们可以计算每分钟请求数量的实际概率,如果历史平均值为 \(\lambda=5\):
这既更准确,也更容易计算!
改变时间框架
假设你被给出一个单位时间内的速率,但你想要知道另一个单位时间内的速率。例如,你可能被给出每分钟的网站点击率,但你想要知道 20 分钟内的概率。你只需将这个速率乘以 20,就可以从“每 1 分钟时间”的速率转换为“每 20 分钟时间”的速率。*
更多离散分布
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part2/more_discrete/
简介页:章节即将推出!
几何随机变量
| 符号: | \(X \sim \Geo(p)\) |
|---|---|
| 描述: | 达到一次成功所需的实验次数。假设每个实验都是独立的,成功的概率为 \(p\)。 |
| 参数: | \(p \in [0, 1]\),单个实验成功的概率。 |
| 支持集: | \(x \in \{1, \dots, \infty\}\) |
| PMF 公式: | $$\p(X=x) = (1-p)^{x-1} p$$ |
| 期望: | \(\E[X] = \frac{1}{p}\) |
| 方差: | \(\var(X) = \frac{1-p}{p²}\) |
| PMF 图: |
参数 \(p\):
负二项随机变量
| 符号: | \(X \sim \NegBin(r, p)\) |
|---|---|
| 描述: | 达到 \(r\) 次成功所需的实验次数。假设每个实验都是独立的,成功的概率为 \(p\)。 |
| 参数: | \(r > 0\),我们期望的成功次数。\(p \in [0, 1]\),单个实验成功的概率。 |
| 支持集: | \(x \in \{r, \dots, \infty\}\) |
| PMF 公式: | $$\p(X=x) = {x - 1 \choose r - 1}pr(1-p)$$ |
| 期望: | \(\E[X] = \frac{r}{p}\) |
| 方差: | \(\var(X) = \frac{r \cdot (1-p)}{p²}\) |
| PMF 图: |
参数 \(r\):参数 \(p\):
分类分布
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part2/categorical/
分类分布是一个术语,用于描述取非数值值的随机变量。作为一个例子,想象一个表示今天天气的随机变量。天气的自然表示是几个类别之一:{晴朗,阴天,雨天,雪天}。与过去的例子不同,这些值不是整数或实数值!我们可以继续吗?当然可以!我们可以将这个随机变量表示为\(X\),其中\(X\)是一个分类随机变量。
你不需要了解太多关于分类分布的知识。它们的工作方式可能正如你所预期的那样。为了提供一个分类随机变量的概率质量函数(PMF),你只需要提供每个类别的概率。例如,如果\(X\)是今天的天气,那么 PMF 应该将\(X\)可能取的所有值与其取这些值的概率相关联。以下是一个关于天气分类的 PMF 示例:
| 天气值 | 概率 |
|---|---|
| 晴朗 | \(\p(X = \text{Sunny}) = 0.49\) |
| --- | --- |
| 阴天 | \(\p(X = \text{Cloudy}) = 0.30\) |
| --- | --- |
| 雨天 | \(\p(X = \text{Rainy}) = 0.20\) |
| --- | --- |
| 雪天 | \(\p(X = \text{Snowy}) = 0.01\) |
| --- | --- |
注意,这些概率的总和必须为 1.0。这是因为(在这个版本中)天气必须是四个类别之一。由于这些值不是数值,这个随机变量不会有期望(值不是数字)、方差或以函数形式表示的 PMF,这与表格表示相反。
注意:分类分布是多项分布(其中结果数量为 1)的简化版本。
连续分布
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part2/continuous/
到目前为止,我们看到的所有随机变量都是离散的。在 CS109 中我们看到的所有情况下,这意味着我们的随机变量只能取整数值。现在是我们考虑连续随机变量的时候了,这些随机变量可以在实数域(\(\R\))中取值。连续随机变量可以用来表示具有任意精度的测量(例如身高、体重、时间)。
从离散到连续
为了从考虑离散随机变量的思维过渡到考虑连续随机变量的思维,让我们从一个思想实验开始:想象你正在跑着去赶公交车。你知道你将在下午 2:15 到达,但你不知道公交车何时到达,并想将下午 2 点之后的分钟数视为一个随机变量 \(T\),这样你就可以计算你需要等待超过五分钟的概率 \(P(15 < T < 20)\)。
我们立即面临一个问题。对于离散分布,我们会描述随机变量取特定值的概率。对于连续值,如公交车到达的时间,这没有意义。例如,如果我问你:公交车在下午 2:17 正好到达,以及 12.12333911102389234 秒的概率是多少?同样,如果我问你:一个孩子出生时体重恰好等于 3.523112342234 公斤的概率是多少,你可能会认为这个问题很荒谬。没有孩子的体重会精确到那个程度。实数可以有无限精度,因此考虑随机变量取特定值的概率有点令人困惑。
相反,让我们先通过将时间,我们的连续变量,分成 5 分钟的时间段来进行离散化。现在我们可以考虑类似的事情,比如,公交车在下午 2:00 到 2:05 之间到达的概率作为一个具有某种概率的事件(见下图中左边的图)。五分钟的时间段似乎有点粗糙。你可以想象,相反,我们可以将时间离散化成 2.5 分钟的时间段(中间的图)。在这种情况下,公交车在下午 2 点后 15 分钟到 20 分钟之间出现的概率是两个时间段的和,用橙色表示。为什么停止在这里呢?在极限情况下,我们可以不断地将时间分解成越来越小的片段。最终,我们将在每个时间点留下概率的导数,其中 \(P(15 < T < 20)\) 的概率是那个导数在 15 到 20 之间的积分(右边的图)。

概率密度函数
在离散随机变量的世界中,一个随机变量最重要的性质是其概率质量函数(PMF),它会告诉你随机变量取任何值的概率。当我们进入连续随机变量的世界时,我们需要重新思考这个基本概念。在连续世界中,每个随机变量都有一个概率密度函数(PDF),它定义了随机变量取特定值的相对可能性。我们传统上用符号\(f\)表示概率密度函数,并以两种方式之一来表示它:$$ f(X=x) \quad \or \quad f(x) $$ 其中右侧的符号是简写,小写\(x\)表示我们正在讨论连续随机变量的相对可能性,而大写\(X\)表示随机变量。就像在公交车例子中,PDF 是概率在随机变量所有点的导数。这意味着 PDF 有一个重要的特性,即你可以对其积分以找到随机变量在范围\((a, b)\)内取值的概率。
定义:连续随机变量
如果存在一个概率密度函数(PDF)\(f(x)\),它接受实数值\(x\),那么\(X\)是一个连续随机变量:$$ $$\begin{align} &\P(a \leq X \leq b) = \int_a^b f(x) \d x \end{align}$$ $$ 以下性质也必须成立。这些性质保持了公理,即\(\P(a \leq X \leq b)\)是一个概率:$$ $$\begin{align} &0 \leq \P(a \leq X \leq b) \leq 1 \ &\P(-\infty < X < \infty) = 1 \end{align}$$ $$
一个常见的误解是将\(f(x)\)视为一个概率。它实际上是所谓的概率密度。它表示概率/单位\(X\)。通常,这只有在我们对 PDF 进行积分或比较概率密度时才有意义。正如我们讨论概率密度时所提到的,一个连续随机变量取特定值(无限精度)的概率是 0。
这与在离散世界中我们经常讨论的随机变量取特定值的概率大不相同。
累积分布函数
拥有一个概率密度函数是很好的,但这意味着我们每次想要计算一个概率时都必须求解一个积分。为了避免这种不幸的命运,我们将使用一个称为累积分布函数(CDF)的标准。累积分布函数是一个函数,它接受一个数字并返回随机变量取值小于该数字的概率。它有一个令人愉快的特性,即如果我们有一个随机变量的累积分布函数,我们就不需要积分来回答概率问题!
对于连续随机变量\(X\),累积分布函数,记作\(F(x)\),为:$$ $$\begin{align} &F(x) = P(X \leq x) = \int_{-\infty}^{x} f(x)\d x \end{align}$$ $$
为什么 CDF 是随机变量取值小于输入值而不是大于的概率?这是一个惯例问题。但这是一个有用的惯例。大多数概率问题都可以通过了解 CDF(并利用积分从\(-\infty\)到\(\infty\)的结果为 1 的事实)简单解决。以下是一些仅使用 CDF 回答概率问题的例子:$$\begin{align} &\text{概率查询} && \text{解决方案} && \text{解释} \ &\P(X < a) && F(a) && \text{这是 CDF 的定义}\ &\P(X \leq a) && F(a) && \text{技巧问题。 }\P(X = a) = 0\ &\P(X > a) && 1 - F(a) && \P(X < a) + \P(X > a) = 1 \ &\P(a < X < b) && F(b) - F(a) && F(a) + \P(a < X < b) = F(b)\ \end{align}$$
连续分布也适用于离散随机变量,但在离散世界中 CDF 的效用较小,因为我们的离散随机变量没有“封闭形式”的 CDF 函数(例如,没有任何求和):$$\begin{align} F_X(a) = \sum_{i = 1}^a P(X = i) \end{align}$$
求解常数
设\(X\)为一个具有 PDF 的连续随机变量:$$\begin{align} f(x) = \begin{cases} C(4x - 2x²) &\text{当 } 0 < x < 2 \ 0 & \text{否则} \end{cases} \end{align}$$ 在这个函数中,\(C\)是一个常数。\(C\)的值是多少?由于我们知道 PDF 必须加起来为 1:$$\begin{align} &\int_0² C(4x - 2x²) \d x = 1 \ &C\left(2x² - \frac{2x³}{3}\right)\bigg|_0² = 1 \ &C\left(\left(8 - \frac{16}{3}\right) - 0 \right) = 1 \ &C = \frac{3}{8} \end{align}$$ 现在我们知道了\(C\),\(\P(X > 1)\)是多少?$$\begin{align} \P(X > 1) &=\int_1^{\infty}f(x) \d x \ &= \int_1² \frac{3}{8}(4x - 2x²) \d x \ &= \frac{3}{8}\left(2x² - \frac{2x³}{3}\right)\bigg|_1² \ &= \frac{3}{8}\left[\left(8 - \frac{16}{3}\right) - \left(2 - \frac{2}{3}\right)\right] = \frac{1}{2} \end{align}$$
连续变量的期望和方差
对于连续随机变量\(X\):$$\begin{align} &E[X] = \int_{-\infty}^{\infty} x f(x) dx \ &E[g(X)] = \int_{-\infty}^{\infty} g(x) f(x) dx \ &E[X^n] = \int_{-\infty}^{\infty} x^n f(x) dx \end{align}$$
对于连续和离散随机变量:$$\begin{align} &E[aX + b] = aE[X] + b\ &\text{Var}(X) = E[(X - \mu)²] = E[X²] - (E[X])² \ &\text{Var}(aX + b) = a² \text{Var}(X) \end{align}$$
均匀分布
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part2/uniform/
所有连续随机变量中最基本的是均匀随机变量,它在范围(\(\alpha, \beta\))内以相同的可能性取任何值。\(X\) 是一个 均匀随机变量(\(X \sim \Uni(\alpha, \beta)\)),如果它具有以下概率密度函数:$$\begin{align} f(x) = \begin{cases} \frac{1}{\beta - \alpha} &\text{when } \alpha \leq x \leq \beta \ 0 & \text{otherwise} \end{cases} \end{align}$$
注意密度 \(1/(\beta - \alpha\)) 不论 \(x\) 的值如何都是相同的。这使得密度均匀。那么为什么概率密度函数是 \(1/(\beta - \alpha)\) 而不是 1 呢?这就是使得对所有可能输入的积分等于 1 的常数。
均匀随机变量
| 符号: | \(X \sim \Uni(\alpha, \beta)\) |
|---|---|
| 描述: | 一个连续随机变量,其值在 \(\alpha\) 和 \(\beta\) 之间以相同的可能性出现 |
| 参数: | \(\alpha \in \R\), 变量的最小值。\(\beta \in \R\), \(\beta > \alpha\), 变量的最大值。 |
| 支持集: | \(x \in [\alpha, \beta]\) |
| 概率密度函数方程: | $$f(x) = \begin{cases} \frac{1}{\beta - \alpha} && \text{for }x \in [\alpha, \beta]\ 0 && \text{else} \end{cases}$$ |
| 累积分布函数方程: | $$F(x) = \begin{cases} \frac{x - \alpha}{\beta - \alpha} && \text{for }x \in [\alpha, \beta]\ 0 && \text{for } x < \alpha \ 1 && \text{for } x > \beta \end{cases}$$ |
| 期望值: | \(\E[X] = \frac{1}{2}(\alpha + \beta)\) |
| 方差: | \(\var(X) = \frac{1}{12}(\beta - \alpha)²\) |
| 概率密度函数图: |
参数 \(\alpha\): 参数 \(\beta\):
示例: 你正在跑向公交车站。你不知道公交车确切什么时候到达。你认为 2 点到 2:30 之间的任何时间到达的可能性都是相同的。你在下午 2:15 到达。等待时间小于 5 分钟的概率是多少?
设 \(T\) 为公交车在下午 2 点后到达的时间(以分钟计)。因为我们认为在这个范围内所有时间到达的可能性都是相同的,所以 \(T \sim \Uni(\alpha = 0, \beta = 30)\)。等待 5 分钟的概率等于公交车在 2:15 到 2:20 之间到达的概率。换句话说 \(\p(15 < T < 20)\): $$\begin{align} \p(\text{Wait under 5 mins}) &= \p(15 < T < 20) \ &= \int_{15}^{20} f_T(x) \partial x \ &= \int_{15}^{20} \frac{1}{\beta - \alpha} \partial x \ \ &= \frac{1}{30} \partial x \ \ &= \frac{x}{30}\bigg\rvert_{15}^{20} \ &= \frac{20}{30} - \frac{15}{30} = \frac{5}{30} \end{align}$$
我们可以求出均匀随机变量 \(X\) 在范围 \(a\) 到 \(b\) 内的概率的封闭形式,假设 \(\alpha \leq a \leq b \leq \beta\):$$\begin{align} \P(a \leq X \leq b) &= \int_a^b f(x) \d x \ &= \int_a^b \frac{1}{\beta - \alpha} \d x \ &= \frac{ b - a }{ \beta - \alpha } \end{align}$$
指数分布
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part2/exponential/
指数分布衡量的是从下一个事件发生所需的时间量。它假设事件通过泊松过程发生。请注意,这与衡量固定时间段内事件数量的泊松随机变量不同。
指数随机变量
| 符号: | \(X \sim \Exp(\lambda)\) |
|---|---|
| 描述: | 如果(a)事件以恒定的平均速率发生,并且(b)它们与上次事件发生的时间无关,则下一个事件发生的时间。 |
| 参数: | \(\lambda \in \mathbb{R}^{+}\),恒定的平均速率。 |
| 支持集: | \(x \in \mathbb{R}^+\) |
| PDF 方程: | $$f(x) = \lambda e^{-\lambda x}$$ |
| CDF 方程: | $$F(x) = 1 - e^{-\lambda x}$$ |
| 期望: | \(\E[X] = 1/\lambda\) |
| 方差: | \(\var(X) = 1/\lambda²\) |
| PDF 图: |
参数 \(\lambda\):
指数分布是连续分布的一个很好的例子,其中累积分布函数(CDF)更容易处理,因为它允许你回答概率问题而不需要使用积分。
示例:根据美国地质调查局的历史数据,8.0+ 级别的地震在某个地点以每年 0.002 的速率发生。已知地震是通过泊松过程发生的。在接下来的 4 年内发生大地震的概率是多少?
设 \(Y\) 为下一次大地震的年数。因为 \(Y\) 衡量的是下一个事件发生的时间,所以它符合指数随机变量的描述:\(Y \sim \Exp(\lambda = 0.002)\)。问题是询问 \(\p(Y < 4)\)? $$\begin{align} \p(Y < 4) &= F_Y(4) && \text{CDF 衡量 \(\p(Y < y)\)} \ &= 1 - e^{- \lambda \cdot y} && \text{指数的 CDF} \ &= 1 - e^{- 0.002 \cdot 4} && \text{指数的 CDF} \ &\approx 0.008 \end{align}$$ 注意,使用 PDF 也可以回答这个问题,但需要求解一个积分。
指数分布是无记忆的
获取对“泊松过程”含义直观理解的一种方法是通过证明指数分布是"无记忆性"。这意味着过去事件的发生(或未发生)不会改变我们对下一次发生所需时间的信念。这可以正式表述如下。如果 \(X \sim \Exp(\lambda)\),那么对于从开始到 \(s\) 的时间间隔,以及随后的查询时间间隔 \(t\):$$\p(X > s + t | X > s) = \p(X > t) $$ 这是我们能够证明的:$$\begin{align} \p(X > s + t | X > s) &= \frac{\p(X > s + t \and X > s)}{\p(X > s)} && \text{条件概率的定义} \ &= \frac{\p(X > s + t )}{\p(X > s)} && \text{因为 \(X>s+t\) 意味着 \(X>s\)} \ &= \frac{1 - F_X(s + t )}{1 - F_X(s)} && \text{累积分布函数的定义} \ &= \frac{e^{-\lambda (s + t)}}{e^{-\lambda s}} && \text{通过指数分布的累积分布函数} \ &= e^{-\lambda t} && \text{简化} \ &= 1 - F_X(t) && \text{通过指数分布的累积分布函数} \ &= \p(X > t) && \text{累积分布函数的定义} \ \end{align}$$
正态分布
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part2/normal/
最重要的随机变量类型是正态(又称高斯)随机变量,它由均值(\(\mu\))和方差(\(\sigma²\))参数化,有时也可以等价地写成均值和方差(\(\sigma²\))。如果 \(X\) 是一个正态变量,我们写成 \(X \sim N(\mu, \sigma²)\)。正态分布之所以重要,是因为它是由独立随机变量的和生成的,因此它在自然界中很常见。世界上许多事物并非呈正态分布,但数据科学家和计算机科学家仍然将它们建模为正态分布。为什么?因为它是在匹配特定期望(平均值)和方差(分散度)的同时,我们能为随机变量做出的最熵(保守)的建模决策。
正态分布的概率密度函数(PDF)对于 \(X \sim N(\mu, \sigma²)\) 是:$$\begin{align} f_X(x) = \frac{1}{\sigma \sqrt{2\pi} } e ^{\frac{-(x-\mu)²}{2\sigma²}} \end{align}$$ 注意 PDF 函数指数中的 \(x\)。当 \(x\) 等于均值 (\(\mu\)) 时,e 的指数为 \(0\),PDF 达到最大值。
根据定义,正态分布有 \(\E[X] = \mu\) 和 \(\var(X) = \sigma²\)。
正态 PDF 的积分没有封闭形式,因此也没有封闭形式的 CDF。然而,我们可以将任何正态分布转换为具有预计算 CDF 的正态分布。这种数学技巧的结果是,正态分布 \(X \sim N(\mu, \sigma²)\) 的 CDF 为:$$\begin{align} F_X(x) = \Phi\left(\frac{x - \mu}{\sigma}\right) \end{align}$$
其中 \(\Phi\) 是一个预计算的函数,表示标准正态的 CDF。
正态(又称高斯)随机变量
| 符号: | \(X \sim \N(\mu, \sigma²)\) |
|---|---|
| 描述: | 一种常见且自然发生的分布。 |
| 参数:| \(\mu \in \mathbb{R}\),均值。\(\sigma² \in \mathbb{R}\),方差。
|
| 支持集: | \(x \in \mathbb{R}\) |
|---|---|
| PDF 方程: | $$f(x) = \frac{1}{\sigma \sqrt{2 \pi}} e^{-\frac{1}{2}\Big(\frac{x-\mu}{\sigma}\Big)²}$$ |
| CDF 方程: | $$\begin{align} F(x) &= \phi(\frac{x-\mu}{\sigma}) && \text{其中 \(\phi\) 是标准正态的 CDF} \end{align}$$ |
| 期望: | \(\E[X] = \mu\) |
| 方差: | \(\var(X) = \sigma²\) |
| PDF 图: |
参数 \(\mu\):参数 \(\sigma\):
线性变换
如果 \(X\) 是一个正态分布,即 \(X \sim N(\mu, \sigma²)\),且 \(Y\) 是 \(X\) 的线性变换,即 \(Y = aX + b\),那么 \(Y\) 也是一个正态分布,其中:$$\begin{align} Y \sim N(a\mu + b, a²\sigma²) \end{align}$$
投影到标准正态
对于任何正态变量 \(X\),我们可以找到一个从 \(X\) 到标准正态变量 \(Z \sim N(0, 1)\) 的线性变换。注意,\(Z\) 是标准正态的典型表示法。对于任何正态变量,如果你从正态变量中减去均值(\(\mu\))并除以标准差(\(\sigma\)),结果总是标准正态。我们可以用数学方法证明这一点。设 \(W = \frac{X - \mu}{\sigma}\):$$\begin{align} W &= \frac{X -\mu}{\sigma} && \text{ 对 \(X\) 进行变换:减去 \(\mu\) 并除以 \(\sigma\)} \ & = \frac{1}{\sigma}X - \frac{\mu}{\sigma} && \text{ 使用代数重写方程}\ & = aX + b && \text{ 线性变换,其中 \(a = \frac{1}{\sigma}\),\(b = - \frac{\mu}{\sigma}\) }\ &\sim N(a\mu + b, a²\sigma²) && \text{ 正态变量的线性变换是另一个正态}\ &\sim N(\frac{\mu}{\sigma} - \frac{\mu}{\sigma}, \frac{\sigma²}{\sigma²}) && \text{ 代入 \(a\) 和 \(b\) 的值}\ &\sim N(0, 1) && \text{ 标准正态} \end{align}$$
使用这个变换,我们可以用已知的 \(Z\) 的累积分布函数 \(F_Z(x)\) 来表示 \(X\) 的累积分布函数 \(F_X(x)\)。由于 \(Z\) 的累积分布函数非常常见,它得到了自己的希腊符号:\(\Phi(x)\) $$\begin{align} F_X(x) &= P(X \leq x) \ &= P\left(\frac{X - \mu}{\sigma} \leq \frac{x - \mu}{\sigma}\right) \ &= P\left(Z \leq \frac{x - \mu}{\sigma}\right)\ &= \Phi\left(\frac{x - \mu}{\sigma}\right) \end{align}$$
可以在表中查找 \(\Phi(x)\) 的值。每种现代编程语言也都有计算正态随机变量累积分布函数(CDF)的能力!
示例:设 \(X\sim \mathcal{N}(3, 16)\),\(P(X > 0)\) 是多少?$$\begin{align} P(X > 0) &= P\left(\frac{X-3}{4} > \frac{0-3}{4}\right) = P\left(Z > -\frac{3}{4}\right) = 1 - P\left(Z \leq -\frac{3}{4}\right)\ &= 1 - \Phi(-\frac{3}{4}) = 1 - (1- \Phi(\frac{3}{4})) = \Phi(\frac{3}{4}) = 0.7734 \end{align}$$ \(P(2 < X < 5)\) 是多少?$$\begin{align} P(2 < X < 5) &= P\left(\frac{2 - 3}{4} < \frac{X-3}{4} < \frac{5-3}{4}\right) = P\left(-\frac{1}{4} < Z < \frac{2}{4}\right)\ &= \Phi(\frac{2}{4})-\Phi(-\frac{1}{4}) = \Phi(\frac{1}{2})-(1 - \Phi(\frac{1}{4})) = 0.2902 \end{align}$$
示例:你可以在导线上发送 2 或-2 伏特的电压来表示 1 或 0。设 \(X\) = 发送的电压,设 \(R\) = 接收到的电压。\(R = X + Y\),其中 \(Y \sim \mathcal{N}(0, 1)\) 是噪声。在解码时,如果 \(R \geq 0.5\),我们解释电压为 1,否则为 0。解码后原比特为 1 的情况下发生错误的概率 \(P(\text{error after decoding}|\text{original bit} = 1)\) 是多少?$$\begin{align} P(X + Y < 0.5) &= P(2 + Y < 0.5) \ &= P(Y < -1.5) \ &= \Phi(-1.5) \ &\approx 0.0668 \end{align}$$
示例:在标准差内的 67%规则。一个正态变量 \(X \sim \N(\mu, \sigma)\) 的值在其均值的一个标准差内的概率是多少?
示例:100 位访问你网站的访客被给予一个新的设计。设 \(X\) = 被给予新设计并在你网站上花费更多时间的人数。如果你的 CEO 认为新设计没有效果,那么当 \(X \geq 65\) 时,他会支持新设计。\(P(\text{CEO 支持改变}|\text{它没有效果})\) 是多少?
\(E[X] = np = 50\)。\(\Var(X) = np(1-p) = 25\)。\(\sigma = \sqrt{\Var(X)} = 5\)。因此我们可以使用正态近似:\(Y \sim \mathcal{N}(\mu = 50, \sigma² = 25)\)。 $$\begin{align} P(X \geq 65) &\approx P(Y > 64.5) = P\left(\frac{Y - 50}{5} > \frac{64.5 - 50}{5}\right) = 1 - \Phi(2.9) = 0.0019 \end{align}$$
示例: 斯坦福大学录取了 2480 名学生,每个学生有 68%的几率入学。设\(X\) = # 将会入学的学生数。\(X\sim \Bin(2480, 0.68)\)。求\(P(X > 1745)\)?
\(E[X] = np = 1686.4\)。\(\var(X) = np(1-p) = 539.7\)。\(\sigma = \sqrt{\Var(X)} = 23.23\)。因此我们可以使用正态近似:\(Y \sim \mathcal{N}(\mu = 1686.4, \sigma² = 539.7)\)。 $$\begin{align} P(X > 1745) &\approx P(Y > 1745.5) \ &\approx P\left(\frac{Y - 1686.4}{23.23} > \frac{1745.5 - 1686.4}{23.23}\right) \ &\approx 1 - \Phi(2.54) = 0.0055 \end{align}$$
维度诅咒
在机器学习中,就像计算机科学的许多领域一样,经常涉及高维点,高维空间具有一些令人惊讶的概率特性。
随机 值 \(X_i\) 是一个均匀分布(Uni(0, 1))。
维度为 \(d\) 的随机 点 是 \(d\) 个随机值的列表:\([X_1 \dots X_d]\)。

当 \(X_i\) 小于 0.01 或者 \(X_i\) 大于 0.99 时,随机 值 \(X_i\) 就接近边缘。随机值接近边缘的概率是多少?
设 \(E\) 为随机值接近边缘的事件。\(P(E) = P(X_i < 0.01) + P(X_i > 0.99) = 0.02\)
维度为 \(3\) 的随机 点 \([X_1, X_2, X_3]\) 如果其 任何 值接近边缘,则该点接近边缘。一个三维点接近边缘的概率是多少?
事件相当于没有任何一个点的维度接近边缘的补集,即:\(1 - (1 - P(E))³ = 1 - 0.98³ \approx 0.058\)
维度为 \(100\) 的随机 点 \([X_1, \dots X_{100}]\) 如果其 任何 值接近边缘,则该点接近边缘。一个 100 维点接近边缘的概率是多少?
同样,它也是:\(1 - (1 - P(E))^{100} = 1 - 0.98^{100} \approx 0.867\)有许多其他高维点的现象:例如,点之间的欧几里得距离开始收敛。


浙公网安备 33010602011771号