斯坦福-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\)有许多其他高维点的现象:例如,点之间的欧几里得距离开始收敛。
100 个二项式问题
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/100_binomial_problems/
为了娱乐(并让你有大量的练习)我编写了一个生成概率程序,可以采样二项分布问题。这里有 100 个二项式问题:
问题
问题 1: Laura 在运行一个由 50 台计算机组成的服务器集群。每次服务器崩溃的概率是 0.5。崩溃的标准差是多少?
答案 1:
设 \(X\) 为崩溃次数。\(X \sim \Bin(n = 50, p = 0.5)\) $$\begin{align} \Std(X) &= \sqrt{np(1-p)} \ &= \sqrt{50 \cdot 0.5 \cdot (1 - 0.5)}\ &= 3.54 \end{align}$$
问题 2: 你向 30 个人展示在线广告。每次展示广告被忽略的概率是 2/3。期望的广告点击次数是多少?
答案 2:
设 \(X\) 为广告点击次数。\(X \sim \Bin(n = 30, p = 1/3)\) $$\begin{align} \E[X] &= np \ &= 30 \cdot 1/3 \ &= 10 \end{align}$$
问题 3: 一个机器学习算法进行二元预测。该机器学习算法在 50 次猜测中,每次猜测错误预测的概率是 19/25。正确预测的数量大于 0 的概率是多少?
答案 3:
设 \(X\) 为正确预测的数量。\(X \sim \Bin(n = 50, p = 6/25)\) $$\begin{align} \P(X > 0) &= 1 - \P(0 <= X <= 0)\ &= 1 - {n \choose 0} p⁰ (1 - p)^{n - 0} \end{align}$$
问题 4: 风在 50 个地点独立吹拂。没有风的地点的概率是 0.5。有风的地点的期望值是多少?
答案 4:
设 \(X\) 为有风的地点数量。\(X \sim \Bin(n = 50, p = 0.5)\) $$\begin{align} \E[X] &= np \ &= 50 \cdot 0.5 \ &= 25.0 \end{align}$$
问题 5: 风在 30 个地点独立吹拂。有风的地点的标准差是多少?每个地点有风的概率是 0.6。
答案 5:
设 \(X\) 为有风的地点数量。\(X \sim \Bin(n = 30, p = 0.6)\) $$\begin{align} \Std(X) &= \sqrt{np(1-p)} \ &= \sqrt{30 \cdot 0.6 \cdot (1 - 0.6)}\ &= 2.68 \end{align}$$
问题 6: 你正在尝试挖比特币。有 50 次独立的尝试,每次尝试挖到比特币的概率是 0.6。挖到的比特币期望值是多少?
答案 6:
设 \(X\) 为挖到的比特币数量。\(X \sim \Bin(n = 50, p = 0.6)\) $$\begin{align} \E[X] &= np \ &= 50 \cdot 0.6 \ &= 30.0 \end{align}$$
问题 7: 你正在对 40 名患者测试一种新药。X 是治愈患者的数量,X ~ Bin(40, 3/10)。求 P(X 精确为 38)?
答案 7:
设 \(X\) 为治愈的患者数。\(X \sim \Bin(n = 40, p = 3/10)\) $$\begin{align} \P(X = 38) &= {n \choose 38 } p^{ 38 } (1 - p)^{n - 38 } \ &= { 40 \choose 38 } 3/10^{ 38 } (1 - 3/10)^{40 - 38 } \ &< 0.00001 \end{align}$$
问题 8: 你正在制造芯片,并对其进行缺陷测试。有 50 个独立的测试,每个测试中缺陷的概率是 0.5。缺陷的标准差是多少?
答案 8:
设 \(X\) 为缺陷数。\(X \sim \Bin(n = 50, p = 0.5)\) $$\begin{align} \Std(X) &= \sqrt{np(1-p)} \ &= \sqrt{50 \cdot 0.5 \cdot (1 - 0.5)}\ &= 3.54 \end{align}$$
问题 9: Laura 正在抛硬币 12 次。给定抛掷中反面的概率是 5/12。反面数大于或等于 2 的概率是多少?
答案 9:
设 \(X\) 为反面数。\(X \sim \Bin(n = 12, p = 5/12)\) $$\begin{align} \P(X >= 2) &= 1 - \P(0 <= X <= 1)\ &= 1 - \sum_{i = 0}^{1} {n \choose i} p^i (1 - p)^{n - i} \end{align}$$
问题 10: 你正在询问一个调查问题,回答是“喜欢”或“不喜欢”。有 30 个回答。你可以假设每个回答是独立的,其中给定回答不喜欢的概率是 1/6。喜欢数大于 28 的概率是多少?
答案 10:
设 \(X\) 为喜欢数。\(X \sim \Bin(n = 30, p = 5/6)\) $$\begin{align} \P(X > 28) &= P(29 <= X <= 30)\ &= \sum_{i = 29}^{30} {n \choose i} p^i (1 - p)^{n - i} \end{align}$$
问题 11: 一个球击中一系列 50 个柱子,它可以向左或向右弹跳。给定柱子击中时向左的概率是 0.4。右边的标准差是多少?
答案 11:
设 \(X\) 为正确数。\(X \sim \Bin(n = 50, p = 3/5)\) $$\begin{align} \Std(X) &= \sqrt{np(1-p)} \ &= \sqrt{50 \cdot 3/5 \cdot (1 - 3/5)}\ &= 3.46 \end{align}$$
问题 12: 你正在向太空发送一系列 30 个比特。给定比特无损坏的概率是 1/3。损坏的比特数为 10 的概率是多少?
答案 12:
设 \(X\) 为损坏数。\(X \sim \Bin(n = 30, p = 2/3)\) $$\begin{align} \P(X = 10) &= {n \choose 10 } p^{ 10 } (1 - p)^{n - 10 } \ &= { 30 \choose 10 } 2/3^{ 10 } (1 - 2/3)^{30 - 10 } \ &= 0.00015 \end{align}$$
问题 13: 风独立地吹过各个地点。给定地点的风的概率是 0.9。独立地点的数量是 20。有多少地点有风的概率不低于 19?
答案 13:
设 \(X\) 为有风的地点数。\(X \sim \Bin(n = 20, p = 0.9)\) $$\begin{align} \P(X >= 19) &= P(19 <= X <= 20)\ &= \sum_{i = 19}^{20} {n \choose i} p^i (1 - p)^{n - i} \end{align}$$
问题 14: 你正在向太空发送一系列比特。有 30 个独立的比特,每个比特无损坏的概率是 5/6。损坏的比特数为 21 的概率是多少?
答案 14:
设 \(X\) 为损坏的数量。\(X \sim \Bin(n = 30, p = 1/6)\) $$\begin{align} \P(X = 21) &= {n \choose 21 } p^{ 21 } (1 - p)^{n - 21 } \ &= { 30 \choose 21 } 1/6^{ 21 } (1 - 1/6)^{30 - 21 } \ &< 0.00001 \end{align}$$
问题 15: Cody 生成随机的比特字符串。有 20 个独立的比特。每个比特有 1/4 的概率产生 1。1 的数量为 11 的概率是多少?
答案 15:
设 \(X\) 为 1 的数量。\(X \sim \Bin(n = 20, p = 1/4)\) $$\begin{align} \P(X = 11) &= {n \choose 11 } p^{ 11 } (1 - p)^{n - 11 } \ &= { 20 \choose 11 } 1/4^{ 11 } (1 - 1/4)^{20 - 11 } \ &= 0.00301 \end{align}$$
问题 16: 在一家餐厅,一些顾客在用餐时要求喝水。随机选取了 40 名顾客,其中给定顾客要求水的概率是 9/20。请求水的数量为 16 的概率是多少?
答案 16:
设 \(X\) 为请求水的数量。\(X \sim \Bin(n = 40, p = 9/20)\) $$\begin{align} \P(X = 16) &= {n \choose 16 } p^{ 16 } (1 - p)^{n - 16 } \ &= { 40 \choose 16 } 9/20^{ 16 } (1 - 9/20)^{40 - 16 } \ &= 0.10433 \end{align}$$
问题 17: 一个学生在考试中随机猜测 12 个问题。正确答案的期望数量是多少?给定问题的正确答案概率是 5/12。
答案 17:
设 \(X\) 为正确答案的数量。\(X \sim \Bin(n = 12, p = 5/12)\) $$\begin{align} \E[X] &= np \ &= 12 \cdot 5/12 \ &= 5 \end{align}$$
问题 18: Laura 正在尝试挖比特币。挖到的比特币数量可以用随机变量 X 表示。X ~ Bin(n = 100, p = 1/2)。X 等于 53 的概率是多少?
答案 18:
设 \(X\) 为挖到的比特币数量。\(X \sim \Bin(n = 100, p = 1/2)\) $$\begin{align} \P(X = 53) &= {n \choose 53 } p^{ 53 } (1 - p)^{n - 53 } \ &= { 100 \choose 53 } 1/2^{ 53 } (1 - 1/2)^{100 - 53 } \ &= 0.06659 \end{align}$$
问题 19: 你正在向客户展示在线广告。广告被展示给 100 个人。给定展示的广告被忽略的概率是 1/2。广告点击的标准差是多少?
答案 19:
设 \(X\) 为广告点击的数量。\(X \sim \Bin(n = 100, p = 0.5)\) $$\begin{align} \Std(X) &= \sqrt{np(1-p)} \ &= \sqrt{100 \cdot 0.5 \cdot (1 - 0.5)}\ &= 5.00 \end{align}$$
问题 20: 你正在运行一个由 40 台计算机组成的服务器集群。每台计算机在服务器上继续工作的概率是 5/8。崩溃的期望数量是多少?
答案 20:
设 \(X\) 为崩溃的数量。\(X \sim \Bin(n = 40, p = 3/8)\) $$\begin{align} \E[X] &= np \ &= 40 \cdot 3/8 \ &= 15 \end{align}$$
问题 21: 你正在将 100 个字符串哈希到散列表中。给定字符串哈希到第一个桶的概率是 3/20。哈希到第一个桶的数量大于或等于 97 的概率是多少?
答案 21:
设 \(X\) 为到达第一个桶的哈希数量。\(X \sim \Bin(n = 100, p = 3/20)\) $$\begin{align} \P(X >= 97) &= P(97 <= X <= 100)\ &= \sum_{i = 97}^{100} {n \choose i} p^i (1 - p)^{n - i} \end{align}$$
问题 22: 你在一个有 50 个选民的大选中。每个选票投给你的概率是 6/25。求你得到的选票数量少于 2 的概率?
答案 22:
设 \(X\) 为你得到的选票数量。\(X \sim \Bin(n = 50, p = 6/25)\) $$\begin{align} \P(X < 2) &= P(0 <= X <= 1)\ &= \sum_{i = 0}^{1} {n \choose i} p^i (1 - p)^{n - i} \end{align}$$
问题 23: Irina 正在向太空发送一个 40 位的比特流。每个比特损坏的概率是 3/4。求损坏的数量为 22 的概率?
答案 23:
设 \(X\) 为损坏的数量。\(X \sim \Bin(n = 40, p = 3/4)\) $$\begin{align} \P(X = 22) &= {n \choose 22 } p^{ 22 } (1 - p)^{n - 22 } \ &= { 40 \choose 22 } 3/4^{ 22 } (1 - 3/4)^{40 - 22 } \ &= 0.00294 \end{align}$$
问题 24: 你正在将 100 个字符串哈希到一个散列表中。给定字符串哈希到第一个桶的概率是 9/50。求到达第一个桶的哈希数量大于 97 的概率?
答案 24:
设 \(X\) 为到达第一个桶的哈希数量。\(X \sim \Bin(n = 100, p = 9/50)\) $$\begin{align} \P(X > 97) &= P(98 <= X <= 100)\ &= \sum_{i = 98}^{100} {n \choose i} p^i (1 - p)^{n - i} \end{align}$$
问题 25: 你生成随机的比特串。有 100 个独立的比特。给定比特为 1 的概率是 3/25。求 1 的数量小于 97 的概率?
答案 25:
设 \(X\) 为 1 的数量。\(X \sim \Bin(n = 100, p = 3/25)\) $$\begin{align} \P(X < 97) &= 1 - \P(97 <= X <= 100)\ &= 1 - \sum_{i = 97}^{100} {n \choose i} p^i (1 - p)^{n - i} \end{align}$$
问题 26: 你在制造玩具并测试缺陷。求缺陷数量大于 1 的概率?给定测试中非缺陷的概率是 16/25,你测试了 50 个物品。
答案 26:
设 \(X\) 为缺陷的数量。\(X \sim \Bin(n = 50, p = 9/25)\) $$\begin{align} \P(X > 1) &= 1 - \P(0 <= X <= 1)\ &= 1 - \sum_{i = 0}^{1} {n \choose i} p^i (1 - p)^{n - i} \end{align}$$
问题 27: Laura 正在向太空发送一个 40 位的比特流。损坏的数量可以用随机变量 X 表示。X 是一个二项分布,n = 40,p = 3/4。求 P(X = 25)?
答案 27:
设 \(X\) 为损坏的数量。\(X \sim \Bin(n = 40, p = 3/4)\) $$\begin{align} \P(X = 25) &= {n \choose 25 } p^{ 25 } (1 - p)^{n - 25 } \ &= { 40 \choose 25 } 3/4^{ 25 } (1 - 3/4)^{40 - 25 } \ &= 0.02819 \end{align}$$
问题 28: 进行了 100 次试验。求成功的数量为 78 的概率?每次试验成功的概率是 1/2。
答案 28:
设 \(X\) 为成功的数量。\(X \sim \Bin(n = 100, p = 1/2)\) $$\begin{align} \P(X = 78) &= {n \choose 78 } p^{ 78 } (1 - p)^{n - 78 } \ &= { 100 \choose 78 } 1/2^{ 78 } (1 - 1/2)^{100 - 78 } \ &< 0.00001 \end{align}$$
问题 29: 你抛硬币。你抛了 20 次。每次抛硬币出现尾巴的概率是 1/10。正面的标准差是多少?
答案 29:
设 \(X\) 为正面的数量。\(X \sim \Bin(n = 20, p = 0.9)\) $$\begin{align} \Std(X) &= \sqrt{np(1-p)} \ &= \sqrt{20 \cdot 0.9 \cdot (1 - 0.9)}\ &= 1.34 \end{align}$$
问题 30: 伊琳娜向 12 个人展示在线广告。每次展示广告被点击的概率是 5/12。广告点击数少于或等于 11 的概率是多少?
答案 30:
设 \(X\) 为广告点击的数量。\(X \sim \Bin(n = 12, p = 5/12)\) $$\begin{align} \P(X <= 11) &= 1 - \P(12 <= X <= 12)\ &= 1 - {n \choose 12} p¹² (1 - p)^{n - 12} \end{align}$$
问题 31: 你抛硬币 50 次。每次抛硬币出现正面的概率是 19/25。尾巴的标准差是多少?
答案 31:
设 \(X\) 为尾巴的数量。\(X \sim \Bin(n = 50, p = 6/25)\) $$\begin{align} \Std(X) &= \sqrt{np(1-p)} \ &= \sqrt{50 \cdot 6/25 \cdot (1 - 6/25)}\ &= 3.02 \end{align}$$
问题 32: 你在一个有 100 名选民的选举中参选。每次投票给你票的概率是 1/4。你得到的票数少于或等于 97 的概率是多少?
答案 32:
设 \(X\) 为你得到的票数。\(X \sim \Bin(n = 100, p = 1/4)\) $$\begin{align} \P(X <= 97) &= 1 - \P(98 <= X <= 100)\ &= 1 - \sum_{i = 98}^{100} {n \choose i} p^i (1 - p)^{n - i} \end{align}$$
问题 33: 你在运行一个由 40 台计算机组成的服务器集群。崩溃数少于或等于 39 的概率是多少?每台服务器上计算机继续工作的概率是 3/4。
答案 33:
设 \(X\) 为崩溃的数量。\(X \sim \Bin(n = 40, p = 1/4)\) $$\begin{align} \P(X <= 39) &= 1 - \P(40 <= X <= 40)\ &= 1 - {n \choose 40} p⁴⁰ (1 - p)^{n - 40} \end{align}$$
问题 34: 沃迪正在向太空发送一串比特。沃迪发送了 100 个比特。每个比特发生损坏的概率是 1/2。损坏的标准差是多少?
答案 34:
设 \(X\) 为损坏的数量。\(X \sim \Bin(n = 100, p = 1/2)\) $$\begin{align} \Std(X) &= \sqrt{np(1-p)} \ &= \sqrt{100 \cdot 1/2 \cdot (1 - 1/2)}\ &= 5.00 \end{align}$$
问题 35: 一个学生在 100 道题的考试中随机猜测。每道题答错的概率是 0.5。答对题数多于 97 的概率是多少?
答案 35:
设 \(X\) 为答对的题数。\(X \sim \Bin(n = 100, p = 1/2)\) $$\begin{align} \P(X > 97) &= P(98 <= X <= 100)\ &= \sum_{i = 98}^{100} {n \choose i} p^i (1 - p)^{n - i} \end{align}$$
问题 36: 你在测试一种新药。每个试验治愈患者的概率是 0.5。有 10 次独立的试验。治愈患者的期望数是多少?
答案 36:
设 \(X\) 为治愈患者数。\(X \sim \Bin(n = 10, p = 0.5)\) $$\begin{align} \E[X] &= np \ &= 10 \cdot 0.5 \ &= 5.0 \end{align}$$
问题 37: 一个球击中一系列的柱子,它可以向右或向左移动。独立击中柱子的次数是 100 次。每次击中柱子向右的概率是 0.5。向右的标准差是多少?
答案 37:
设 \(X\) 为正确次数。\(X \sim \Bin(n = 100, p = 0.5)\) $$\begin{align} \Std(X) &= \sqrt{np(1-p)} \ &= \sqrt{100 \cdot 0.5 \cdot (1 - 0.5)}\ &= 5.00 \end{align}$$
问题 38: 你抛硬币 40 次。每次抛硬币正面的概率是 1/2。正面次数为 38 的概率是多少?
答案 38:
设 \(X\) 为正面次数。\(X \sim \Bin(n = 40, p = 1/2)\) $$\begin{align} \P(X = 38) &= {n \choose 38 } p^{ 38 } (1 - p)^{n - 38 } \ &= { 40 \choose 38 } 1/2^{ 38 } (1 - 1/2)^{40 - 38 } \ &< 0.00001 \end{align}$$
问题 39: 进行了 100 次试验,每次试验成功的概率是 1/2。成功的标准差是多少?
答案 39:
设 \(X\) 为成功次数。\(X \sim \Bin(n = 100, p = 1/2)\) $$\begin{align} \Std(X) &= \sqrt{np(1-p)} \ &= \sqrt{100 \cdot 1/2 \cdot (1 - 1/2)}\ &= 5.00 \end{align}$$
问题 40: 你尝试挖比特币。有 40 次独立的尝试。每次尝试挖到比特币的概率是 3/10。挖到比特币次数为 19 的概率是多少?
答案 40:
设 \(X\) 为挖到的比特币数。\(X \sim \Bin(n = 40, p = 3/10)\) $$\begin{align} \P(X = 19) &= {n \choose 19 } p^{ 19 } (1 - p)^{n - 19 } \ &= { 40 \choose 19 } 3/10^{ 19 } (1 - 3/10)^{40 - 19 } \ &= 0.00852 \end{align}$$
问题 41: 进行了 20 次试验。每次试验失败的概率是 0.5。成功的次数为 6 的概率是多少?
答案 41:
设 \(X\) 为成功次数。\(X \sim \Bin(n = 20, p = 0.5)\) $$\begin{align} \P(X = 6) &= {n \choose 6 } p^{ 6 } (1 - p)^{n - 6 } \ &= { 20 \choose 6 } 0.5^{ 6 } (1 - 0.5)^{20 - 6 } \ &= 0.03696 \end{align}$$
问题 42: 你在抛硬币。反面次数为 0 的概率是多少?有 30 次独立的抛硬币,每次抛硬币正面的概率是 5/6。
答案 42:
设 \(X\) 为反面次数。\(X \sim \Bin(n = 30, p = 1/6)\) $$\begin{align} \P(X = 0) &= {n \choose 0 } p^{ 0 } (1 - p)^{n - 0 } \ &= { 30 \choose 0 } 1/6^{ 0 } (1 - 1/6)^{30 - 0 } \ &= 0.00421 \end{align}$$
问题 43: 在一家餐厅,一些顾客在用餐时要求提供水。随机抽取了 20 名顾客,每位顾客有 1/4 的概率不会要求水。要求水的顾客数量为 14 的概率是多少?
答案 43:
设 \(X\) 为要求水的次数。\(X \sim \Bin(n = 20, p = 3/4)\) $$\begin{align} \P(X = 14) &= {n \choose 14 } p^{ 14 } (1 - p)^{n - 14 } \ &= { 20 \choose 14 } 3/4^{ 14 } (1 - 3/4)^{20 - 14 } \ &= 0.16861 \end{align}$$
问题 44: 一名学生随机猜测考试中的答案。每次回答错误的概率是 3/8。独立问题的数量是 40。正确答案数量不超过 37 的概率是多少?
答案 44:
设 \(X\) 为正确答案的数量。\(X \sim \Bin(n = 40, p = 5/8)\) $$\begin{align} \P(X \leq 37) &= 1 - \P(38 \leq X \leq 40)\ &= 1 - \sum_{i = 38}^{40} {n \choose i} p^i (1 - p)^{n - i} \end{align}$$
问题 45: 你正在一场选举中拥有 30 名选民。每次投票给你票的概率是 3/5。你获得的选票的标准差是多少?
答案 45:
设 \(X\) 为你获得的选票数。\(X \sim \Bin(n = 30, p = 3/5)\) $$\begin{align} \Std(X) &= \sqrt{np(1-p)} \ &= \sqrt{30 \cdot 3/5 \cdot (1 - 3/5)}\ &= 2.68 \end{align}$$
问题 46: Charlotte 正在抛掷一枚硬币 100 次。每次抛掷出现 tails 的概率是 0.5。出现 tails 的次数大于 2 的概率是多少?
答案 46:
设 \(X\) 为出现 tails 的次数。\(X \sim \Bin(n = 100, p = 0.5)\) $$\begin{align} \P(X > 2) &= 1 - \P(0 \leq X \leq 2)\ &= 1 - \sum_{i = 0}^{2} {n \choose i} p^i (1 - p)^{n - i} \end{align}$$
问题 47: 你正在尝试挖比特币。你尝试了 50 次。每次尝试不挖到比特币的概率是 3/5。挖到的比特币数量为 14 的概率是多少?
答案 47:
设 \(X\) 为挖到的比特币数量。\(X \sim \Bin(n = 50, p = 2/5)\) $$\begin{align} \P(X = 14) &= {n \choose 14 } p^{ 14 } (1 - p)^{n - 14 } \ &= { 50 \choose 14 } 2/5^{ 14 } (1 - 2/5)^{50 - 14 } \ &= 0.02597 \end{align}$$
问题 48: 你正在对 100 名患者进行一种新药测试。在给定试验中,治愈患者的概率是 3/25。治愈患者的数量不少于 97 的概率是多少?
答案 48:
设 \(X\) 为治愈的患者数量。\(X \sim \Bin(n = 100, p = 3/25)\) $$\begin{align} \P(X \geq 97) &= P(97 \leq X \leq 100)\ &= \sum_{i = 97}^{100} {n \choose i} p^i (1 - p)^{n - i} \end{align}$$
问题 49: 风独立地吹过 40 个地点。有风的地点数量为 40 的概率是多少?每个地点无风的概率是 11/20。
答案 49:
设 \(X\) 为有风的位置的数量。\(X \sim \Bin(n = 40, p = 9/20)\)
问题 50: 你正在向 30 个人展示在线广告。每个广告被点击的概率是 1/6。点击数量的概率小于或等于 28 的概率是多少?
答案 50:
设 \(X\) 为广告点击的数量。\(X \sim \Bin(n = 30, p = 1/6)\)
问题 51: 你正在抛硬币。你抛了 40 次硬币,每次抛硬币出现正面的概率是 7/8。尾巴的标准差是多少?
答案 51:
设 \(X\) 为尾巴的数量。\(X \sim \Bin(n = 40, p = 1/8)\)
问题 52: Cody 正在向太空发送比特流。每个比特不发生损坏的概率是 2/5,共有 20 个独立的比特。损坏的期望值是多少?
答案 52:
设 \(X\) 为损坏的数量。\(X \sim \Bin(n = 20, p = 3/5)\)
问题 53: 你正在竞选。有 12 个独立的选票,每个选票投给你的概率是 5/6。投给你的选票数量大于或等于 9 的概率是多少?
答案 53:
设 \(X\) 为对你投票的数量。\(X \sim \Bin(n = 12, p = 5/6)\)
问题 54: 你正在抛硬币。尾巴的数量可以用随机变量 X 表示。X 是 Bin(n = 30, p = 5/6)。X = 1 的概率是多少?
答案 54:
设 \(X\) 为尾巴的数量。\(X \sim \Bin(n = 30, p = 5/6)\)
问题 55: 在一家餐厅,一些顾客在用餐时要求加水。随机抽取了 100 名顾客,其中每个顾客要求加水的概率是 0.3。期望请求的水的数量是多少?
答案 55:
设 \(X\) 为请求的水的数量。\(X \sim \Bin(n = 100, p = 0.3)\)
问题 56: 你正在将字符串哈希到散列表中。有 30 个字符串被哈希。每个字符串哈希到第一个桶的概率是 1/6。到达第一个桶的期望哈希数量是多少?
答案 56:
设 \(X\) 为到达第一个桶的哈希数量。\(X \sim \Bin(n = 30, p = 1/6)\)
问题 57: 你抛硬币 100 次。正面朝上的概率是每次抛掷的 19/20。正面朝上的次数大于或等于 98 的概率是多少?
答案 57:
设\(X\)为正面朝上的数量。\(X \sim \Bin(n = 100, p = 1/20)\)
问题 58: 伊琳娜正在运行一个服务器集群。服务器崩溃的数量少于 99 的概率是多少?服务器有 100 台计算机,每台计算机独立崩溃,给定服务器上计算机继续工作的概率是 22/25。
答案 58:
设\(X\)为崩溃的数量。\(X \sim \Bin(n = 100, p = 3/25)\)
问题 59: 你正在制造椅子并检测缺陷。你检测了 100 个对象。每个测试中非缺陷的概率是 1/2。缺陷数量不超过 97 的概率是多少?
答案 59:
设\(X\)为缺陷数量。\(X \sim \Bin(n = 100, p = 1/2)\)
问题 60: 在一家餐厅,一些顾客在用餐时要求喝水。有 50 位顾客。你可以假设每位顾客是独立的。每位顾客要求喝水的概率是 0.2。期望有多少人要求喝水?
答案 60:
设\(X\)为要求喝水的数量。\(X \sim \Bin(n = 50, p = 0.2)\)
问题 61: 你向 40 人展示在线广告。每次展示广告被忽略的概率是 1/4。广告点击次数为 9 的概率是多少?
答案 61:
设\(X\)为广告点击的数量。\(X \sim \Bin(n = 40, p = 3/4)\)
问题 62: 进行了 100 次试验。每次试验有 22/25 的概率导致失败。成功的标准差是多少?
答案 62:
设\(X\)为成功数量。\(X \sim \Bin(n = 100, p = 3/25)\)
问题 63: 一个机器学习算法进行二元预测。有 12 次独立的猜测,每次猜测错误预测的概率是 1/6。正确预测的期望数量是多少?
答案 63:
设\(X\)为正确预测的数量。\(X \sim \Bin(n = 12, p = 5/6)\)
问题 64: 沃迪正在向客户展示在线广告。每个展示的广告被点击的概率是 1/2。广告被展示给 100 个人。平均点击次数是多少?
答案 64:
设 \(X\) 为广告点击次数。\(X \sim \Bin(n = 100, p = 1/2)\) $$\begin{align} \E[X] &= np \ &= 100 \cdot 1/2 \ &= 50 \end{align}$$
问题 65: 夏洛特正在对 50 名患者测试一种新药。每次试验治愈患者的概率是 1/5。治愈患者数量为 12 的概率是多少?
答案 65:
设 \(X\) 为治愈患者数。\(X \sim \Bin(n = 50, p = 1/5)\) $$\begin{align} \P(X = 12) &= {n \choose 12 } p^{ 12 } (1 - p)^{n - 12 } \ &= { 50 \choose 12 } 1/5^{ 12 } (1 - 1/5)^{50 - 12 } \ &= 0.10328 \end{align}$$
问题 66: 你正在竞选。你的投票数可以用随机变量 X 表示。X 是 Bin(n = 50, p = 0.4)。P(X 精确等于 8) 是多少?
答案 66:
设 \(X\) 为为你投票的人数。\(X \sim \Bin(n = 50, p = 0.4)\) $$\begin{align} \P(X = 8) &= {n \choose 8 } p^{ 8 } (1 - p)^{n - 8 } \ &= { 50 \choose 8 } 0.4^{ 8 } (1 - 0.4)^{50 - 8 } \ &= 0.00017 \end{align}$$
问题 67: 伊琳娜正在抛硬币 100 次。每次抛硬币出现正面的概率是 1/2。反面次数小于或等于 99 的概率是多少?
答案 67:
设 \(X\) 为反面次数。\(X \sim \Bin(n = 100, p = 0.5)\) $$\begin{align} \P(X <= 99) &= 1 - \P(100 <= X <= 100)\ &= 1 - {n \choose 100} p¹⁰⁰ (1 - p)^{n - 100} \end{align}$$
问题 68: 你正在制造飞机,并测试缺陷。你测试了 30 个对象,每次测试出现缺陷的概率是 5/6。缺陷数量为 14 的概率是多少?
答案 68:
设 \(X\) 为缺陷数。\(X \sim \Bin(n = 30, p = 5/6)\) $$\begin{align} \P(X = 14) &= {n \choose 14 } p^{ 14 } (1 - p)^{n - 14 } \ &= { 30 \choose 14 } 5/6^{ 14 } (1 - 5/6)^{30 - 14 } \ &< 0.00001 \end{align}$$
问题 69: 你正在抛硬币 20 次。正面次数可以用随机变量 X 表示。X 是 20 次试验的二项分布。每次试验独立成功,概率为 1/4。X 的标准差是多少?
答案 69:
设 \(X\) 为正面次数。\(X \sim \Bin(n = 20, p = 1/4)\) $$\begin{align} \Std(X) &= \sqrt{np(1-p)} \ &= \sqrt{20 \cdot 1/4 \cdot (1 - 1/4)}\ &= 1.94 \end{align}$$
问题 70: 你正在对 100 个人进行问卷调查,问题回答是“喜欢”或“不喜欢”。X 等于 4 的概率是多少?点赞数可以用随机变量 X 表示。X 是 Bin(100, 0.5)。
答案 70:
设 \(X\) 为点赞数。\(X \sim \Bin(n = 100, p = 0.5)\) $$\begin{align} \P(X = 4) &= {n \choose 4 } p^{ 4 } (1 - p)^{n - 4 } \ &= { 100 \choose 4 } 0.5^{ 4 } (1 - 0.5)^{100 - 4 } \ &< 0.00001 \end{align}$$
问题 71: 你正在抛硬币。有 20 次独立的抛掷,每次抛掷得到尾部的概率是 0.9。尾部的标准差是多少?
答案 71:
设 \(X\) 为尾部次数。\(X \sim \Bin(n = 20, p = 0.9)\) $$\begin{align} \Std(X) &= \sqrt{np(1-p)} \ &= \sqrt{20 \cdot 0.9 \cdot (1 - 0.9)}\ &= 1.34 \end{align}$$
问题 72: 你正在抛硬币。有 50 次独立的抛掷。每次抛掷得到尾部的概率是 4/5。成功的期望值是多少?
答案 72:
设 \(X\) 为头部次数。\(X \sim \Bin(n = 50, p = 1/5)\) $$\begin{align} \E[X] &= np \ &= 50 \cdot 1/5 \ &= 10 \end{align}$$
问题 73: 你正在向 100 个人进行调查,调查问题是“喜欢”或“不喜欢”。不喜欢的概率是 41/50。喜欢的标准差是多少?
答案 73:
设 \(X\) 为点赞次数。\(X \sim \Bin(n = 100, p = 9/50)\) $$\begin{align} \Std(X) &= \sqrt{np(1-p)} \ &= \sqrt{100 \cdot 9/50 \cdot (1 - 9/50)}\ &= 3.84 \end{align}$$
问题 74: 在一家餐厅,一些顾客在用餐时要求喝水。每位顾客要求喝水的概率是 0.6,共有 30 位独立的顾客。预计会有多少位顾客要求喝水?
答案 74:
设 \(X\) 为要求喝水的次数。\(X \sim \Bin(n = 30, p = 0.6)\) $$\begin{align} \E[X] &= np \ &= 30 \cdot 0.6 \ &= 18.0 \end{align}$$
问题 75: 有 40 次独立的试验,每次试验失败的概率是 0.5。成功的期望值是多少?
答案 75:
设 \(X\) 为成功次数。\(X \sim \Bin(n = 40, p = 1/2)\) $$\begin{align} \E[X] &= np \ &= 40 \cdot 1/2 \ &= 20 \end{align}$$
问题 76: Imran 正在向 30 个人展示在线广告。每次展示广告点击的概率是 5/6。广告点击的标准差是多少?
答案 76:
设 \(X\) 为广告点击次数。\(X \sim \Bin(n = 30, p = 5/6)\) $$\begin{align} \Std(X) &= \sqrt{np(1-p)} \ &= \sqrt{30 \cdot 5/6 \cdot (1 - 5/6)}\ &= 2.04 \end{align}$$
问题 77: 你正在运行一个服务器集群。崩溃次数为 1 的概率是多少?服务器有 30 台计算机,它们独立崩溃,每台服务器有 1/3 的概率导致崩溃。
答案 77:
设 \(X\) 为碰撞次数。\(X \sim \Bin(n = 30, p = 1/3)\) $$\begin{align} \P(X = 1) &= {n \choose 1 } p^{ 1 } (1 - p)^{n - 1 } \ &= { 30 \choose 1 } 1/3^{ 1 } (1 - 1/3)^{30 - 1 } \ &= 0.00008 \end{align}$$
问题 78: Cody 正在运行一个包含 40 台计算机的服务器集群。\(P(X <= 39)\) 是多少?崩溃次数可以用随机变量 \(X\) 表示。\(X\) 服从二项分布 \(Bin(n = 40, p = 3/4)\)。
答案 78:
设 \(X\) 为碰撞次数。\(X \sim \Bin(n = 40, p = 3/4)\) $$\begin{align} \P(X <= 39) &= 1 - \P(40 <= X <= 40)\ &= 1 - {n \choose 40} p⁴⁰ (1 - p)^{n - 40} \end{align}$$
问题 79: 你将字符串哈希到散列表中。每个字符串哈希到第一个桶的概率是 5/6。有 30 个独立的字符串哈希。到达第一个桶的哈希数量大于或等于 29 的概率是多少?
答案 79:
设 \(X\) 为到达第一个桶的哈希数量。\(X \sim \Bin(n = 30, p = 5/6)\) $$\begin{align} \P(X >= 29) &= P(29 <= X <= 30)\ &= \sum_{i = 29}^{30} {n \choose i} p^i (1 - p)^{n - i} \end{align}$$
问题 80: 伊丽娜在抛硬币。伊丽娜抛硬币 30 次,每次抛硬币正面朝上的概率是 0.4。尾巴的数量为 19 的概率是多少?
答案 80:
设 \(X\) 为反面朝上的次数。\(X \sim \Bin(n = 30, p = 0.6)\) $$\begin{align} \P(X = 19) &= {n \choose 19 } p^{ 19 } (1 - p)^{n - 19 } \ &= { 30 \choose 19 } 0.6^{ 19 } (1 - 0.6)^{30 - 19 } \ &= 0.13962 \end{align}$$
问题 81: 你在做一个调查问题,回答是“喜欢”或“不喜欢”。给定回答中“喜欢”的概率是 1/2。你向 100 人发放调查问卷。点赞数量不少于 2 的概率是多少?
答案 81:
设 \(X\) 为点赞数量。\(X \sim \Bin(n = 100, p = 1/2)\) $$\begin{align} \P(X >= 2) &= 1 - \P(0 <= X <= 1)\ &= 1 - \sum_{i = 0}^{1} {n \choose i} p^i (1 - p)^{n - i} \end{align}$$
问题 82: 风在各个位置上独立吹拂。独立的位置数量是 100。给定位置有风的概率是 3/20。有风的位置数量为 93 的概率是多少?
答案 82:
设 \(X\) 为有风的位置数量。\(X \sim \Bin(n = 100, p = 3/20)\) $$\begin{align} \P(X = 93) &= {n \choose 93 } p^{ 93 } (1 - p)^{n - 93 } \ &= { 100 \choose 93 } 3/20^{ 93 } (1 - 3/20)^{100 - 93 } \ &< 0.00001 \end{align}$$
问题 83: 你在抛硬币。每次抛硬币反面朝上的概率是 0.9。你抛硬币 50 次。正面朝上的期望数量是多少?
答案 83:
设 \(X\) 为正面朝上的次数。\(X \sim \Bin(n = 50, p = 0.1)\) $$\begin{align} \E[X] &= np \ &= 50 \cdot 0.1 \ &= 5.0 \end{align}$$
问题 84: 一个机器学习算法做出二元预测。正确预测的数量小于或等于 0 的概率是多少?在给定猜测上的错误预测的概率是 1/4。独立的猜测次数是 40 次。
答案 84:
设 \(X\) 为正确预测的数量。\(X \sim \Bin(n = 40, p = 3/4)\) $$\begin{align} \P(X <= 0) &= P(0 <= X <= 0)\ &= {n \choose 0} p⁰ (1 - p)^{n - 0} \end{align}$$
问题 85: 风在 20 个位置上独立吹拂。每个位置有风的概率是 1/2。有风的位置的标准差是多少?
答案 85:
设 \(X\) 为有风的地点数量。\(X \sim \Bin(n = 20, p = 1/2)\) $$\begin{align} \Std(X) &= \sqrt{np(1-p)} \ &= \sqrt{20 \cdot 1/2 \cdot (1 - 1/2)}\ &= 2.24 \end{align}$$
问题 86: 每次试验失败的概率是 7/10,独立试验的数量是 100。成功次数为 7 的概率是多少?
答案 86:
设 \(X\) 为成功次数。\(X \sim \Bin(n = 100, p = 0.3)\) $$\begin{align} \P(X = 7) &= {n \choose 7 } p^{ 7 } (1 - p)^{n - 7 } \ &= { 100 \choose 7 } 0.3^{ 7 } (1 - 0.3)^{100 - 7 } \ &< 0.00001 \end{align}$$
问题 87: 你生成随机的比特字符串。1s 的期望值是多少?有 100 个独立的比特,每个比特为 1 的概率是 0.1。
答案 87:
设 \(X\) 为 1 的数量。\(X \sim \Bin(n = 100, p = 0.1)\) $$\begin{align} \E[X] &= np \ &= 100 \cdot 0.1 \ &= 10.0 \end{align}$$
问题 88: 你正在对病人进行新药测试。每次试验治愈患者的概率是 3/5。有 30 次独立的试验。治愈患者数量大于或等于 1 的概率是多少?
答案 88:
设 \(X\) 为治愈的患者数量。\(X \sim \Bin(n = 30, p = 3/5)\) $$\begin{align} \P(X >= 1) &= 1 - \P(0 <= X <= 0)\ &= 1 - {n \choose 0} p⁰ (1 - p)^{n - 0} \end{align}$$
问题 89: 一个学生在考试中随机猜测。每道题正确答案的概率是 0.9,考试有 20 道题。正确答案的标准差是多少?
答案 89:
设 \(X\) 为正确答案的数量。\(X \sim \Bin(n = 20, p = 0.9)\) $$\begin{align} \Std(X) &= \sqrt{np(1-p)} \ &= \sqrt{20 \cdot 0.9 \cdot (1 - 0.9)}\ &= 1.34 \end{align}$$
问题 90: 一个学生在 40 道题的考试中随机猜测。正确答案的数量是 32 的概率是多少?每道题正确答案的概率是 0.5。
答案 90:
设 \(X\) 为正确答案的数量。\(X \sim \Bin(n = 40, p = 0.5)\) $$\begin{align} \P(X = 32) &= {n \choose 32 } p^{ 32 } (1 - p)^{n - 32 } \ &= { 40 \choose 32 } 0.5^{ 32 } (1 - 0.5)^{40 - 32 } \ &= 0.00007 \end{align}$$
问题 91: 在一家餐厅,一些顾客在用餐时要求加水。从 40 名顾客中随机抽取样本,其中某个顾客不要求加水的概率是 1/4。要求加水的标准差是多少?
答案 91:
设 \(X\) 为要求加水的数量。\(X \sim \Bin(n = 40, p = 3/4)\) $$\begin{align} \Std(X) &= \sqrt{np(1-p)} \ &= \sqrt{40 \cdot 3/4 \cdot (1 - 3/4)}\ &= 2.74 \end{align}$$
问题 92: 一个机器学习算法进行二元预测。正确预测的数量可以用随机变量 X 表示。X 是 Bin(n = 30, p = 2/5)。P(X < 27) 是多少?
答案 92:
设 \(X\) 为正确预测的数量。\(X \sim \Bin(n = 30, p = 2/5)\) $$\begin{align} \P(X < 27) &= 1 - \P(27 <= X <= 30)\ &= 1 - \sum_{i = 27}^{30} {n \choose i} p^i (1 - p)^{n - i} \end{align}$$
问题 93: 伊丽娜正在抛硬币。每次抛硬币得到尾部的概率是 3/4。独立抛硬币的次数是 40。尾部数量大于 0 的概率是多少?
答案 93:
设 \(X\) 为尾部的数量。\(X \sim \Bin(n = 40, p = 3/4)\) $$\begin{align} \P(X > 0) &= 1 - \P(0 <= X <= 0)\ &= 1 - {n \choose 0} p⁰ (1 - p)^{n - 0} \end{align}$$
问题 94: 沃迪正在向太空发送一个 50 位的比特流。给定比特没有损坏的概率是 1/2。损坏的期望值是多少?
答案 94:
设 \(X\) 为损坏的数量。\(X \sim \Bin(n = 50, p = 0.5)\) $$\begin{align} \E[X] &= np \ &= 50 \cdot 0.5 \ &= 25.0 \end{align}$$
问题 95: 你正在将字符串哈希到散列表中。有 30 个独立的字符串哈希,每个字符串哈希到达第一个桶的概率是 5/6。到达第一个桶的哈希次数为 24 的概率是多少?
答案 95:
设 \(X\) 为到达第一个桶的哈希次数。\(X \sim \Bin(n = 30, p = 5/6)\) $$\begin{align} \P(X = 24) &= {n \choose 24 } p^{ 24 } (1 - p)^{n - 24 } \ &= { 30 \choose 24 } 5/6^{ 24 } (1 - 5/6)^{30 - 24 } \ &= 0.16009 \end{align}$$
问题 96: 夏洛特正在将字符串哈希到散列表中。100 个字符串被哈希,给定字符串哈希到达第一个桶的概率是 1/5。到达第一个桶的哈希次数大于或等于 1 的概率是多少?
答案 96:
设 \(X\) 为到达第一个桶的哈希次数。\(X \sim \Bin(n = 100, p = 1/5)\) $$\begin{align} \P(X >= 1) &= 1 - \P(0 <= X <= 0)\ &= 1 - {n \choose 0} p⁰ (1 - p)^{n - 0} \end{align}$$
问题 97: 你正在抛硬币。每次抛硬币得到头部的概率是 3/10,共有 100 次抛硬币。你可以假设每次抛硬币是独立的。头部数量为 0 的概率是多少?
答案 97:
设 \(X\) 为头部的数量。\(X \sim \Bin(n = 100, p = 3/10)\) $$\begin{align} \P(X = 0) &= {n \choose 0 } p^{ 0 } (1 - p)^{n - 0 } \ &= { 100 \choose 0 } 3/10^{ 0 } (1 - 3/10)^{100 - 0 } \ &< 0.00001 \end{align}$$
问题 98: 克里斯正在向太空发送一个 50 位的比特流。每个比特没有损坏的概率是 16/25。损坏的数量大于或等于 47 的概率是多少?
答案 98:
设 \(X\) 为损坏的数量。\(X \sim \Bin(n = 50, p = 9/25)\) $$\begin{align} \P(X >= 47) &= P(47 <= X <= 50)\ &= \sum_{i = 47}^{50} {n \choose i} p^i (1 - p)^{n - i} \end{align}$$
问题 99: 你正在抛硬币 30 次。尾部数量少于 29 的概率是多少?给定抛硬币得到尾部的概率是 2/3。
答案 99:
设 \(X\) 为反面出现的次数。\(X \sim \Bin(n = 30, p = 2/3)\) $$\begin{align} \P(X < 29) &= 1 - \P(29 <= X <= 30)\ &= 1 - \sum_{i = 29}^{30} {n \choose i} p^i (1 - p)^{n - i} \end{align}$$
问题 100: 你正在制造芯片,并对其进行缺陷测试。有 40 个独立的测试。给定测试中非缺陷的概率是 5/8。缺陷数量为 10 的概率是多少?
答案 100:
设 \(X\) 为缺陷的数量。\(X \sim \Bin(n = 40, p = 3/8)\) $$\begin{align} \P(X = 10) &= {n \choose 10 } p^{ 10 } (1 - p)^{n - 10 } \ &= { 40 \choose 10 } 3/8^{ 10 } (1 - 3/8)^{40 - 10 } \ &= 0.03507 \end{align}$$
赢得系列赛
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/winning_series/
金州勇士队是湾区篮球队。勇士队将在下一届 NBA 总决赛中与雄鹿队(另一支职业篮球队)进行一场最佳 7 场系列赛。如果你赢得至少 4 场比赛,他们将赢得系列赛。勇士队赢得系列赛的概率是多少?每场比赛都是独立的。每场比赛,勇士队赢得比赛的概率为 0.55。
这个问题等同于:抛一个偏硬币 7 次(得到正面的概率为 \(p=0.55\))。至少得到 4 个正面的概率是多少?

注意:不失一般性,你可以想象这两支球队总是打满 7 场比赛,无论结果如何。技术上,一旦有一支球队赢得 4 场胜利,比赛就会停止,因为比赛的结果不再影响谁获胜。然而,你可以想象他们继续比赛。
勇士队赢得系列赛的概率是多少?请将你的答案保留到小数点后三位
一个关键步骤是定义一个随机变量,并认识到它是一个二项分布。设 \(X\) 为赢得的比赛数。由于每场比赛都是独立的,\(X \sim \Bin(n=7, p =0.55)\)。问题是询问:\(\P(X \geq 4)\)?
为了回答这个问题,首先认识到:\begin{aligned}\P(X \geq 4) = &\P(X = 4) + \P(X = 5) \ &+ \P(X = 6) + \P(X = 7)\end{aligned} 这是因为问题是在询问等号右侧每个事件的“或”的概率。由于这些事件;\(X=4\),\(X=5\),等等都是互斥的,所以“或”的概率就是这些概率的和。
\begin{aligned} \P(X \geq 4) &= \P(X = 4) + \P(X = 5) \ &+ \P(X = 6) + \P(X = 7) \ &= \sum_{i=4}⁷ P(X = i) \end{aligned}
这些概率都是 PMF 问题:
\begin{aligned} \P(X \geq 4) &= \sum_{i=4}⁷ P(X = i) \ &= \sum_{i=4}⁷ {n \choose i} p^i (1-p)^{n-i} \ &= \sum_{i=4}⁷ {7 \choose i} 0.55^i \cdot 0.45^{7-i} \end{aligned}
这里是那个方程的图形表示。它代表了 PMF 中这些列的和:

到目前为止,我们有一个可以用来找到答案的方程。但我们应该如何计算它?我们可以手动计算!或者使用计算器。或者,我们可以使用 Python,特别是 scipy 包:
from scipy import stats
pr = 0
# calculate the sum
for i in range(4, 8):
# this for loop gives i in [4,5,6,7]
pr_i = stats.binom.pmf(i, n = 7, p = 0.55)
pr += pr_i
print(f'P(X >= 4) = {pr}')
这产生了正确的答案:
P(X >= 4) = 0.6082877968750001
有缺陷的解决方案
研究这个问题的一个好原因是这种常见的误解,即如何计算 \(P(X \geq 4)\)。了解为什么它是错误的很有价值。
错误地尝试重建二项分布
类似于我们定义的二项分布概率质量函数方程(参见:多次抛硬币),我们可以构建火箭队赢得七场系列赛的结果。
我们将选择 4 个火箭队获胜的槽位,我们不在乎其余的。它们可以是胜利或失败。在 7 场比赛中,选择 4 场火箭队获胜的比赛。有 \({7 \choose 4}\) 种这样做的方式。每个特定选择四场比赛获胜的概率是 \(p⁴\),因为我们需要他们赢得这四场比赛,我们不在乎其余的。因此,概率是:
\begin{aligned} P(X \geq 4) = {7 \choose 4} p⁴ \end{aligned}
这个想法看起来不错,但不起作用。首先,我们可以通过考虑将 \(p = 1.0\) 的情况来识别问题。在这种情况下,\(P(X \geq 4) = {7 \choose 4} p⁴ = {7 \choose 4} 1⁴ = 35\)。显然,35 不是一个有效的概率(这比 1 大得多)。因此,这不可能是对的答案。
但这种方法的错误在哪里呢?让我们列举他们考虑的 35 种不同结果。设 B = 我们不知道谁会赢。设 W = 火箭队获胜。这里每个结果是对系列赛中每场比赛的分配:
(B, B, B, W, W, W, W)
(B, B, W, B, W, W, W)
(B, B, W, W, B, W, W)
(B, B, W, W, W, B, W)
(B, B, W, W, W, W, B)
(B, W, B, B, W, W, W)
(B, W, B, W, B, W, W)
(B, W, B, W, W, B, W)
(B, W, B, W, W, W, B)
(B, W, W, B, B, W, W)
(B, W, W, B, W, B, W)
(B, W, W, B, W, W, B)
(B, W, W, W, B, B, W)
(B, W, W, W, B, W, B)
(B, W, W, W, W, B, B)
(W, B, B, B, W, W, W)
(W, B, B, W, B, W, W)
(W, B, B, W, W, B, W)
(W, B, B, W, W, W, B)
(W, B, W, B, B, W, W)
(W, B, W, B, W, B, W)
(W, B, W, B, W, W, B)
(W, B, W, W, B, B, W)
(W, B, W, W, B, W, B)
(W, B, W, W, W, B, B)
(W, W, B, B, B, W, W)
(W, W, B, B, W, B, W)
(W, W, B, B, W, W, B)
(W, W, B, W, B, B, W)
(W, W, B, W, B, W, B)
(W, W, B, W, W, B, B)
(W, W, W, B, B, B, W)
(W, W, W, B, B, W, B)
(W, W, W, B, W, B, B)
(W, W, W, W, B, B, B)
实际上,这 35 种结果中的任何一种的概率都是 \(p⁴\)。例如:(W, W, W, W, B, B, B)。火箭队需要赢得前 4 场独立的比赛:\(p⁴\)。然后有三个事件,任何一支球队都可能获胜。任意一支球队获胜的概率“B”是 1。这很有道理。要么火箭队赢,要么另一支球队赢。因此,我们任何给定结果的概率,也就是上述结果集中的行,是:\(p⁴ \cdot 1³ = p⁴\)
这里的错误是,这些结果不是互斥的,但答案却将它们视为互斥。在多次抛硬币的例子中,我们构建了格式为(T, T, T, H, H, T, H)的结果。这些结果实际上是互斥的。不可能同时存在两个不同的结果列表。另一方面,在“B”代表任意一支球队都可能赢的版本中,结果确实有重叠。例如,考虑上面例子中的两行:
(B, W, W, W, B, B, W)
(B, W, W, W, B, W, B)
这些结果都可能发生(因此它们不是互斥的)。例如,如果火箭队赢得了所有 7 场比赛!或者火箭队赢得了除了第 1 场和第 5 场之外的所有比赛。这两个事件都满足。因为事件不是互斥的,如果我们想计算这些事件的“或”的概率,我们不能仅仅将每个事件的概率相加(这正是 \(P(X \geq 4) = {7 \choose 4} p⁴\) 所暗示的。相反,你需要使用包含排除法来计算 35 个事件的“或”。或者,参见我们上面提出的答案。
近似计数
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/approximate_counting/
如果你想有一个可以计数到宇宙中原子数量的计数器,但只想用 8 位存储计数器,你将可以使用下面描述的神奇概率算法!在这个例子中,我们将展示 stochastic_counter(4) 的期望返回值,其中 count 被调用四次,实际上等于四。
def stochastic_counter(true_count):
n = -1
for i in range(true_count):
n += count(n)
return 2 ** n # 2^n, aka 2 to the power of n
def count(n):
# To return 1 you need n heads. Always returns 1 if n is <= 0
for i in range(n):
if not coin_flip():
return 0
return 1
def coin_flip():
# returns true 50% of the time
return random.random() < 0.5
设 \(X\) 为在 \texttt{stochastic_counter(4)} 结束时 \(n\) 的值。注意,\(X\) 不是一个二项分布,因为每个结果的概率都会变化。
设 \(R\) 为函数的返回值。\(R = 2^X\),这是 \(X\) 的函数。使用无意识统计师定律 $$E[R] = \sum_{x} 2^x \cdot P(X=x)$$ 我们可以单独计算每个概率 \(P(X=x)\)。注意,前两次调用 count 总是返回 1。设 \(H_i\) 为第 \(i\) 次调用返回 1 的事件。设 \(T_i\) 为第 \(i\) 次调用返回 0 的事件。\(X\) 不能小于 1,因为前两次调用 count 总是返回 1。\(P(X=1) = P(T_3,T_4)\) \ \(P(X=2) = P(H_3,T_4) + P(T_3,H_4)\) \ \(P(X=3) = P(H_3, H_4)\)
在第三次调用计数时,\(n = 1\)。如果 \(H_3\),则第四次调用时 \(n=2\),循环运行两次。 $$\begin{align} P(H_3,T_4) &= P(H_3) \cdot P(T_4|H_3) \ &= \frac{1}{2} \cdot ( \frac{1}{2} + \frac{1}{4}) \end{align}$$ $$\begin{align} P(H_3,H_4) &= P(H_3) \cdot P(H_4|H_3) \ &= \frac{1}{2} \cdot \frac{1}{2} \end{align}$$
如果 \(T_3\),则第四次调用时 \(n=1\)。 $$\begin{align} P(T_3,H_4) &= P(T_3) \cdot P(H_4|T_3) \ &= \frac{1}{2} \cdot \frac{1}{2} \end{align}$$ $$\begin{align} P(T_3,T_4) &= P(T_3) \cdot P(T_4|T_3) \ &= \frac{1}{2} \cdot \frac{1}{2} \end{align}$$ 将所有内容代入: $$\begin{align} E[R] &= \sum_{x=1}³ 2^x \cdot P(X=x) \ &= 2 \cdot \frac{1}{4} + 4\cdot \frac{5}{8} + 8\cdot \frac{1}{8}\ &= 4 \end{align}$$
陪审团选择
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/jury/
在最高法院案件:Berghuis 诉 Smith 中,最高法院(美国)讨论了以下问题:“如果陪审团池中某个群体代表性不足,你如何判断?”
法官 Breyer(斯坦福校友)通过引用二项式定理开始了提问。他假设了一个场景,涉及“一个装有千个球的花瓶,其中六十个是红色,九百四十个是绿色,然后你随机选择它们……每次十二个。”根据法官 Breyer 和二项式定理,如果红球代表黑人陪审员,那么“你预计……大约三分之一的陪审团至少会有一个黑人陪审员。”
注意:在这场对话中缺失的是在做出艰难决定时,多元背景所具有的力量。
模拟:
说明:
从技术上讲,由于陪审员是随机选择的,你应该将代表性不足的陪审员数量表示为超几何随机变量(在 CS109 中我们不明确考虑的随机变量)。
然而,法官 Breyer 通过引用二项式分布来论证。这不是二项式分布的完美应用,因为二项式分布假设每个实验成功的可能性(\(p\))是相等的。由于陪审员是随机选择的,每次选择后得到少数族裔陪审员的可能性都会略有变化(并取决于选择的结果)。然而,正如我们将看到的,由于概率变化不大,二项式分布并不太偏离。
致谢:问题由 Mehran Sahami 提出并解决
眼炎分级
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/grading_eye_inflammation/
当患者有眼炎时,眼科医生会对炎症进行“分级”。在“分级”炎症时,他们随机查看患者眼睛中一个 1 毫米乘 1 毫米的平方区域,并计数他们看到的“细胞”数量。
这些计数存在不确定性。如果给定患者眼睛的真实平均细胞数是 6,医生可能仅通过偶然机会得到不同的计数(比如 4、5 或 7)。截至 2021 年,现代眼科医学对其炎症分级没有不确定性感!在这个问题中,我们将改变这一点。同时,我们将了解空间上的泊松分布。

为什么在 1x1 平方区域内观察到的细胞数量受泊松过程控制?
我们可以通过将平方区域离散化为固定数量的相等大小的桶来近似计数分布。每个桶要么有细胞,要么没有。因此,1x1 平方区域中的细胞计数是具有相等\(p\)的伯努利随机变量的和,因此可以建模为二项随机变量。这是一个近似,因为它不允许一个桶中有两个细胞。就像时间一样,如果我们使每个桶的大小无限小,这个限制就会消失,我们就会收敛到计数的真实分布。在极限情况下,即当\(n \rightarrow \infty\)时,二项分布真正由泊松随机变量表示。在这个上下文中,\(\lambda\)代表每 1$\times$1 样本的平均细胞数。见图 2。

对于一个特定的患者,细胞的真实平均速率是每 1x1 样本 5 个细胞。在单个 1x1 样本中,医生计数到 4 个细胞的概率是多少?
让\(X\)表示 1x1 样本中的细胞数量。我们注意到\(X \sim \Poi(5)\)。我们想找到\(P(X=4)\)。$$P(X=4) = \frac{5⁴ e^{-5}}{4!} \approx 0.175$$
多次观察
请注意!本节使用第三部分的概念。具体为变量独立性
对于一个特定的患者,细胞的真实平均速率是每 1mm 乘 1mm 样本 5 个细胞。为了更精确,医生在两个不同的、更大的2mm 乘 2mm样本中计数细胞。假设一个 2mm 乘 2mm 样本中的细胞发生与任何其他 2mm 乘 2mm 样本中的细胞发生独立。她计数第一个样本 20 个细胞和第二个样本 20 个细胞的概率是多少?
用 \(Y_1\) 和 \(Y_2\) 表示每个 2x2 样本中的细胞数量。由于 1x1 样本中有 5 个细胞,因此由于面积翻倍,2x2 样本中有 20 个样本,所以我们有 \(Y_1 \sim \Poi(20)\) 和 \(Y_2 \sim \Poi(20)\)。我们想找到 \(P(Y_1 = 20 \land Y_2 = 20)\)。由于两个样本中的细胞数量是独立的,这相当于找到 \(\P(Y_1 = 20) \P(Y_2=20)\)。
估计 Lambda
请注意!本节使用第五部分的概念。具体来说,最大后验炎症先验:基于数百万历史患者,医生们已经了解到真实细胞率的真实概率密度函数为:$$\begin{align} f(\lambda) = K \cdot \lambda \cdot e ^{-\frac{\lambda}{2}} \end{align}$$ 其中 \(K\) 是归一化常数,\(\lambda\) 必须大于 0。
一位医生取了一个样本并计数了 4 个细胞。给出 \(\lambda\) 更新概率密度的方程。使用“炎症先验”作为 \(\lambda\) 值的先验概率密度。你的概率密度可能包含一个常数项。
令 \(\theta\) 为真实率的随机变量。令 \(X\) 为计数的随机变量 $$\begin{align} f(\theta = \lambda | X = 4) &= \frac{P(X=4|\theta = \lambda) f(\theta = \lambda)}{P(X = 4)} \ &= \frac{\frac{\lambda^{4} e^{-\lambda}}{4!} \cdot K \cdot \lambda \cdot e^{\lambda / 2}}{P(X = 4)} \ &= \frac{K \cdot \lambda⁵ e^{-\frac{3}{2}\lambda}}{4! P(X=4)} \end{align}$$
一位医生取了一个样本并计数了 4 个细胞。\(\lambda\) 的最大后验估计是多少?
最大化前一部分计算出的参数的“后验”:$$\begin{align} \argmax_\limits\lambda \frac{K \cdot \lambda⁵ e^{-\frac{3}{2}\lambda}}{4! P(X=4)} &= \argmax_\limits\lambda \lambda⁵ e^{-\frac{3}{2}\lambda} \ \end{align}$$ 取对数(保持 argmax,并且更容易求导):$$\begin{align} &= \argmax_\limits\lambda \log \left(\lambda⁵ e^{-\frac{3}{2}\lambda} \right) \ &= \argmax_\limits\lambda \left(5 \log \lambda -\frac{3}{2}\lambda\right) \end{align}$$ 对参数求导,并令其等于 0 $$\begin{align} 0 &= \frac{\partial}{\partial \lambda} \left(5 \log \lambda -\frac{3}{2}\lambda\right) \ 0 &= \frac{5}{\lambda} -\frac{3}{2} \ \lambda &= \frac{10}{3} \end{align}$$
用文字解释一下前两部分中两个 lambda 估计之间的区别。
第一部分的估计是一个“分布”(也称为软估计),而第二部分的估计是一个单一值(也称为点估计)。前者包含关于置信度的信息。\(\lambda\) 的 MLE 估计是多少?MLE 估计不使用先验信念。对于泊松分布,MLE 估计简单地为观察值的平均值。在这种情况下,我们的单个观察值的平均值为 4。MLE 不是从单个数据点估计参数的很好工具。
病人在两天分别就诊。第一天医生计数 5 个细胞,第二天医生计数 4 个细胞。仅基于这个观察,并且将两天真实的比率视为独立,病人炎症好转的概率是多少(换句话说,他们的 \(\lambda\) 是否减少)?
设 \(\theta_1\) 为第一天的 \(\lambda\) 的随机变量,\(\theta_2\) 为第二天的 \(\lambda\) 的随机变量。 $$\begin{align} f(\theta_1 = \lambda | X = 5) &= K_1 \cdot \lambda⁶ e^{-\frac{3}{2}\lambda} \ f(\theta_2 = \lambda | X = 4) &= K_2 \cdot \lambda⁵ e^{-\frac{3}{2}\lambda} \end{align}$$ 问题是在问 \(P(\theta_1 > \theta_2)\) 是多少?有几种方法可以精确计算这个值: $$\begin{align} & \int_{\lambda_1=0}^\infty \int_{\lambda_2=0}^{\lambda_1} f(\theta_1 = \lambda_1, \theta_2 = \lambda_2) \ &= \int_{\lambda_1=0}^\infty \int_{\lambda_2=0}^{\lambda_1} f(\theta_1 = \lambda_1) \cdot f(\theta_2 = \lambda_2) \ &= \int_{\lambda_1=0}^\infty f(\theta_1 = \lambda_1) \int_{\lambda_2=0}^{\lambda_1} f(\theta_2 = \lambda_2) \ &= \int_{\lambda_1=0}^\infty K_1 \cdot \lambda⁶ e^{-\frac{3}{2}\lambda} \int_{\lambda_2=0}^{\lambda_1} K_2 \cdot \lambda⁵ e^{-\frac{3}{2}\lambda} \end{align}$$
成绩并非正态分布
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/grades_not_normal/
有时候你只是想压缩正态分布:
对数正态
对数正态分布是通过对正态分布的随机变量应用一种特殊的“压缩”函数得到的连续分布。压缩函数将正态分布可以取的所有值映射到 0 到 1 的范围内。如果 \(X \sim \text{LogitNormal}(\mu, \sigma²)\),它具有以下特性: $$\begin{align} \text{PDF:}&& &f_X(x) = \begin{cases} \frac{1}{\sigma(\sqrt{2\pi})x(1 - x)}e^{-\frac{(\text{logit}(x) - \mu)²}{2\sigma²}} & \text{if } 0 < x < 1\ 0 & \text{otherwise} \end{cases} \ \text{CDF:} && &F_X(x) = \Phi\Big(\frac{\text{logit}(x) - \mu}{\sigma}\Big)\ \text{Where:} && &\text{logit}(x) = \text{log}\Big(\frac{x}{1-x}\Big) \end{align}$$
一种新的理论表明,对数正态分布比传统使用的正态分布更好地拟合考试成绩分布。让我们来测试一下!我们有一组考试分数,考试最低可能分数为 0,最高可能分数为 1,我们正在尝试在两个假设之间做出选择:
\(H_1\):我们的成绩分数服从 \(X\sim \text{Normal}(\mu = 0.7, \sigma² = 0.2²)\)。
\(H_2\):我们的成绩分数服从 \(X\sim \text{LogitNormal}(\mu = 1.0, \sigma² = 0.9²)\)。

在正常假设下,\(H_1\),\(P(0.9 < X < 1.0)\) 是多少?请提供两位小数的数值答案。
在对数正态假设下,\(H_2\),\(P(0.9 < X < 1.0)\) 是多少?
在正常假设下,\(H_1\),\(X\) 可以取的最大值是多少?
在观察任何考试分数之前,你假设(a)两个假设中的一个正确,并且(b)最初,每个假设被正确选择的概率相等,\(P(H_1)=P(H_2)=\frac{1}{2}\)。然后你观察到一个单独的考试分数,\(X = 0.9\)。你对对数正态假设正确的更新概率是多少?
维度诅咒
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/curse_of_dimensionality/
在机器学习中,就像计算机科学的许多领域一样,经常涉及高维点,高维空间具有一些令人惊讶的概率性质。
一个随机的 值 \(X_i\) 是一个均匀分布的 Uni(0, 1)。
一个随机 点 的维度为 \(d\),是一个 \(d\) 个随机值的列表:\([X_1 \dots X_d]\)。

一个随机 值 \(X_i\) 接近边缘的条件是 \(X_i\) 小于 0.01 或者 \(X_i\) 大于 0.99。一个随机值接近边缘的概率是多少?
设 \(E\) 为随机值接近边缘的事件。\(P(E) = P(X_i < 0.01) + P(X_i > 0.99) = 0.02\)
一个随机 点 \([X_1, X_2, X_3]\) 的维度为 \(3\),如果其 任何 值接近边缘,则该点接近边缘。一个三维点接近边缘的概率是多少?
该事件等价于点的 任何 维度都不接近边缘的补事件,即:\(1 - (1 - P(E))³ = 1 - 0.98³ \approx 0.058\)
一个随机 点 \([X_1, \dots X_{100}]\) 的维度为 \(100\),如果其 任何 值接近边缘,则该点接近边缘。一个 100 维点接近边缘的概率是多少?
同样地,它是:\(1 - (1 - P(E))^{100} = 1 - 0.98^{100} \approx 0.867\)。存在许多其他高维点的高维现象:例如,点之间的欧几里得距离开始收敛。
算法艺术
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/algorithmic_art/
我们希望高效地生成概率艺术作品。我们将使用随机变量来制作一个充满非重叠圆的图片:
在我们的艺术作品中,圆的大小各不相同。具体来说,每个圆的半径是从帕累托分布(以下将进行描述)中抽取的。放置算法是贪婪的:我们抽取 1000 个圆的大小。按大小排序,从大到小。然后逐个遍历圆的大小,并依次放置圆。
要在画布上放置一个圆,我们抽取圆心的位置。x 和 y 坐标在画布的尺寸内均匀分布。一旦我们选择了一个潜在的位置,我们就检查是否与已经放置的圆发生碰撞。如果有碰撞,我们会继续尝试新的位置,直到找到一个没有碰撞的位置。
帕累托分布
帕累托随机变量
| 符号: | \(X \sim \text{Pareto}(a)\) |
|---|---|
| 描述: | 长尾分布。大值很少见,小值很常见。 |
| 参数: | \(a \ge 1\),形状参数 注意还有其他可选参数。请参阅 维基百科 |
| 支持: | \(x \in [0, 1]\) |
| PDF 公式: | $$f(x) = \frac{1}{x^{a+1}}$$ |
| CDF 公式: | $$F(x) = 1- \frac{1}{x^a}$$ |
从帕累托分布中抽样
我们如何从帕累托分布中抽取样本?在 Python 中很简单:stats.pareto.rvs(a),然而在 JavaScript 或其他语言中,可能不会那么透明。我们可以使用“逆变换抽样”。简单来说,就是选择一个在(0, 1)范围内的均匀随机变量,然后选择值\(x\)的赋值,使得\(F(x)\)等于随机选择的值。
\begin{aligned} y &= 1 - (\frac{1}{x})^\alpha \ (\frac{1}{x})^\alpha &= 1 - y \ \frac{1}{x} &= (1-y)^{\frac{1}{\alpha}} \ x &= \frac{1}{(1-y)^{\frac{1}{\alpha}}} \end{aligned}
第三部分:概率模型
联合概率
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part3/joint/
许多有趣的问题涉及的不是单个随机变量,而是相互作用的多个变量。为了创建有趣的概率模型并在现实世界中进行推理,我们需要学习如何联合考虑多个随机变量。
在本节中,我们将使用疾病预测作为一个工作示例,向您介绍概率模型中涉及的概念。一般问题是:一个人有一组观察到的症状。给定这些症状,每种可能的疾病发生的概率是多少?
我们已经考虑了同时发生的事件,并涵盖了独立性、条件概率等概念。本节的新颖之处在于(1)我们将介绍如何处理同时发生的随机变量,以及(2)我们将讨论计算机如何在大型概率模型下进行推理。
联合概率函数
对于单个随机变量,最重要的信息是概率质量函数(PMF)或者,如果变量是连续的,概率密度函数(PDF)。当处理两个或更多变量时,等效的函数称为联合函数。对于离散随机变量,它是一个函数,接受每个变量的值,并返回每个变量取其值的概率(对于连续变量是概率密度)。例如,如果你有两个离散变量,联合函数是:$$ \begin{align} \p(X=x,Y=y) && \text{X 和 Y 的联合函数} \end{align} $$
你应该将逗号读作“和”,因此这表示 X=x 和 Y=y 的概率。同样,对于单个变量,为了简便起见,我们经常只写值,这暗示我们在谈论随机变量取这些值的概率。这种符号方便,因为它更短,并且明确指出该函数是在两个参数上操作的。需要记住的是,该事件是一个取给定值的随机变量。$$ \begin{align} \p(x,y) && \text{是 }\p(X=x,Y=y) 的简写} \end{align} $$
如果任何变量是连续的,我们使用不同的符号来清楚地表明我们需要一个概率密度函数,这是我们可以在其上积分以得到概率的函数。我们将详细介绍这一点:$$ \begin{align} f(X=x,Y=y) && \text{如果 X 或 Y 是连续的,则为联合密度函数} \end{align} $$
同样的思想可以扩展到模型中的任意多个变量。例如,如果你有三个离散随机变量 X、Y 和 Z,联合概率函数将说明将所有三个变量分配给某个值的可能性:\(\p(X=x,Y=y,Z=z)\)。
联合概率表
定义:联合概率表
联合概率表是指定多个随机变量之间“联合”分布的一种方式。它通过保持一个多维查找表(每个变量一个维度)来实现,这样就可以直接查找任何赋值的概率质量,例如 \(\p(X=x,Y=y, \dots\))。
让我们从例子开始。2020 年,新冠疫情大流行扰乱了全球的生活。许多人无法进行检测,不得不根据家庭诊断来确定他们是否生病。让我们构建一个非常简单的概率模型,以便我们能够制作一个可以预测给定观察症状的疾病发生概率的工具。为了明确这是一个教学示例,让我们考虑一个虚构的疾病,称为 Determinitis。两种主要症状是发烧和嗅觉丧失。
| 变量 | 符号 | 类型 |
|---|---|---|
| 有 Determinitis | \(D\) | 二项式(1 表示有 Determinitis) |
| 发烧 | \(F\) | 分类(无、低、高) |
| 能闻到气味 | \(S\) | 二项式(1 表示能闻到气味) |
联合概率表是存储我们对变量赋值特定概率质量的一种暴力方法。以下是我们三个随机变量的概率模型(顺便说一句,这个联合中的值是现实的,基于研究,但主要是为了教学。在做出医疗决策之前请咨询医生)。
\(D=0\)
\(D=1\)
一些关键观察:
-
表中的每个单元格代表一个变量赋值的概率。例如,某人不能闻到气味,\(S=0\),有低烧,\(F=\text{low}\),并且有疾病,\(D=1\) 的概率可以直接从表中读出:\(P(D=1,S=0,F=\text{low}) = 0.005\)。
-
这些是联合概率,而不是条件概率。数值 0.005 是疾病、无嗅觉和低烧的值,而不是无嗅觉和低烧给定疾病的概率。存储条件概率的表将称为条件概率表,这是一个联合概率表。
-
如果对所有单元格求和,总和将是 1。每个单元格是事件的互斥组合,单元格旨在涵盖所有可能的结果空间。
-
这个表很大!我们可以使用 计数步骤规则 来计算单元格数。如果 \(n_i\) 是随机变量 \(i\) 可以取的不同值的数量,那么联合表中的单元格数是 \(\prod_i n_i\)。
联合分布的性质
任何联合分布的随机变量都有许多属性,其中一些我们将深入探讨。以下是一个简要总结。每个随机变量都有:
| 属性 | 符号示例 | 描述 |
|---|---|---|
| 分布函数(PMF 或 PDF) | \(\P(X=x,Y=y,\dots)\) 或 \(f(X=x,Y=y,\dots)\) | 一个将随机变量可以取的值映射到似然度的函数。 |
| 累积分布函数(CDF) | \(F(X < x,Y < y, \dots)\) | 每个变量小于其对应参数的概率 |
| 协方差 | \(\sigma_{X,Y}\) | 两个随机变量共同变化的度量。 |
| 相关系数 | \(\rho_{X,Y}\) | 标准化协方差 |
边缘化
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part3/marginalization/
关于具有许多随机变量的概率模型的一个重要见解是,“联合分布是完整信息。”从联合分布中,你可以计算涉及模型中那些随机变量的所有概率问题。这一章就是那个见解的例子。
本章的核心问题是:给定一个联合分布,你如何计算随机变量单独的概率?
从两个随机变量进行边缘化
首先,考虑两个随机变量 \(X\) 和 \(Y\)。如果你给出了联合分布,你如何计算 \(\p(X=x)\)?回想一下,如果你有联合分布,你就有一种方法知道任何值 \(x\) 和 \(y\) 的概率 \(\p(X=x,Y=y)\)。我们已经有了从联合分布中计算 \(\p(X=x)\) 的技术。我们可以使用全概率公式(LOTP)!在这种情况下,事件 \(Y = y\) 构成了“背景事件”:$$\begin{align} P(X=x) &= \sum_y \p(X=x, Y=y) \ \end{align}$$ 注意,要应用全概率公式,必须保证不同的事件 \(Y=i\) 是互斥的,并且必须保证 \(\sum_y \p(Y=y) = 1\)。这两者都是正确的。
如果我们想要 \(\p(Y=y)\),我们还可以再次使用全概率公式,这次以 \(X\) 的每个可能值作为背景事件:$$\begin{align} P(Y=y) &= \sum_x \p(X=x, Y=y) \ \end{align}$$
示例:最爱数字
考虑以下 \(X\) 和 \(Y\) 的联合分布,其中 \(X\) 是一个人的最爱二进制数字,\(Y\) 是他们在斯坦福大学的年份。这里是一个来自过去课程的真正联合分布:
| 变量 | 符号 | 类型 |
|---|---|---|
| 最爱数字 | \(X\) | 离散数 |
| 在校年份 | \(Y\) | 分类别 |
学生最爱的数字是 0 的概率 \(\p(X=0)\) 是多少?我们可以使用全概率公式来计算这个概率:$$\begin{align} \p(X=0) = &\sum_y \p(X=0, Y=y) \ = &+ \p(X=0, Y=\text{Frosh}) \ &+ \p(X=0, Y=\text{Soph}) \ &+ \p(X=0, Y=\text{Junior}) \ &+ \p(X=0, Y=\text{Senior}) \ &+ \p(X=0, Y=\text{5+}) \ = &0.01 + 0.05 + 0.04 + 0.03 + 0.02 \ = &0.15 \end{align}$$
多变量边缘化
边缘化的想法可以扩展到包含两个以上随机变量的联合分布。考虑有三个随机变量 \(X\)、\(Y\) 和 \(Z\),我们可以边缘化掉任何一个变量:$$\begin{align} P(X=x) &= \sum_{y,z} \p(X=x, Y=y, Z=z) \ P(Y=y) &= \sum_{x,z} \p(X=x, Y=y, Z=z) \ P(Z=z) &= \sum_{x,y} \p(X=x, Y=y, Z=z) \ \end{align}$$
*符号:双重求和
在这种情况下,双重求和符号:$$\sum\limits_{y, z}$$ 也可以等价地写成:$$\sum_y \sum_z$$,这意味着我们在对所有可能的 \(y\) 和 \(z\) 的值进行求和。例如,如果 \(Y\) 是一个有 3 个可能值的随机变量,而 \(Z\) 是一个有 4 个可能值的随机变量,那么 \(\sum_{y, z}\) 就意味着我们在对所有 12 种可能的 \(y\) 和 \(z\) 的组合进行求和。
下面是一个代码示例。假设我们有一个函数 joint(x, y, z),并且所有 \(X\)、\(Y\) 和 \(Z\) 都可以取集合 \(\{0, 1, 2, 3, 4\}\) 中的值。
多项分布
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part3/multinomial/
多项分布是多个随机变量的参数分布的一个例子。多项分布是对联合分布的温和介绍。它是二项分布的扩展。在这两种情况下,你都有 \(n\) 个独立的实验。在二项分布中,每个结果都是一个“成功”或“不成功”。在多项分布中,可以有超过两个的结果(多)。多项分布的一个很好的类比是:我们将掷一个 \(m\) 面的骰子 \(n\) 次。我们关注的是报告骰子每个面的结果数量。
这里是多项分布的正式定义。假设你进行 \(n\) 次独立的实验,每次实验的结果是 \(m\) 种可能结果中的一种,相应的概率为:\(p_1, p_2, \dots , p_m\)(约束条件为 \(\sum_i p_i = 1\))。定义 \(X_i\) 为结果 \(i\) 的试验次数。多项分布是一个封闭形式的函数,它回答了以下问题:有 \(c_i\) 次试验的结果为 \(i\) 的概率是多少。数学上:$$\begin{align} P(X_1=c_1,X_2 = c_2, \dots , X_m = c_m) &= { {n} \choose {c_1,c_2,\dots , c_m} }\cdot p_1^{c_1} \cdot p_2^{c_2}\dots p_m^{c_m} \ &= { {n} \choose {c_1,c_2,\dots , c_m} }\cdot \prod_i p_i^{c_i} \end{align}$$
这是我们第一个联合随机变量模型!我们可以用卡片来表示它,就像我们表示随机变量一样:
多项联合分布
| 描述: | 在 \(n\) 个相同、独立的实验中,每种可能结果类型的数量。每个实验可以导致 \(m\) 种不同的结果。 |
|---|---|
| 参数: | \(p_1, \dots, p_m\),其中每个 \(p_i \in [0,1]\) 是一次实验中结果类型 \(i\) 的概率。\(n \in \{0, 1, \dots\}\),实验次数 |
| 支持度: | \(c_i \in \{0, 1, \dots, n\}\),对于每个结果 \(i\)。必须满足 \(\sum_i c_i = n\) |
| 概率质量函数: | $$\begin{align} P(X_1=c_1,X_2 = c_2, \dots , X_m = c_m) = { {n} \choose {c_1,c_2,\dots , c_m} } \prod_i p_i^{c_i} \end{align}$$ |
示例
标准骰子示例:
抛掷一个六面的骰子 7 次。你掷出 1 个一,1 个二,0 个三,2 个四,0 个五,3 个六(不考虑顺序)的概率是多少? $$\begin{align} \P(X_1=1,X_2 = 1&, X_3 = 0,X_4 = 2,X_5 = 0,X_6 = 3) \&= \frac{7!}{2!3!}\left(\frac{1}{6}\right)¹\left(\frac{1}{6}\right)¹\left(\frac{1}{6}\right)⁰\left(\frac{1}{6}\right)²\left(\frac{1}{6}\right)⁰\left(\frac{1}{6}\right)³\ &=420\left(\frac{1}{6}\right)⁷ \end{align}$$天气示例:
在 Bayeslandia,每天的天气可以是{晴天,多云,雨天},其中 \(p_\text{sunny} = 0.7\),\(p_\text{cloudy} = 0.2\) 和 \(p_\text{rainy} = 0.1\)。假设每一天都是相互独立的。在接下来的 7 天里,我们有 5 个晴天,1 个多云天和 1 个雨天,这个概率是多少? $$\begin{align} \P(X_{\text{sunny}}=6,X_{\text{rainy}} = 1&, X_{\text{cloudy}} = 0) \ &= \frac{7!}{5!1!1!} (0.7)⁵ \cdot (0.2)¹ \cdot (0.1) ¹ \ &\approx 0.14 \end{align}$$
这与每天都是晴天的概率相比如何? $$\begin{align} \P(X_{\text{sunny}}=7,X_{\text{rainy}} = 0&, X_{\text{cloudy}} = 0) \ &= \frac{7!}{7!1!} (0.7)⁷ \cdot (0.2)⁰ \cdot (0.1) ⁰ \ &\approx 0.08 \end{align}$$
多项式分布因其作为语言模型的用途而特别受欢迎。有关完整示例,请参阅联邦党人文集作者示例。
推导联合概率
深入理解多项式分布的一种方法是推导特定多项式的联合概率函数。考虑前一个例子中的多项式。在该多项式中,有 \(n = 7\) 个结果,每个结果可以是三个值 \(\{S,C,R\}\) 之一,其中 S 代表晴天,C 代表多云,R 代表雨天,并且天数是独立的。\(p_s = 0.7\),\(p_c=0.2\),\(p_r = 0.1\)。我们将推导在 \(n = 7\) 天中,有 5 个晴天,1 个多云天和 1 个雨天概率。
就像我们对二项式分布的推导一样,我们将考虑所有可能的包含 5 个晴天,1 个雨天和 1 个多云天的周数。
('S', 'S', 'S', 'S', 'S', 'C', 'R')
('S', 'S', 'S', 'S', 'S', 'R', 'C')
('S', 'S', 'S', 'S', 'C', 'S', 'R')
('S', 'S', 'S', 'S', 'C', 'R', 'S')
('S', 'S', 'S', 'S', 'R', 'S', 'C')
('S', 'S', 'S', 'S', 'R', 'C', 'S')
('S', 'S', 'S', 'C', 'S', 'S', 'R')
('S', 'S', 'S', 'C', 'S', 'R', 'S')
('S', 'S', 'S', 'C', 'R', 'S', 'S')
('S', 'S', 'S', 'R', 'S', 'S', 'C')
('S', 'S', 'S', 'R', 'S', 'C', 'S')
('S', 'S', 'S', 'R', 'C', 'S', 'S')
('S', 'S', 'C', 'S', 'S', 'S', 'R')
('S', 'S', 'C', 'S', 'S', 'R', 'S')
('S', 'S', 'C', 'S', 'R', 'S', 'S')
('S', 'S', 'C', 'R', 'S', 'S', 'S')
('S', 'S', 'R', 'S', 'S', 'S', 'C')
('S', 'S', 'R', 'S', 'S', 'C', 'S')
('S', 'S', 'R', 'S', 'C', 'S', 'S')
('S', 'S', 'R', 'C', 'S', 'S', 'S')
('S', 'C', 'S', 'S', 'S', 'S', 'R')
('S', 'C', 'S', 'S', 'S', 'R', 'S')
('S', 'C', 'S', 'S', 'R', 'S', 'S')
('S', 'C', 'S', 'R', 'S', 'S', 'S')
('S', 'C', 'R', 'S', 'S', 'S', 'S')
('S', 'R', 'S', 'S', 'S', 'S', 'C')
('S', 'R', 'S', 'S', 'S', 'C', 'S')
('S', 'R', 'S', 'S', 'C', 'S', 'S')
('S', 'R', 'S', 'C', 'S', 'S', 'S')
('S', 'R', 'C', 'S', 'S', 'S', 'S')
('C', 'S', 'S', 'S', 'S', 'S', 'R')
('C', 'S', 'S', 'S', 'S', 'R', 'S')
('C', 'S', 'S', 'S', 'R', 'S', 'S')
('C', 'S', 'S', 'R', 'S', 'S', 'S')
('C', 'S', 'R', 'S', 'S', 'S', 'S')
('C', 'R', 'S', 'S', 'S', 'S', 'S')
('R', 'S', 'S', 'S', 'S', 'S', 'C')
('R', 'S', 'S', 'S', 'S', 'C', 'S')
('R', 'S', 'S', 'S', 'C', 'S', 'S')
('R', 'S', 'S', 'C', 'S', 'S', 'S')
('R', 'S', 'C', 'S', 'S', 'S', 'S')
('R', 'C', 'S', 'S', 'S', 'S', 'S')
首先,请注意,分配给每周的结果是互斥的。然后请注意,任何一种结果发生的概率将是 \((p_S)⁵ \cdot p_C \cdot p_R\)。具有所选结果数量的独特周数可以通过使用排列中无区别对象的规则来推导。有 7 个对象,其中 5 个彼此之间无区别。不同结果的数量是:$${ {7} \choose {5,1,1} } = \frac{7!}{5!1!1!} = 7 \cdot 6 = 42$$
由于结果互斥,我们将把每个案例的概率自身相加 \(\frac{7!}{5!1!1!}\) 次。将所有这些放在一起,我们得到这个特定案例的多项式联合函数:$$\begin{align} \P(X_{\text{sunny}}=5,X_{\text{rainy}} = 1&, X_{\text{cloudy}} = 1) \ &= \frac{7!}{5!1!1!} (0.7)⁵ \cdot (0.2)¹ \cdot (0.1) ¹ \ &\approx 0.14 \end{align}$$
连续联合
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part3/continuous_joint/
如果存在一个联合概率密度函数(PDF)\(f\),使得随机变量\(X\)和\(Y\)是联合连续的,那么:$$\begin{align} P(a_1 < X \leq a_2,b_1 < Y \leq b_2) = \int_{a_1}^{a_2} \int_{b_1}^{b_2} f(X=x,Y=y)\d y \text{ } \d x \end{align}$$
使用概率密度函数(PDF)我们可以计算边缘概率密度:$$\begin{align} f(X=a) &= \int_{-\infty}^{\infty}f(X=a,Y=y)\d y \ f(Y=b) &= \int_{-\infty}^{\infty}f(X=x,Y=b)\d x \end{align}$$
设 \(F(x,y)\) 为累积分布函数(CDF):$$\begin{align} P(a_1 < X \leq a_2,b_1 < Y \leq b_2) = F(a_2,b_2) - F(a_1,b_2) + F(a_1,b_1) - F(a_2,b_1) \end{align}$$
从离散联合到连续联合
联合考虑多个连续随机变量一开始可能难以直观理解。但我们可以借助一个有用的技巧来理解连续随机变量:从离散近似开始。以创建 CS109 徽标的例子来说明。它是通过向斯坦福标志的图像投掷五十万支飞镖(保留至少被一支飞镖击中的所有像素)生成的。飞镖可以击中标志上的任何连续位置,而这些位置的概率并不相等。相反,飞镖击中的位置受一个联合连续分布的支配。在这种情况下,只有两个同时存在的随机变量,即飞镖的 x 位置和 y 位置。每个随机变量都是连续的(它取实数值)。通过首先考虑离散化,思考联合概率密度函数会更加容易。我将把飞镖着陆区域划分为 25 个离散的桶:


左边是这种联合分布的概率质量可视化,右边是回答问题的可视化:飞镖击中中心一定距离内的概率。对于每个桶,都有一个单独的数字,即飞镖落入该特定桶的概率(这些概率是互斥的,且总和为 1)。
当然,这种离散化只是对联合概率分布的近似。为了得到更好的近似,我们可以创建更精细的离散化。在极限情况下,我们可以使我们的桶无限小,与每个桶关联的值成为概率的二阶导数。


为了在图中表示二维概率密度,我们使用值的深度来表示密度(越深表示密度越大)。另一种可视化这种分布的方法是从一个角度。这使得更容易意识到这是一个有两个输入和一个输出的函数。下面是同一密度函数的不同可视化:

就像在单随机变量情况下一样,我们现在用密度而不是概率来表示我们对连续随机变量的信念。回想一下,密度表示相对信念。如果\(f(X = 1.1, Y = 0.9)\)的密度是\(f(X = 1.1, Y = 1.1)\)的两倍,那么函数表示找到特定的组合\(X = 1.1\)和\(Y=0.9\)的可能性是两倍。
多元高斯
在这个例子中,所表示的密度恰好是联合连续分布的一个特例,称为多元高斯分布。实际上,它是一个所有构成变量都是独立的特殊情况。
定义:独立多元高斯分布。独立多元高斯分布可以用来模拟一组连续的联合随机变量 \(\vec{X} = (X_1 \dots X_n)\),将其视为由独立的正态分布组成,具有均值 \(\vec{\mu} = (\mu_1 \dots \mu_n)\) 和标准差 \(\vec{\sigma} = (\sigma_1 \dots \sigma_n)\)。注意我们现在有了向量中的变量(类似于 Python 中的列表)。多元分布的表示使用向量符号:$$\begin{align} \vec{X} \sim \vec{\N}(\vec{\mu}, \vec{\sigma}) \end{align}$$ 联合概率密度函数为:$$\begin{align} f(\vec{x}) &= \prod_{i=1}^n f(x_i) \ &= \prod_{i=1}^n \frac{1}{\sigma_i \sqrt{2\pi} } e ^{\frac{-(x-\mu_i)²}{2\sigma_i²}} \end{align}$$ 联合累积分布函数为 $$\begin{align} F(\vec{x}) &= \prod_{i=1}^n F(x_i) \ &= \prod_{i=1}^n \Phi(\frac{x_i-\mu_i}{\sigma_i}) \end{align}$$
示例:高斯模糊
就像许多单随机变量被假设为高斯分布一样,许多联合随机变量也可以假设为多元高斯分布。考虑以下高斯模糊的例子:
在图像处理中,高斯模糊是通过高斯函数模糊图像的结果。这是图形软件中广泛使用的效果,通常用于减少图像噪声。高斯模糊通过将图像与二维独立多元高斯(均值为 0,标准差相等)进行卷积来实现。



为了使用高斯模糊,你需要能够计算该二维高斯在像素空间中的概率质量。每个像素被赋予一个等于 X 和 Y 都在像素边界内的概率的权重。中心像素覆盖的区域是 \(-0.5 ≤ x ≤ 0.5\) 和 \(-0.5 ≤ y ≤ 0.5\)。让我们在计算图像空间上离散化的高斯函数时进行一步。对于具有均值为 0 和标准差为 3 的多元高斯,中心像素的权重是多少?
设 \(\vec{B}\) 为多元高斯分布,\(\vec{B} \sim \N(\vec{\mu} = [0,0], \vec{\sigma} = [3,3])\)。让我们计算这个多元高斯分布的累积分布函数 \(F(x_1,x_2)\):$$\begin{align} F(x_1,x_2) &= \prod_{i=1}^n \Phi(\frac{x_i-\mu_i}{\sigma_i}) \ &= \Phi(\frac{x_1-\mu_1}{\sigma_1}) \cdot \Phi(\frac{x_2-\mu_2}{\sigma_2}) \ &= \Phi(\frac{x_1}{3}) \cdot \Phi(\frac{x_2}{3}) \end{align}$$
现在我们准备计算中心像素的权重:$$\begin{align} \P&(-0.5 < X_1 \leq 0.5,-0.5 < X_2 \leq 0.5) \ &= F(0.5,0.5) - F(-0.5,0.5) + F(-0.5,-0.5) - F(0.5,-0.5) \ &=\Phi(\frac{0.5}{3}) \cdot \Phi(\frac{0.5}{3}) - \Phi(\frac{-0.5}{3}) \cdot \Phi(\frac{0.5}{3}) + \Phi(\frac{-0.5}{3}) \cdot \Phi(\frac{-0.5}{3}) - \Phi(\frac{0.5}{3}) \cdot \Phi(\frac{-0.5}{3})\ &\approx 0.026 \end{align}$$
如何使这个二维高斯模糊图像?维基百科解释道:“由于高斯函数的傅里叶变换仍然是另一个高斯函数,应用高斯模糊的效果是减少图像的高频成分;高斯模糊是一个低通滤波器” [2]。
推理
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part3/inference/
到目前为止,我们已经为如何用多个随机变量表示概率模型奠定了基础。这些模型特别有用,因为它们允许我们执行一个名为“推理”的任务,其中我们根据关于另一个随机变量的新信息更新模型中一个随机变量的信念。一般来说,推理是困难的!实际上,已经证明,在最坏的情况下,推理任务可以是 NP-Hard,其中\(n\)是随机变量的数量 [1]。
首先,我们将通过两个随机变量(在本节中)来练习它。然后,在本单元的后面,我们将讨论一般情况下的推理,涉及许多随机变量。
之前我们研究了事件的条件概率。推理的第一个任务是理解如何结合条件概率和随机变量。离散和连续情况下的方程都是我们对条件概率理解的直观扩展:
离散条件概率
在离散情况下,即你的模型中的每个随机变量都是离散的,是条件概率(你在事件背景下学习的内容)的简单组合。回想一下,每个应用于随机变量的关系运算符定义了一个事件。因此,条件概率的规则直接适用:离散情况下的条件概率质量函数(PMF):
设\(X\)和\(Y\)为离散随机变量。
定义: 带有离散随机变量的条件定义。
定义: 带有离散随机变量的贝叶斯定理。
在存在多个随机变量的情况下,使用缩写变得越来越有用!上述定义与以下符号相同,其中小写符号如\(x\)是事件\(X=x\)的缩写:$$\begin{align} \P(x|y)=\frac{P(x,y)}{P(y)} \end{align}$$ 条件定义适用于任何事件,因此我们也可以使用累积分布函数(CDF)来写出离散情况下的条件:$$\begin{align} \P(X \leq a | Y=y) &= \frac{\P(X \leq a, Y=y)}{\p(Y=y)} \ &= \frac{\sum_{x\leq a} \P(X=x,Y=y)}{\P(Y=y)} \end{align}$$ 这里有一个巧妙的结果:这个最后项可以通过巧妙的手法重写。我们可以使求和扩展到整个分数:$$\begin{align} \P(X \leq a | Y=y) &= \frac{\sum_{x\leq a} \P(X=x,Y=y)}{\P(Y=y)} \ &= \sum_{x\leq a} \frac{\P(X=x,Y=y)}{\P(Y=y)} \ &= \sum_{x\leq a} \P(X=x|Y=y) \end{align}$$
实际上,将概率规则(如贝叶斯定理、全概率定律等)翻译成离散随机变量的语言变得非常直接:我们只需要回忆起,应用于随机变量的每个关系运算符定义了一个事件。
混合离散和连续
当我们想要使用我们的概率规则(如贝叶斯定理、全概率定律、链式法则等)来推理 连续 随机变量时,会发生什么?有一个简单的实际答案是:规则仍然适用,但我们必须用概率密度函数来替换概率术语。作为一个具体的例子,让我们看看只有一个连续随机变量的贝叶斯定理。
定义: 混合离散和连续的贝叶斯定理。
设 \(X\) 为连续随机变量,设 \(N\) 为离散随机变量。\(X\) 给定 \(N\) 和 \(N\) 给定 \(X\) 的条件概率分别是:$$\begin{align} f(X=x|N=n) = \frac{\P(N=n|X=x)f(X=x)}{\p(N=n)} && \end{align}$$ $$\begin{align} \p(N=n|X=x) = \frac{f(X=x|N=n)\p(N=n)}{f(X=x)} \end{align}$$
这些方程可能看起来很复杂,因为它们混合了概率密度和概率。我们为什么相信它们是正确的?首先,注意当条件概率的左侧的随机变量是连续的时,我们使用密度,当它是离散的时,我们使用概率。这个结果可以通过观察得出:$$ \P(X = x) = f(X=x) \cdot \epsilon_x $$
在 \(\epsilon_x \rightarrow 0\) 的极限下。要从密度函数中获得一个概率,就是要对该函数下的区域进行积分。如果你想要近似 \(X = x\) 的概率,你可以考虑一个高度为 \(f(X=x)\) 且宽度非常小的矩形的面积。随着这个宽度的减小,你的答案变得更加准确:

如果 \(\epsilon_x\) 的值被留在公式中,那么它就会成为一个问题。然而,如果我们能让它们相互抵消,我们就可以得到一个有效的方程。这是在单变量或多个连续随机变量的背景下推导概率规则的关键洞察。再次,设 \(X\) 为连续随机变量,设 \(N\) 为离散随机变量:$$\begin{align} \p(N=n|X=x) &= \frac{P(X=x|N=n)\p(N=n)}{P(X=x)} &&\text{贝叶斯定理}\ &= \frac{f(X=x|N=n) \cdot \epsilon_x \cdot \p(N=n)}{f(X=x) \cdot \epsilon_x} &&\P(X = x) = f(X=x) \cdot \epsilon_x \ &= \frac{f(X=x|N=n) \cdot \p(N=n)}{f(X=x)} &&\text{消去 } \epsilon_x \ \end{align}$$
这种策略不仅适用于贝叶斯定理。例如,当 \(X\) 是连续的且 \(N\) 是离散的时,这是全概率定律的一个版本:$$\begin{align} f(X=x) &= \sum_{n \in N} f(X=x | N = n) \p(N = n) \end{align}$$
连续随机变量的概率规则
上面的策略可以用来推导存在连续随机变量时的概率规则。当存在多个连续随机变量时,该策略同样适用。例如,这里是两个连续随机变量的贝叶斯定理。
定义: 连续随机变量的贝叶斯定理。
设 \(X\) 和 \(Y\) 为连续随机变量。 $$\begin{align} f(X=x|Y=y) = \frac{f(X=x,Y=y)}{f(Y=y)} \end{align}$$
示例:连续变量的推理
考虑以下问题:
问题: 在出生时,雌性大象的重量服从均值为 160kg,标准差为 7kg 的高斯分布。雄性大象的出生重量服从均值为 165kg,标准差为 3kg 的高斯分布。你所知道的新生大象的信息是它的重量为 163kg。它是一只雌性大象的概率是多少?

答案: 设 \(G\) 为一个指示器,表示大象是雌性。\(G\) 是伯努利分布(p = 0.5)。设 \(X\) 为大象重量的分布。
当 \(G = 1\) 时,\(X\) 服从正态分布 \(N(μ = 160, σ² = 7²)\)
当 \(G = 0\) 时,\(X\) 服从正态分布 \(N(μ = 165, σ² = 3²)\) $$\begin{align} \p(G = 1 | X = 163) &= \frac{f(X = 163 | G = 1) \P(G = 1)}{f(X = 163)} && \text{贝叶斯定理} \end{align}$$ 如果我们能解这个方程,我们就会得到答案。\(f(X = 163 | G = 1)\) 是什么?它是 \(X\) 的 高斯概率密度函数,在点 \(x = 163\) 处,\(\mu=160, \sigma² = 7²\): $$\begin{align} f(X = 163 | G = 1) &= \frac{1}{\sigma \sqrt{2 \pi}} e^{-\frac{1}{2}\Big(\frac{x-\mu}{\sigma}\Big)²} && \text{高斯概率密度函数} \ &= \frac{1}{7 \sqrt{2 \pi}} e^{-\frac{1}{2}\Big(\frac{163-160}{7}\Big)²} && \text{在 \(163\) 处的 \(X\) 的概率密度函数} \end{align}$$ 接下来我们注意到 \(\P(G = 0) = \P(G = 1) = \frac{1}{2}\)。将所有这些放在一起,并使用全概率公式来计算分母,我们得到: $$\begin{align} \p&(G = 1 | X = 163) \ &= \frac{f(X = 163 | G = 1) \P(G = 1)}{f(X = 163)} \ &= \frac{f(X = 163 | G = 1) \P(G = 1)}{f(X = 163 | G = 1) \P(G = 1) + f(X = 163 | G = 0) \P(G = 0)}\ &= \frac{\frac{1}{7 \sqrt{2 \pi}} e^{-\frac{1}{2}\Big(\frac{163-160}{7}\Big)²} \cdot \frac{1}{2}}{\frac{1}{7 \sqrt{2 \pi}} e^{-\frac{1}{2}\Big(\frac{163-160}{7}\Big)²} \cdot \frac{1}{2} + \frac{1}{3 \sqrt{2 \pi}} e^{-\frac{1}{2}\Big(\frac{163-165}{3}\Big)²} \cdot \frac{1}{2}} \ &= \frac {\frac{1}{7} e^{-\frac{1}{2}\Big(\frac{9}{49}\Big)} } {\frac{1}{7} e^{-\frac{1}{2}\Big(\frac{9}{49}\Big)} + \frac{1}{3} e^{-\frac{1}{2}\Big(\frac{4}{9}\Big)²} }\ &\approx 0.328 \end{align}$$
贝叶斯网络
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part3/bayesian_networks/
在这个阶段,我们已经为分析求解概率开发了工具。我们可以计算随机变量取特定值的可能性,即使它们与其他随机变量相互作用(我们称之为多元模型,或者说随机变量是联合分布的)。我们还开始了对样本和抽样的研究。
以 WebMD 症状检查器为例。WebMD 构建了一个概率模型,其中随机变量大致分为三类:症状、风险因素和疾病。对于任何观察到的症状和风险因素的组合,他们可以计算出任何疾病的概率。例如,他们可以计算我作为一个 21 岁的发烧且疲倦的女性患流感的概率:\(P(I = 1 | A = 21, G = 1, T = 1, F = 1)\)。或者他们可以计算我作为一个 30 岁流鼻涕的人患感冒的概率:\(P(C = 1 | A = 30, R = 1)\)。乍一看,这可能并不困难。但随着我们深入挖掘,我们会意识到这有多么困难。有两个挑战:(1) 模型:充分指定概率模型;(2) 推理:计算任何所需的概率。
贝叶斯网络
在我们深入探讨如何解决概率(即推理)问题之前,让我们花一点时间回顾一下专家医生如何指定这么多随机变量之间的关系。理想情况下,我们可以让专家坐下来并指定整个“联合分布”(参见关于多元模型的第一讲)。她可以通过写一个包含所有变量的单个方程来实现(这听起来就像是不可能的),或者她可以创建一个联合分布表,其中指定任何可能的变量赋值组合的概率。但事实证明这也不可行。为什么?想象一下,在我们的 WebMD 模型中有\(N = 100\)个二元随机变量。我们的专家医生将不得不为这些变量的\(2^N > 10^{30}\)种赋值组合中的每一种指定一个概率,这几乎接近于宇宙中的原子数量。幸运的是,有更好的方法。如果我们知道创建联合赋值的“生成”过程,我们可以简化我们的任务。基于生成过程,我们可以创建一个称为贝叶斯网络的数据结构。以下是两个关于疾病的随机变量网络:

对于疾病,影响流是定向的。人口统计随机变量的状态影响某人是否有特定的“条件”,这些条件又影响某人是否表现出特定的“症状”。在右侧是一个只有四个随机变量的简单模型。虽然这是一个不太有趣的模型,但在学习贝叶斯网络时更容易理解。是否在大学(二元)影响某人是否患有流感(二元)。是否患有流感影响某人是否发烧(二元),而大学和流感的状态影响某人是否感到疲倦(也是二元)。
在贝叶斯网络中,从随机变量 \(X\) 到随机变量 \(Y\) 的箭头表达了我们的假设,即 \(X\) 直接影响 \(Y\) 的可能性。我们说 \(X\) 是 \(Y\) 的父节点。为了完全定义贝叶斯网络,我们必须提供一种计算每个随机变量(\(X_i\))在知道所有父节点取值的情况下概率的方法:\(P(X_i = k | \text{Parents of }X_i \text{ take on specified values})\)。以下是一个简单疾病模型的定义示例。回想一下,每个随机变量都是二元的:$$\begin{align} & P(\text{Uni} = 1) = 0.8 \ & P(\text{Influenza} = 1 | \text{Uni} = 1) = 0.2 && P(\text{Fever} = 1 | \text{Influenza} = 1) = 0.9 \ & P(\text{Influenza} = 1 | \text{Uni} = 0) = 0.1 && P(\text{Fever} = 1 | \text{Influenza} = 0) = 0.05 \ & P(\text{Tired} = 1 | \text{Uni} = 0, \text{Influenza} = 0) = 0.1 && P(\text{Tired} = 1 | \text{Uni} = 0, \text{Influenza} = 1) = 0.9 \ & P(\text{Tired} = 1 | \text{Uni} = 1, \text{Influenza} = 0) = 0.8 && P(\text{Tired} = 1 | \text{Uni} = 1, \text{Influenza} = 1) = 1.0 \end{align}$$
让我们用编程术语来解释这一点。为了编码贝叶斯网络,我们所需做的所有事情就是定义一个函数:getProbXi(i, k, parents),该函数返回 \(X_i\)(索引为 i 的随机变量)在给定 \(X_i\) 的每个父节点值的情况下取值 k 的概率:\(P(X_i = x_i | \text{Values of parents of }X_i)\)
深入理解:贝叶斯网络之所以如此有用,是因为“联合”概率可以以指数级减少空间来表示,即每个随机变量在其父节点值条件下的概率的乘积!不失一般性,让 \(X_i\) 指第 \(i\) 个随机变量(如果 \(X_i\) 是 \(X_j\) 的父节点,则 \(i < j\)):$$\begin{align} P&(\text{Joint}) = P(X_1 = x_1, \dots, X_n = x_n) = \prod_i P(X_i = x_i | \text{Values of parents of }X_i ) \end{align}$$贝叶斯网络中隐含了哪些假设?使用链式法则,我们可以分解 \(n\) 个随机变量的精确联合概率。为了使下面的数学更容易理解,我将使用 \(x_i\) 作为 \(X_i = x_i\) 事件的简称:$$\begin{align} P(x_1, \dots, x_n) &= \prod_i P(x_i | x_{i-1}, \dots, x_1)\ \end{align}$$通过观察两个方程的差异,我们可以看到贝叶斯网络假设 $$P(x_i | x_{i-1}, \dots, x_1) = P(x_i | \text{Values of parents of }X_i)$$ 这是一个条件独立性声明。它表示,一旦你知道网络中变量 \(X_i\) 的父节点值,关于非后裔的任何进一步信息都不会改变你对 \(X_i\) 的信念。正式地说,我们说 \(X_i\) 在其父节点条件下对其非后裔是条件独立的。那么,非后裔是什么?在一个图中,\(X_i\) 的后裔是任何在以 \(X_i\) 为起点的子树中的东西。其他所有东西都是非后裔。非后裔包括 \(X_i\) 的“祖先”节点,以及与 \(X_i\) 完全不相连的节点。在设计贝叶斯网络时,你不必直接考虑这个假设。如果节点之间的箭头遵循因果路径,这个假设自然就是好的。
设计贝叶斯网络
设计贝叶斯网络有几个步骤。
-
选择你的随机变量,并将它们作为节点。
-
添加边,通常基于你对哪些节点直接导致其他节点的假设。
-
为所有节点定义 \(P(X_i = x_i | \text{Values of parents of }X_i )\)。
如你所猜,我们可以手动完成步骤(2)和(3),或者让计算机根据数据尝试执行这些任务。第一个任务被称为“结构学习”,第二个是“机器学习”的一个实例。结构学习有完全自主的解决方案——但只有在你有大量数据的情况下才能很好地工作。或者,人们通常会计算一个称为相关性的统计量,它是所有随机变量对的统计量,以帮助设计贝叶斯网络的艺术形式。
在下一部分中,我们将讨论如何从数据中学习 \(P(X_i = x_i | \text{Values of parents of }X_i )\)。现在,让我们从(合理的)假设开始,即专家可以以方程或作为 python 的 getProbXi 函数写下这些函数。
下一步
太好了!我们有一个可行的方法来定义一个包含大量随机变量的网络。第一个挑战已经完成。我们还没有在贝叶斯网络中讨论连续或多项式随机变量。理论本身并没有变化:专家只需定义getProbXi来处理比 0 或 1 更多的k值。
贝叶斯网络对我们来说并不很有趣,除非我们能用它来解决不同的条件概率问题。我们如何对一个像贝叶斯网络这么复杂的网络进行“推理”呢?
变量的独立性
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part3/independent_vars/
离散型
两个离散随机变量 \(X\) 和 \(Y\) 被称为相互独立,如果:$$\begin{align} \P(X=x,Y=y) = \P(X=x)\P(Y=y) \text{ 对于所有 } x,y \end{align}$$ 直观地说:知道 \(X\) 的值对我们了解 \(Y\) 的分布没有任何帮助。如果两个变量不是独立的,它们被称为相关。这个概念在概念上与独立事件相似,但我们处理的是多个 变量。确保将事件和变量区分开来。
连续型
两个连续随机变量 \(X\) 和 \(Y\) 被称为相互独立,如果:$$\begin{align} \P(X\leq a, Y \leq b) = \P(X \leq a)\P(Y \leq b) \text{ 对于所有 } a,b \end{align}$$ 这可以使用累积分布函数(CDF)或概率密度函数(PDF)等价地陈述:$$\begin{align} F_{X,Y}(a,b) &= F_{X}(a)F_{Y}(b) \text{ 对于所有 } a,b \ f(X=x,Y=y) &= f(X=x)f(Y=y) \text{ 对于所有 } x,y \end{align}$$ 更一般地,如果你可以分解联合密度函数,那么你的随机变量是独立的(或者对于离散随机变量的联合概率函数):$$\begin{align} &f(X=x,Y=y) = h(x)g(y) \ &\P(X=x,Y=y) = h(x)g(y) \end{align}$$
示例:展示独立性
设 \(N\) 为每天对网络服务器的请求数,且 \(N \sim \Poi(\lambda)\)。每个请求以概率 \(p\) 来自人类,以概率 \((1 – p)\) 来自“机器人”。定义 \(X\) 为每天来自人类的请求数,\(Y\) 为每天来自机器人的请求数。证明来自人类的请求数 \(X\) 与来自机器人的请求数 \(Y\) 是独立的。
由于请求是独立到达的,因此知道请求数量后 \(X\) 的概率分布是一个二项分布。具体来说:$$\begin{align} (X|N) &\sim \Bin(N,p)\ (Y|N) &\sim \Bin(N, 1-p) \end{align}$$ 要开始,我们首先需要写出 \(X\) 和 \(Y\) 的联合概率的表达式。为了做到这一点,我们使用链式法则:$$\begin{align} \P(X=x,Y=y) = \P(X = x, Y=y|N = x+y)\P(N = x+y) \end{align}$$ 我们可以计算这个表达式中的每一项。第一项是二项分布 \(X|N\) 的概率质量函数,其中 \(x\) 个“成功”。第二项是泊松分布 \(N\) 取值为 \(x+y\) 的概率:$$\begin{align} &\P(X = x, Y=y|N = x+y) = { {x + y} \choose x}px(1-p)y \ &\P(N = x + y) = e{-\lambda}\frac{\lambda{x+y}}{(x+y)!} \end{align}$$ 现在我们可以将这些放在一起,我们得到了联合概率的表达式:$$\begin{align} &\P(X = x, Y=y) = { {x + y} \choose x}px(1-p)y e{-\lambda}\frac{\lambda{x+y}}{(x+y)!} \end{align}$$ 在这一点上,我们已经推导出 \(X\) 和 \(Y\) 的联合分布。为了证明这两个变量是独立的,我们需要能够分解联合概率:$$\begin{align} \P&(X = x, Y=y) \ &= { {x + y} \choose x}px(1-p)y e{-\lambda}\frac{\lambda{x+y}}{(x+y)!} \ &= \frac{(x+y)!}{x! \cdot y!} px(1-p)y e{-\lambda}\frac{\lambda{x+y}}{(x+y)!} \ &= \frac{1}{x! \cdot y!} px(1-p)y e{-\lambda}\lambda && \text{消去 (x+y)!} \ &= \frac{p^x \cdot \lambda^x}{x!} \cdot \frac{(1-p)^y \cdot \lambda ^{y}}{y!} \cdot e^{-\lambda} && \text{重新排列} \ \end{align}$$ 因为联合概率可以分解为只包含 \(x\) 的项和只包含 \(y\) 的项,所以随机变量是独立的。
独立性的对称性
独立性是对称的。这意味着如果随机变量 \(X\) 和 \(Y\) 是独立的,那么 \(X\) 与 \(Y\) 独立,\(Y\) 与 \(X\) 也独立。这个说法可能看似无意义,但它可能非常有用。想象一个事件序列 \(X_1,X_2, \dots\)。令 \(A_i\) 为事件 \(X_i\) 是一个“记录值”(例如,它比所有之前的值都要大)。\(A_{n+1}\) 是否与 \(A_n\) 独立?回答 \(A_n\) 与 \(A_{n+1}\) 独立更容易。由于独立性的对称性,这两个说法都必须是正确的。
乘积的期望
引理:独立随机变量的期望乘积:
如果两个随机变量 \(X\) 和 \(Y\) 是独立的,那么它们的乘积的期望是各自期望的乘积。 $$\begin{align} &E[X \cdot Y] = E[X] \cdot E[Y] && \text{如果 \(X\) 和 \(Y\) 是独立的}\ &E[g(X)h(Y)] = E[g(X)]E[h(Y)] && \text{其中 \(g\) 和 \(h\) 是函数} \end{align}$$ 注意,这假设 \(X\) 和 \(Y\) 是独立的。与这个规则的求和版本(随机变量和的期望是各自期望的和)进行对比,后者不需要随机变量是独立的。
相关系数
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part3/correlation/
协方差
协方差是衡量一个变量的偏差与其均值匹配程度与另一个变量的偏差与其均值匹配程度之间关系的定量度量。它是一个定义为:$$\begin{align} \text{Cov}(X,Y) = E[(X-E[X])(Y-E[Y])] \end{align}$$
这一点有点难以理解(但值得稍微深入探讨)。外层期望将是内层函数在特定 \((x,y)\) 处的加权求和,权重为 \((x,y)\) 的概率。如果 \(x\) 和 \(y\) 都高于各自的均值,或者如果 \(x\) 和 \(y\) 都低于各自的均值,那么这个项将是正的。如果一个高于其均值而另一个低于,这个项将是负的。如果项的加权求和是正的,那么两个随机变量将具有正相关。我们可以重写上面的方程以得到一个等价的方程:$$\begin{align} \text{Cov}(X,Y) = E[XY] - E[Y]E[X] \end{align}$$
引理:独立随机变量的相关系数:
如果两个随机变量 \(X\) 和 \(Y\) 是独立的,那么它们的协方差必须为 0. $$\begin{align} \text{Cov}(X,Y) &= E[XY] - E[Y]E[X] && \text{协方差的定义} \ &= E[X]E[Y] - E[Y]E[X] && \text{期望的乘积引理} \ &= 0 \end{align}$$ 注意,逆命题并不成立。协方差为 0 并不能证明独立性。使用这个方程(以及乘积引理)可以很容易地看出,如果两个随机变量是独立的,它们的协方差为 0。在一般情况下,逆命题是不成立的。
协方差性质
假设 \(X\) 和 \(Y\) 是任意随机变量:$$\begin{align} &\text{Cov}(X,Y) = \text{Cov}(Y,X) \ &\text{Cov}(X,X) = E[X²] - E[X]E[X] = \text{Var}(X) \ &\text{Cov}(aX +b,Y) = a\text{Cov}(X,Y) \end{align}$$
设 \(X = X_1 + X_2 + \dots + X_n\),设 \(Y = Y_1 + Y_2 + \dots + Y_m\)。\(X\) 和 \(Y\) 的协方差为:$$\begin{align} &\text{Cov}(X,Y) = \sum_{i=1}^n \sum_{j=1}^m\text{Cov}(X_i,Y_j) \ &\text{Cov}(X,X) = \text{Var}(X) = \sum_{i=1}^n \sum_{j=1}^n\text{Cov}(X_i,X_j) \end{align}$$
最后一个属性给我们提供了计算方差的第三种方法。我们可以用它再次展示如何得到二项分布的方差。
相关系数
在上一节课中,我们讨论了协方差。协方差很有趣,因为它是对两个变量之间关系的定量测量。今天我们将扩展这个概念到相关系数。两个随机变量 \(X\) 和 \(Y\) 的相关系数 \(\rho(X, Y)\) 是这两个变量的协方差除以每个变量的方差。这种归一化消除了单位:$$\begin{align} \rho(X,Y) = \frac{\text{Cov}(X,Y)}{\sqrt{\text{Var}(X)Var(Y)}} \end{align}$$
相关性衡量 \(X\) 和 \(Y\) 之间的线性关系。 $$\begin{align} &\rho(X,Y) = 1 && Y = aX + b \text{ 其中 } a = \sigma_y / \sigma_x \ &\rho(X,Y) = -1 && Y = aX + b \text{ 其中 } a = -\sigma_y / \sigma_x \ &\rho(X,Y) = 0 && \text{ 没有线性关系} \ \end{align}$$
如果 \(\rho(X, Y) = 0\),我们说 \(X\) 和 \(Y\) 是“不相关的”。
当人们使用“相关性”这个术语时,他们实际上是在指一种特定的相关性,称为“皮尔逊相关性”。它衡量两个变量之间线性关系的程度。另一种衡量方法是“斯皮尔曼相关性”,其公式几乎与常规的相关性评分相同,只是将基础随机变量首先转换为它们的秩。斯皮尔曼相关性不属于 CS109 的范畴。
一般推理
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part3/computational_inference/
贝叶斯网络为我们提供了一个合理的方式来指定许多随机变量网络的联合概率。在我们庆祝之前,意识到我们仍然不知道如何使用这样的网络来回答概率问题。有许多技术可以做到这一点。我将向您介绍计算机科学概率中的一个伟大想法:我们可以使用抽样来解决贝叶斯网络上的推理问题。抽样在实践中经常被使用,因为它相对容易理解且易于实现。
拒绝抽样
作为热身,考虑一下如何从我们的贝叶斯网络中的每个随机变量中抽取一个赋值。这样的样本通常被称为“联合样本”或“粒子”(如沙粒)。要抽取一个粒子,只需根据随机变量的父变量值逐个为每个随机变量抽取一个值。这意味着如果 \(X_i\) 是 \(X_j\) 的父变量,你必须先为 \(X_i\) 抽取一个值,然后再为 \(X_j\) 抽取一个值。
让我们通过一个例子来了解如何在贝叶斯网络部分中的简单疾病模型中抽样一个“粒子”:
-
从 \(P(\text{Uni} = 1)\) 中抽样:伯努利分布\((0.8)\)。Uni 的抽样值为 1。
-
从 \(P(\text{Influenza} = 1 | \text{Uni} = 1)\) 中抽样:伯努利分布\((0.2)\)。流感的抽样值为 0。
-
从 \(P(\text{Fever} = 1 | \text{Influenza} = 0)\) 中抽样:伯努利分布\((0.05)\)。发烧的抽样值为 0。
-
从 \(P(\text{Tired} = 1 | \text{Uni} = 1, \text{Influenza} = 0)\) 中抽样:伯努利分布\((0.8)\)。疲劳的抽样值为 0。
因此,抽样出的粒子是:[Uni = 1, Influenza = 0, Fever = 0, Tired = 0]。如果我们再次运行这个过程,我们会得到一个新的粒子(其似然由联合概率决定)。
现在我们的策略很简单:我们将生成\(N\)个样本,其中\(N\)在数万(如果不是数百万)左右。然后我们可以通过计数来计算概率查询。令\(N(\textbf{X} = \textbf{k})\)表示随机变量\(\textbf{X}\)取值为\(\textbf{k}\)的粒子的数量。回想一下,粗体符号\(\textbf{X}\)表示\(\textbf{X}\)是一个包含一个或多个元素的向量。根据“频率主义”概率的定义:$$\begin{align} P(\textbf{X} = \textbf{k}) = \frac{N(\textbf{X} = \textbf{k})}{N} \end{align}$$ 计数就是胜利!但是,条件概率怎么办呢?嗯,使用条件概率的定义,我们可以看到这仍然是一些相当直接的计数:$$\begin{align} P(\textbf{X} = \textbf{a} | \textbf{Y} = \textbf{b}) = \frac{P(\textbf{X} = \textbf{a},\textbf{Y} = \textbf{b}) }{P(\textbf{Y} = \textbf{b})} = \frac {\frac{N(\textbf{X} = \textbf{a},\textbf{Y} = \textbf{b})}{N}} {\frac{N(\textbf{Y} = \textbf{b})}{N}} = \frac {N(\textbf{X} = \textbf{a},\textbf{Y} = \textbf{b})} {N(\textbf{Y} = \textbf{b})} \end{align}$$ 让我们花点时间来认识到这一点是非常棒的。基于分析概率(没有样本的数学)的通用推理即使在贝叶斯网络中也很困难(如果你不相信我,试着在完整疾病模型中计算基于一个人口统计和一个症状的流感条件概率)。然而,如果我们生成足够的样本,我们可以通过将样本减少到与条件一致(\(\vec{Y} = \vec{b}\))的样本,然后计数其中有多少也与查询一致(\(\vec{X} = \vec{a}\))来计算任何条件概率问题。以下是算法的伪代码:
N = 10000
# "query" is the assignment to variables we want probabilities for
# condition" is the assignments to variables we will condition on
def get_any_probability(query, condition):
particles = generate_many_joint_samples(N)
cond_particles = reject_non_consistent_samples(particles, condition)
K = count_consistent_samples(cond_particles, query)
return K / len(cond_particles)
这个算法有时被称为“拒绝采样”,因为它通过从联合分布中生成许多粒子,并拒绝与我们所依赖的赋值集合不一致的粒子来工作。当然,这个算法是一个近似值,尽管在样本足够多的情况下,它通常是一个非常好的近似值。然而,在所依赖的事件足够罕见,以至于在生成数百万个样本之后都不会发生的情况下,我们的算法将不会工作。我们代码的最后一行将导致除以 0 的错误。请参阅下一节以获取解决方案!
在条件为罕见事件时的通用推理
联合采样是一种利用计算能力的强大技术。但并非总是有效。事实上,当我们所条件的事件的概率足够低,以至于我们不太可能产生与该事件完全匹配的样本时,它就不起作用了。最简单的例子是连续随机变量。考虑简单的疾病模型。让我们将发热从二元变量改为连续变量。为此,我们只需要重新指定发热给定其父变量(流感)的似然性。假设似然性来自正态概率密度函数:$$\begin{align} \text{如果流感 = 0,则发热} \sim N(\mu = 98.3, \sigma = 0.7)\ \therefore f(\text{发热} = x) = \frac{1}{\sqrt{2 \pi \cdot 0.7}} e ^{-\frac{(x - 98.3)²}{2 \cdot 0.7}} \end{align}$$ $$\begin{align} \text{如果流感 = 1,则发热} \sim N(\mu = 100.0, \sigma = 1.8) \ \therefore f(\text{发热} = x) = \frac{1}{\sqrt{2 \pi \cdot 1.8}} e ^{-\frac{(x - 100.0)²}{2 \cdot 1.8}} \end{align}$$
采样(又称粒子)的过程仍然很简单。我们应用相同的流程,直到我们到达采样发热随机变量值(在上一节示例中是第 3 步)的步骤。如果我们为流感采样了 0,我们就从健康成人的正态分布中抽取发热值(\(\mu = 98.3\))。如果我们为流感采样了 1,我们就从流感成人的正态分布中抽取发热值(\(\mu = 100.0\))。问题出现在联合采样的“拒绝”阶段。
当我们为发热采样时,我们得到具有无限精度的数字(例如 100.819238 等)。如果我们条件化某人的发热等于 101,我们会拒绝每一个粒子。为什么?没有粒子的发热会正好是 101。
有几种方法可以解决这个问题。一个特别简单的解决方案是在拒绝粒子时不要太严格。我们可以将所有发热值四舍五入到整数。
有一个名为“似然加权”的算法有时会帮助解决这个问题,但我们没有在 CS109 中介绍。相反,在课堂上我们讨论了一个新的算法,称为马尔可夫链蒙特卡洛(MCMC),它允许我们从“后验”概率中进行采样:在条件事件中固定变量后的随机变量的分布。我们讨论的 MCMC 版本称为 Gibbs 采样。虽然我不要求 CS109 的学生知道如何实现 Gibbs 采样,但我希望大家知道它的存在,并且它并不超出你的能力范围。如果你需要使用它,你可以根据你现在的知识来学习它。
MCMC 比联合采样需要更多的数学知识。对于每一个随机变量,你将需要指定如何根据变量的:父变量、子变量以及子变量的父变量(一组变量,亲切地称为“毯子”)来计算赋值的似然性。想了解更多?请选修 CS221 或 CS228!
思考
虽然未来你将学习到一些更强大的“通用推理算法”,但值得认识到,在这一点上,我们已经达到了 CS109 的重要里程碑。你可以处理非常复杂的概率模型(编码为贝叶斯网络),并且可以对它们进行通用推理查询。为了达到这个目标,我们通过预测疾病的实例进行了具体分析。虽然 WebMD 网站对家用用户来说很棒,但类似的概率模型正在全球成千上万的医院中使用。当你阅读这段内容时,通用推理正在被用于改善真实人类的医疗保健(有时甚至挽救生命)。这对计算机科学家来说是一些值得学习的概率。如果我们没有专家怎么办?我们能否从数据中学习这些概率?跳转到第五部分来回答这个问题。
维度灾难
在机器学习中,就像计算机科学的许多领域一样,经常涉及高维点,高维空间具有一些令人惊讶的概率特性。
一个随机 值 \(X_i\) 是一个均匀分布(Uni(0, 1))。
一个维度为 \(d\) 的随机 点 是 \(d\) 个随机值的列表:\([X_1 \dots X_d]\).

一个随机 值 \(X_i\) 如果 \(X_i\) 小于 0.01 或者 \(X_i\) 大于 0.99,则认为它接近边缘。一个随机值接近边缘的概率是多少?
设 \(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\)。高维点有许多其他现象:例如,点之间的欧几里得距离开始收敛。
人工智能中的公平性
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/fairness/
人工智能常常给人一种客观和“公平”的印象。然而,算法是由人类制作的,并且由可能存在偏见的数据进行训练。有几个部署的人工智能算法的例子已经表明,它们基于性别、种族或其他受保护的群体做出有偏见的决策——即使没有这样的意图。
这些例子也引发了对算法公平性日益增长领域的研究需求。我们如何证明或展示一个算法是以我们认为适当的方式运行的?什么是公平?显然,这些问题很复杂,值得进行深入的讨论。这个例子简单,目的是为了介绍这个话题。

ML 代表机器学习。Solon Barocas 和 Moritz Hardt,"机器学习中的公平性",NeurIPS 2017
什么是公平?
将使用人工智能算法来对一个人是否会偿还贷款进行二元预测(\(G\) 代表猜测)。问题已经出现:该算法在二元受保护群体(\(D\) 代表人口统计)方面是否“公平”?为了回答这个问题,我们将分析算法在历史数据上做出的预测。然后,我们将比较预测与真实结果(\(T\) 代表真实)进行比较。考虑以下算法预测历史的联合概率表:
\(D=0\)
| \(G=0\) | \(G=1\) | |
|---|---|---|
| \(T=0\) | 0.21 | 0.32 |
| \(T=1\) | 0.07 | 0.28 |
\(D=1\)
| \(G=0\) | \(G=1\) | |
|---|---|---|
| \(T=0\) | 0.01 | 0.01 |
| \(T=1\) | 0.02 | 0.08 |
记住,单元格 \(D=i,G=j,T=k\) 包含概率 \(\P(D=i,G=j,T=k)\)。联合概率表给出了所有事件组合的概率。记住,由于每个单元格都是互斥的,所以 \(\sum_i \sum_j \sum_k \P(D=i,G=j,T=k) = 1\)。注意,这种互斥的假设对于人口统计变量可能是问题(有些人可能是混血种族等),这给你一个提示,我们只是在公平性的讨论中刚刚触及表面。让我们使用这个联合概率来了解一些公平性的常见定义。
练习联合边缘化
\(\p(D=0)\) 是什么?\(\p(D=1)\) 是什么?
通过一种称为边缘化的过程,可以计算联合分布中随机变量子集的分配的概率:将所有该分配为真的单元格的概率相加。
注意到 \(\p(D=0) + \p(D=1) = 1\)。这意味着人口统计变量是互斥的。
公平性定义 #1:奇偶性
如果算法做出正预测(\(G\) = 1)的概率在条件化人口统计变量时保持不变,则算法满足“奇偶性”。
这个算法是否满足“奇偶性”?
不满足。由于 \(P(G=1|D=1) \neq P(G=1|D=0)\),此算法不满足奇偶性。当人口统计指标为 1 时,更可能猜测为 1。
公平性定义 #2:校准
如果算法正确(\(G=T\))的概率在不受人口统计因素的影响下保持不变,则算法满足“校准”。
这个算法是否满足校准?
当 \(P(G = T | D = 0) = P(G = T | D = 1)\) 时,算法满足校准。$$ \begin{align} P(G = T | D = 0) &= P(G = 1, T = 1 | D = 0) + P(G = 0, T = 0 | D = 0)\ &= \frac{0.28 + 0.21}{0.88} \approx 0.56 \ P(G = T | D = 1) &= P(G = 1, T = 1 | D = 1) + P(G = 0, T = 0 | D = 1)\ &= \frac{0.08 + 0.01}{0.12} = 0.75 \end{align} $$ 不满足:\(P(G = T | D = 0) \neq P(G = T | D = 1)\)
公平性定义 #3:机会均等
如果算法预测正结果(\(G=1\))的概率在给定结果发生(\(T=1\))的情况下不受人口统计因素的影响,则算法满足“机会均等”。
这个算法是否满足“机会均等”?
当 \(P(G = 1 | D = 0, T = 1) = P(G = 1 | D = 1, T = 1)\) 时,算法满足“机会均等”。$$ $$\begin{align} P(G = 1 | D = 1, T = 1) &= \frac{P(G = 1 , D = 1, T = 1)}{P(D = 1, T = 1)}\ &= \frac{0.08}{0.08 + 0.02} = 0.8 \ P(G = 1 | D = 0, T = 1) &= \frac{P(G = 1 , D = 0, T = 1)}{P(D = 0, T = 1)}\ &= \frac{0.28}{0.28 + 0.07} = 0.8 \end{align}$$ $$ 满足:\(P(G = 1 | D = 0, T = 1) = P(G = 1 | D = 1, T = 1)\)
哪个定义看起来更正确?实际上,可以证明这三个定义不能同时优化,这被称为机器公平性的不可能定理。换句话说,我们构建的任何 AI 系统都将不可避免地违反某些公平性概念。关于这个主题的更深入探讨,这里有一份关于最新研究的有用总结Pessach 等人算法公平性。
性别阴影
在 2018 年,Joy Buolamwini 和 Timnit Gebru 在首届机器学习公平性、责任和透明度会议上发表了一项突破性成果,称为“性别阴影” [1]。他们展示了 Facebook、IBM 和 Microsoft 部署的面部识别算法,在观察浅色皮肤男性时比观察深色皮肤女性时在做出预测(在这种情况下是分类性别)方面要好得多。他们的工作揭示了生产级 AI 的几个不足:有偏见的训练数据集、优化平均准确性(这意味着大多数人口统计数据得到最多的权重)、缺乏对交叉性的认识,等等。让我们看看他们的部分结果。

图由 Joy Buolamwini 和 Timnit Gebru 提供。面部识别算法在观察不同对象时表现差异很大。[1]
Timnit 和 Joy 研究了三个训练以预测性别的分类器,并计算了几个统计数据。让我们看看其中一个统计数据,即面部识别分类器 IBM 的准确率:
| 女性 | 男性 | 深色 | 浅色 | |
|---|---|---|---|---|
| 准确率 | 79.7 | 94.4 | 77.6 | 96.8 |
使用公平性的语言,准确性度量 \(\p(G=T)\)。上表中“女性”所在的单元格表示在查看女性照片时的准确性 \(\p(G=T|D = \text{女性})\)。很容易证明这些生产级系统在“校准”方面非常糟糕:$$\p(G=T|D = \text{女性}) \neq \p(G=T|D = \text{男性})$$ $$\p(G=T|D = \text{浅色}) \neq \p(G=T|D = \text{深色})$$
我们为什么应该关注校准而不是其他公平性的定义?在这种情况下,分类器正在预测性别,其中正预测(例如预测女性)没有直接相关的奖励,就像我们上面的例子中预测某人是否应该获得贷款一样。因此,最显著的想法是:算法对不同性别的准确性是否相同(校准)?
男性/女性和浅色/深色皮肤照片之间的校准不足是一个问题。接下来,Joy 和 Timnit 展示了当查看交叉人口统计特征时,问题变得更加严重。
| 深色男性 | 深色女性 | 浅色男性 | 浅色女性 | |
|---|---|---|---|---|
| 准确率 | 88.0 | 65.3 | 99.7 | 92.9 |
如果算法根据校准是“公平”的,那么你预计准确性将不受人口统计特征的影响而相同。相反,几乎有 34.2 个百分点的差异!\(\p(G=T|D = \text{深色女性})\) = 65.3,而 \(\p(G=T|D = \text{浅色男性}) = 99.7\)
[1] Buolamwini, Gebru. 性别阴影。2018
前进之路?
联邦党人文集作者身份
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/federalist/
让我们编写一个程序来决定詹姆斯·麦迪逊或亚历山大·汉密尔顿是否写了联邦党人文集第 49 篇。这两个人都声称自己写了它,因此作者身份存在争议。首先,我们使用历史论文来估计 \(p_i\),即汉密尔顿生成单词 \(i\) 的概率(独立于所有先前和未来的单词选择)。同样,我们估计了 \(q_i\),即麦迪逊生成单词 \(i\) 的概率。对于每个单词 \(i\),我们观察到该单词在联邦党人文集第 49 篇中出现的次数(我们称该次数为 \(c_i\))。我们假设,在没有证据的情况下,该论文被麦迪逊或汉密尔顿写的可能性是相等的。
定义三个事件:\(H\) 是汉密尔顿写了该论文的事件,\(M\) 是麦迪逊写了该论文的事件,\(D\) 是一个包含在联邦党人文集第 49 篇中观察到的单词集合的论文的事件。我们想知道 \(P(H|D)\) 是否大于 \(P(M|D)\)。这相当于试图决定 \(P(H|D)/P(M|D)\) 是否大于 1。
事件 \(D|H\) 是一个由值 \(p\) 多项式参数化的事件。事件 \(D|M\) 也是一个多项式事件,这次由值 \(q\) 参数化。
使用贝叶斯定理,我们可以简化所需的概率。 $$\begin{align} \frac{P(H|D)}{P(M|D)} &= \frac{ \frac{P(D|H)P(H)}{P(D)} }{ \frac{P(D|M)P(M)}{P(D)}} = \frac{ P(D|H)P(H) }{ P(D|M)P(M)} = \frac{ P(D|H) }{ P(D|M)} \ &= \frac{ { {n} \choose {c_1,c_2,\dots , c_m}} \prod_i p_i^{c_i} }{ { {n} \choose {c_1,c_2,\dots , c_m}}\prod_i q_i^{c_i}} = \frac{ \prod_i p_i^{c_i} }{ \prod_i q_i^{c_i}} \end{align}$$
这听起来很棒!我们已经用我们已经估计的值的乘积来表示所需的概率陈述。然而,当我们将其输入到计算机中时,分子和分母都变成了零。许多接近零的数的乘积对于计算机来说太难表示了。为了解决这个问题,我们使用计算概率中的标准技巧:我们对两边应用对数并应用一些基本的对数规则。 $$\begin{align} \text{log}\Big(\frac{P(H|D)}{P(M|D)}\Big) &= \text{log}\Big(\frac{ \prod_i p_i^{c_i} }{ \prod_i q_i^{c_i}} \Big) \ &= \text{log}(\prod_i p_i^{c_i}) - \text{log}( \prod_i q_i^{c_i}) \ &= \sum_i \text{log}(p_i^{c_i}) - \sum_i \text{log}(q_i^{c_i}) \ &= \sum_i c_i\text{log}(p_i) - \sum_i c_i \text{log}(q_i) \end{align}$$ 这个表达式是“数值稳定的”,我的计算机返回的结果是一个负数。我们可以使用指数来解决 \(P(H|D)/P(M|D)\)。由于负数的指数是一个小于 1 的数,这意味着 \(P(H|D)/P(M|D)\) 小于 1。因此,我们得出结论,麦迪逊更有可能写了联邦党人文集第 49 篇。这是历史学家目前所持有的假设!
名字到年龄
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/name2age/
由于名字流行趋势的变化,一个人的名字可以暗示他们的年龄。美国发布了一份数据,其中包含了在特定年份出生并使用特定名字的美国居民数量,这些数据基于社会保障申请。我们可以使用推理来计算逆概率分布:根据他们的名字更新对一个人年龄的信念。提醒一下,如果我知道某人的出生年份,我可以在一年内计算出他们的年龄。
查询名字:
<canvas id="babyNamePMF" style="max-height: 400px;display:none">
带有该名字的记录:
这个演示基于 1914 年至 2014 年美国社会保障申请的真实数据。感谢www.kaggle.com/kaggle/us-baby-names整理数据。下载数据。
计算
美国社会保障申请数据为你提供了一个函数:count(year, name),该函数返回在特定年份出生并使用特定名字的美国公民数量。你还可以访问一个包含美国所有曾经使用过的名字的列表names和一个包含所有年份的列表years。这个函数隐式地给出了关于名字和出生年份的联合概率。名字和出生年份的联合分配的概率可以估计为具有该名字并在该年出生的人数与数据集中总人数的比例。设\(B\)为某人的出生年份,\(N\)为他们的名字。我们将使用\(k\)表示数据集中的条目数:$ P(B = b,N = n) \approx \frac{\text{count}(b, n)} {k} $
我们真正想回答的问题是:在知道居民的名字是 Gary 的情况下,你认为他们出生于 1950 年的信念是什么?
我们可以通过应用随机变量的条件概率定义开始:\(\P( B = 1950 | N = \text{Gary} ) = \frac{\P(N = \text{Gary} , B = 1950)}{\P(N = \text{Gary})}\) 注意:贝叶斯定理是此类推理任务的一个更典型选择。然而,在这种情况下,由于计算\(P(B = b, N=n)\)比计算\(P(N=n | B=b)\)更容易,因此它是必要的。这就是为什么我们使用了条件概率的定义。这种方法留下一个需要计算的项:\(\P(N = \text{Gary})\),我们可以通过边际化来计算:\(\P( N = \text{Gary}) = \sum_{y \in \text{years}} P(B = y,N = \text{Gary}) \approx \sum\limits_{y \in \text{years}} \frac{\text{count}(y, \text{Gary})}{k}\)
将这些信息综合起来,我们得到:$$\begin{align} \P( B = 1950 | N = \text{Gary} ) &= \frac{\P(N = \text{Gary} , B = 1950)}{\P(N = \text{Gary})} \ &\approx \frac { \Big( \frac{\text{count}(1950, \text{Gary})} {k} \Big) } { \Big( \frac{ \sum\limits_{y \in \text{years}} \text{count}(y, \text{Gary})}{k} \Big) } \ &\approx \frac { \text{count}(1950, \text{Gary}) } { \sum\limits_{y \in \text{years}} \text{count}(y, \text{Gary}) } \end{align}$$
更普遍地,对于任何名字,我们可以计算出生年份的条件的概率质量函数:$$\begin{align} \P( B = b | N = n ) &\approx \frac { \text{count}(b, n) } { \sum\limits_{y \in \text{years}} \text{count}(y, n) } \end{align}$$
从出生年份到年龄
当然,如果\(B\)是一个人的出生年份,那么他们的年龄\(A\)大约是当前年份减去\(B\)。如果某人的生日在年底较晚,可能会相差一年,但我们现在忽略这个小的偏差。所以例如,如果我们认为一个人是在 1988 年出生的,那么当前年份就是他们的年龄 - 1988 =
假设
这个问题有很多假设,值得强调。事实上,每次我们根据稀少的信息进行概括(尤其是关于人口统计数据)时,我们都应该谨慎行事。以下是我能想到的假设:
-
这份数据仅适用于美国人的名字。在其他国家,根据名字给出的年龄概率可能会有很大差异。
-
美国人口普查并不完美。它没有捕捉到所有居住在美国的人,而且有一些人口统计数据没有得到充分代表。这也会影响我们的结果。
揭示年龄的名字
一些名字在特定年份特别流行,这些名字提供了关于出生年份的大量信息。让我们看看一些具有最高最大概率的名字。
中等流行度(>10,000 人使用该名字)
| 姓名 | 最大概率年龄 | 最可能年龄的概率 |
|---|---|---|
| Katina | 49 | 0.245 |
| Marquita | 38 | 0.233 |
| Ashanti | 19 | 0.250 |
| Miley | 13 | 0.250 |
| Aria | 7 | 0.247 |
高流行度(>100,000 人使用该名字)
| 姓名 | 最大概率年龄 | 最可能年龄的概率 |
|---|---|---|
| Debbie | 62 | 0.104 |
| Whitney | 35 | 0.098 |
| Chelsea | 29 | 0.103 |
| Aidan | 18 | 0.098 |
| Addison | 14 | 0.112 |
搜索“Katina 1972”显示了一篇关于 1972 年一个名叫 Katina 的婴儿的有趣文章,这篇文章来自CBS 肥皂剧。Marquita的流行可能源于 1983 年的一个牙膏广告。Ashanti Douglas和Miley Cirus分别在 2002 年和 2008 年成为了流行的歌手。
进一步阅读
一些名字似乎没有足够的数据来做出良好的概率估计。我们能否量化这种概率估计的不确定性?例如,如果一个名字在数据库中只有 10,000 条记录,其中只有 100 人在 1950 年出生,我们对于 1950 年真实概率为\(\frac{100}{10000} = 0.01\)的信心有多大?表达我们不确定性的方法之一是通过贝塔分布。在这种情况下,我们可以将我们对 1950 年概率的信念表示为\(X \sim \Beta(a=101, b=9901)\),这反映了我们看到了 100 个在 1950 年出生的人,以及 9900 个不是在 1950 年出生的人。我们可以绘制这种信念,并聚焦于范围[0, 0.03]:
现在,我们可以提出一些问题,例如,\(X\)在 0.01 附近 0.002 的概率是多少?
从语义上讲,这导致了一个断言:在观察了 100 个在 1950 年出生的名字后,在整个数据集中,该名字有 10,000 个出生记录,有 95%的把握认为某人在 1950 年出生的概率是 0.010 \(\pm\) 0.002。
概率和婴儿
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/prob_baby_delivery/
这个演示曾经是实时的。我们现在知道,交付发生在 1 月 23 日。让我们回到 1 月 1 日,看看那时的概率是什么样的。
在劳拉今天分娩的概率(假设她今天之前还没有分娩)是多少?
今天的日期预产期
今天送达的概率:未来 7 天内送达的概率:逾期天数:**days
今天的无条件概率质量:******
********与预产期相比,人类分娩的可能性有多大?已经有数百万次分娩,这给我们提供了一个相对清晰的画面 [1]。人类怀孕的长度差异很大!你听说过怀孕是 9 个月吗?这是一个粗略的点估计。怀孕的平均持续时间为 278.6 天,怀孕长度有一个标准差(SD)为 12.5 天。这个分布不是正态分布,但大致符合"偏态正态分布"。这是从数十万女性收集的第一胎的一般概率质量函数(这个 PMF 在人口统计学上非常相似,但根据女性是否分娩过而变化):
当然,我们还有更多信息。具体来说,我们知道劳拉尚未在今天之前分娩(当情况改变时,我们将更新这个例子)。我们还知道,超过 14 天晚期的婴儿会在第 14 天进行"诱导"。如果我们今天还没有分娩,那么分娩的可能性有多大?请注意,y 轴的刻度不同:
让我们用推理的形式来解决这个问题。首先,我们引入一个随机变量\(D\)来表示婴儿出生后的天数。注意,如果婴儿在预产期之前出生,\(D\)可以是负数。我们可以使用推理来更新我们对\(D\)的信念,基于我们尚未分娩的观察:$$ \begin{align} \P(D = i | \text{No Baby Yet}) &= \frac{\P(\text{No Baby Yet} | D = i) \P(D = i)}{\P(\text{No Baby Yet})} \ \end{align} $$
\(\P(\text{No Baby Yet} | D = i)\)始终是 1 或 0。注意,在\(D=i\)的条件下,我们被告知实际的分娩日期。如果分娩尚未发生(例如,今天是\(i\)之前),则“尚未分娩”的概率为 1。如果分娩已经发生(例如,今天是\(i\)之后),则“尚未分娩”的概率为 0。
\(\P(D = i)\) 是我们的先验信念(基于历史数据的交货日期的概率)。\(\P(\text{No Baby Yet})\) 是归一化常数。我们不必显式地计算它,而是可以计算每个 \(i\) 值的分子。然后我们可以归一化分布(计算分子的总和,并将每个概率除以这个总和)以隐式地计算它。一个等效(但计算量更大的)解决方案是使用全概率公式展开 \(\P(\text{No Baby Yet})\):$$ \P(\text{No Baby Yet}) = \sum_i \P(\text{No Baby Yet} | D = i) \P(D = i) $$
我们如何处理 \(D = 14\) 后婴儿被催产的事实呢?我们可以调整我们的先验,使得所有 14 天及以后的概率都转移到第 14 天。这相当于以下计算:$$ \P(D = 14) = \sum_{i \geq 14} \P(D = i) $$
def update_belief_baby(prior, today = -19):
# pr_D[i] is P(D = i| No Baby Yet).
pr_D = {}
min_i = -50
max_i = 14
for i in range(min_i, max_i + 1):
# P(NoBaby | D = i)
likelihood = 0 if i < today else 1
pr_D[i] = likelihood * prior[i]
# implicitly computes the LOTP
normalize(pr_D)
return pr_D
def normalize(unormalized_pmf):
total_sum = sum(unormalized_pmf.values())
normalized = {}
for key, value in unormalized_pmf.items():
normalized[key] = value / total_sum
return normalized
扩展问题
克里斯还有两个其他的好朋友,他们的婴儿与他的预产期完全相同(真的!这确实发生了)。三个婴儿都在同一天出生的概率是多少?
三对夫妇在同一天的概率:
我们是如何得到这个数字的?设 \(p_i\) 为一个婴儿在 \(i\) 天出生的概率——这个数字可以从概率质量函数中读出。设 \(D_i\) 为三个婴儿都在 \(i\) 天出生的事件。注意事件 \(D_i\) 与三个婴儿在另一天出生的事件是互斥的(例如,\(D_1\) 与 \(D_2\),\(D_3\) 等等是互斥的)。设 \(N=3\) 为所有婴儿在同一天出生的事件:$$ \begin{align} \p(N=3) &= \sum_i \p(D_i) && \text{因为天数是互斥的} \ &= \sum_i p_i³ && \text{因为三对夫妇是独立的} \end{align} $$ *** * *
致谢:这个问题最初是由克里斯·格雷格提出给我的。**********
贝叶斯碳定年
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/bayesian_carbon_dating/
我们可以使用被称为碳定年法的过程来确定古代文物的年龄。这个过程涉及很多不确定性!你观察到样本中 90%的自然 C14 分子的测量值。你对样本年龄的信念分布是什么?这项任务需要概率模型,因为我们必须同时考虑两个随机变量:样本的年龄\(A\)和剩余的 C14 分子数\(M\)。
碳定年演示
想象你刚刚从你的文物中取了一个样本。对于你取的样本大小,一个活体生物会有 1000 个 C14 分子。使用这个演示来探索剩余的 C14 量和你对文物年龄的信念分布之间的关系。
数字视力测试
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/digital_vision_test/
故事:这个问题最初是在 2017 年春季的 CS109 期末考试中提出的。这成长为一个与前学生 Ali Malik 以及斯坦福眼科医生 Charles Lin 的合作。我们意识到,这实际上是一种更准确测量视力准确度的方法。这个算法被称为斯坦福视力测试,或 StAT,后来被发表在 AAAI 的文章中,并被《科学》杂志和《柳叶刀》杂志报道。据我们所知,该算法仍然是根据视标测试推断视力能力最准确的方法。
您可以在这里找到斯坦福视力测试的演示:myeyes.ai/。注意查看条形图标,以查看随着测试的进行,信念分布如何变化。
*### 数字视力测试
数字视力测试的目标是估计患者视力如何。您可以给患者一系列视力测试,观察他们的反应,然后根据这些反应最终做出诊断。在本章中,我们考虑翻滚 E 任务。患者会看到一个以选定字体大小的 E。E 将随机向上、向下、向左或向右书写,患者必须说出它面向哪个方向。他们的猜测要么是正确的,要么是错误的。患者将有一系列 20 个这样的任务。视力测试对需要眼镜的人很有用,但对于需要密切监测视力微妙下降的眼病患者来说可能至关重要。
数字视力测试中有两个主要任务:(1)根据患者的反应,推断他们的视力,以及(2)选择向患者展示的下一个字体大小。
如何表示看的能力?
能力是一个随机变量!我们定义\(A\)来表示某人看的能力。\(A\)的值介于 0.0(代表法定盲)和 1.0(代表标准视力)之间。虽然看的能力在理论上是一个连续的随机变量,但我们将看的能力离散化为百分之一。因此,\(A \in \{0.00, 0.01, \dots, 0.99\}\)。作为一个小插曲,视力可以表示为许多不同的单位(例如,基于对数单位的 LogMAR)。我们选择这个 0 到 1 的刻度,因为它使数学更容易解释。
\(A\) 的先验概率质量函数,表示为 \(\p(A=a)\),代表我们在看到任何关于患者的观测之前,对 \(A\) 取值为 \(a\) 的信念。这种先验信念来自人们视力自然分布的情况。为了使我们的算法最准确,先验应该最好地反映我们的患者群体。由于我们的眼科测试是为眼科医院的医生设计的,我们使用了眼科医院的历史数据来构建我们的先验。以下是 \(P(A=a)\) 的图表表示:

关于视力能力的先验信念
这里是将相同的概率质量函数以表格形式呈现。之所以能够以表格形式呈现,是因为我们选择将 \(A\) 离散化。在代码中,我们可以通过字典查找访问 \(\p(A=a)\),即 belief[a],其中 belief 存储整个概率质量函数:
| \(a\) | \(\P(A=a)\) | \(a\) | \(\P(A=a)\) | \(a\) | \(\P(A=a)\) | ||
|---|---|---|---|---|---|---|---|
| 0.00 | 0.0020 | 0.20 | 0.0037 | \(\cdots\) | |||
| 0.01 | 0.0021 | 0.21 | 0.0038 | 0.81 | 0.0171 | ||
| 0.02 | 0.0021 | 0.22 | 0.0040 | 0.82 | 0.0173 | ||
| 0.03 | 0.0022 | 0.23 | 0.0041 | 0.83 | 0.0175 | ||
| 0.04 | 0.0023 | 0.24 | 0.0042 | 0.84 | 0.0177 | ||
| 0.05 | 0.0023 | 0.25 | 0.0043 | 0.85 | 0.0180 | ||
| 0.06 | 0.0024 | 0.26 | 0.0045 | 0.86 | 0.0181 | ||
| 0.07 | 0.0025 | 0.27 | 0.0046 | 0.87 | 0.0183 | ||
| 0.08 | 0.0026 | 0.28 | 0.0048 | 0.88 | 0.0185 | ||
| 0.09 | 0.0026 | 0.29 | 0.0049 | 0.89 | 0.0186 | ||
| 0.10 | 0.0027 | 0.30 | 0.0050 | 0.90 | 0.0188 | ||
| 0.11 | 0.0028 | 0.31 | 0.0052 | 0.91 | 0.0189 | ||
| 0.12 | 0.0029 | 0.32 | 0.0054 | 0.92 | 0.0190 | ||
| 0.13 | 0.0030 | 0.33 | 0.0055 | 0.93 | 0.0191 | ||
| 0.14 | 0.0031 | 0.34 | 0.0057 | 0.94 | 0.0192 | ||
| 0.15 | 0.0032 | 0.35 | 0.0058 | 0.95 | 0.0192 | ||
| 0.16 | 0.0033 | 0.36 | 0.0060 | 0.96 | 0.0192 | ||
| 0.17 | 0.0034 | 0.37 | 0.0062 | 0.97 | 0.0193 | ||
| 0.18 | 0.0035 | 0.38 | 0.0064 | 0.98 | 0.0192 | ||
| 0.19 | 0.0036 | 0.39 | 0.0066 | 0.99 | 0.0192 |
观测值
当患者开始测试时,你将开始收集观测值。考虑这个第一个观测值 \(\text{obs}_1\),其中患者被展示了一个字体大小为 0.7 的字母,并回答了问题错误:

我们可以用字体大小和正确性来表示这个观测值。从数学上讲,这可以写成 \(\text{obs}_1 = [0.7, \text{False}]\)。在代码中,这个观测值可以存储为字典
obs_1 = {
"font_size":0.7,
"is_correct":False
}
最终我们将有 20 个这样的观测值:\([\text{obs}_1, \text{obs}_2, \dots, \text{obs}_{20}]\)。
推断能力
我们的首要任务是编写代码,根据观察结果更新我们的 \(A\) 的概率质量函数。首先,让我们考虑如何根据单个观察结果 \(\text{obs}\)(顺便说一句:形式上这是随机变量 \(\text{Obs}\) 取值为 \(\text{obs}\) 的事件)更新我们对视觉能力的信念。我们可以使用 随机变量的贝叶斯定理:$$\begin{align} \P(A=a|\text{obs}) &= \frac{\P(\text{obs}|A=a)P(A=a)}{\P(\text{obs})}\end{align}$$ 这将在对视觉能力的每个赋值 \(a\) 的 for 循环内部进行计算。我们如何计算贝叶斯定理表达式中每个项?我们已经有先验 \(\p(A=a)\) 的值,我们可以使用全概率公式计算分母 \(\p(\text{obs})\):$$\begin{align} \P(\text{obs}) &= \sum_x \P(\text{obs}, A=x) && \href{ ../../part1/law_total/}{\text{LOTP}} \ &= \sum_x P(\text{obs} | A=x)P(A=x)&&\text{链式法则} \end{align}$$ 注意到这个新的 \(\p(\text{obs})\) 表达式中的项已经出现在贝叶斯定理方程的分子中。因此,在代码中我们将(1)为每个 \(a\) 的值计算分子,将其存储为信念的值,(2)计算所有这些项的总和,(3)将每个信念值除以总和。执行步骤 2 和 3 的过程也被称为归一化:
def update_belief(belief, obs):
"""
Take in a prior belief (stored as a dictionary) for a random
variable representing how well someone can see based on a single
observation (obs). Update the belief based using Bayes' Theorem
"""
# loop over every value in the support of the belief RV
for a in belief:
# the prior belief P(A = a)
prior_a = belief[a]
# the obs probability P(obs | A = a)
likelihood = calc_likelihood(a, obs)
# numerator of Bayes' Theorem
belief[a] = prior_a * likelihood
# calculate the denominator of Bayes' Theorem
normalize(belief)
def normalize(belief):
# in place normalization of a belief dictionary
total = belief_sum(belief)
for key in belief:
belief[key] /= total
def belief_sum(belief):
# get the sum of probability mass for a discrete belief
total = 0
for key in belief:
total += belief[key]
return total
在这一点上,我们有一个表达式和相应的代码来更新我们对给定观察到的视觉能力的信念。然而,我们缺少一种计算 \(\p(\text{obs}|A=a)\) 的方法。在我们的代码中,这个表达式是当前未定义的 calc_likelihood(a, obs) 函数。在下一节中,我们将介绍如何计算这个“似然”函数。在这样做之前,让我们看看应用 update_belief 对一个具有上述单个观察结果 obs_1 的患者的结果的例子。
obs_1 表示这位患者识别了一个相当大的字母(字体大小为 0.7)错误。因此,在我们的后验中,我们认为他们视力不佳,尽管我们有很多不确定性,因为只有一次观察。这种信念在我们的更新后的概率质量函数 \(A\),\(\p(A = a | \text{obs}_1)\),称为后验中得到了表达。以下是 obs_1 的后验看起来像什么。请注意,后验 \(\p(A=a|\text{obs}_1)\) 仍然像先验 \(\p(A=a)\) 一样用字典表示:

患者识别字体大小为 0.7 的字母错误时,对视觉能力的后验信念表明患者视力不佳。
似然函数
我们还没有完成!我们还没有说明我们将如何计算 \(\p(\text{obs}|A=a)\)。在贝叶斯定理中,这个术语被称为“似然”。我们眼科检查的似然将是一个函数,它返回输入 \(a\) 和 \(\text{obs}\) 的概率。在 Python 中,这将是一个函数 calc_likelihood(a, obs)。在这个函数中,obs 是一个单独的观察值,如上面描述的 obs_1。想象一下对似然函数的具体调用。这个调用将返回一个具有 0.5 真实视力的人得到字体大小为 0.7 的信件错误的概率。
# get an observation
obs = {
"font_size":0.7,
"is_correct":False
}
# calculate likelihood for obs given a, P(obs | A = a)
calc_likelihood(a = 0.5, obs)
在继续之前,让我们对似然函数做两个关键的说明:
注意 1:在计算似然项 \(\p(\text{obs}|A=a)\) 时,我们不需要估计 \(A\),因为它出现在条件式的右侧。在似然项中,我们被告知 确切地 了解一个人的视力有多好。他们的视力确实是 \(a\)。不要被 \(a\) 是一个(非随机)变量的事实所迷惑。在计算似然函数时,这个变量将有一个数值。
注意 2:变量 obs 代表一次单独的患者互动。它包含两部分:字体大小和一个布尔值,表示患者是否正确地收到了信件。然而,我们认为字体大小不是一个随机变量。相反,我们认为它是一个由计算机固定的常数。因此,\(\p(\text{obs}|A=a)\) 可以简化为 \(\p(\text{correct}|A=a)\)。"correct" 是指随机变量 Correct 取 True 或 False 值的事件:$$\begin{align} \p(&\text{obs}|A=a) \ &= \p(\text{correct}, f|A=a) && \text{obs 是一个元组} \ &= \p(\text{correct}|A=a) && f \text{ 是一个常数} \end{align}$$
定义似然函数 \(\p(\text{correct}|A=a)\) 涉及更多的医学和教育理论,而不是概率理论。你不需要为这门课程了解这些!但了解这些仍然很有趣,而且没有似然函数,我们不会有完整的代码。所以,让我们深入探讨。
视力测试似然函数的一个非常实用的起点来自一个经典的教育模型,称为 "项目反应理论",也称为 IRT。IRT 假设 一个能力为 \(a\) 的学生得到难度为 \(d\) 的问题正确的概率是由一个容易计算的函数控制的:$$\begin{align} \p(&\text{Correct} = \text{True}|a) \ &= \text{sigmoid}(a-d) && d \text{ 是难度} \ &= \frac{1}{1+e^{-(a-d)}} \ \end{align}$$ 其中 \(e\) 是 自然对数底数 常数,\(\text{sigmoid}(x) = \frac{1}{1+e^{-x}}\)。Sigmoid 函数 是一个方便的函数,它接受任何实数值输入,并返回一个在 \([0, 1]\) 范围内的对应值。
这个 IRT 模型引入了一个新的常数:字母的难度\(d\)。正确响应给定字号的字母有多难?在考虑大字号比小字号更容易的情况下,建模难度的最简单方法是将字号为\(f\)的字母的难度定义为\(d = 1-f\)。将这个值代入:$$\begin{align} \p(&\text{Correct} = \text{True}|a)\ &= \text{sigmoid}(a-[1-f])\ &= \text{sigmoid}(a-1+f)\ &= \frac{1}{1+e^{-(a-1+f)}} \end{align}$$ 现在我们有一个完整、尽管简单化的似然函数!在代码中,它看起来会是这样:
def calc_likelihood(a, obs):
# returns P(obs | A = a) using Item Response Theory
f = obs["font_size"]
p_correct_true = sigmoid(a + f - 1)
if obs["is_correct"]:
return p_correct_true
else:
return 1 - p_correct_true
def sigmoid(x):
# the classic squashing function. All outputs are [0,1]
return 1 / (1 + math.exp(-x))
注意,项目反应理论返回患者回答字母正确答案的概率。在上面的代码中,注意如果患者猜错了字母,我们会做什么:$$\p(\text{Correct} = \text{False}|a,f) = 1-\p(\text{Correct} = \text{True}|a,f)$$
在斯坦福视力测试的出版版本中,我们在几个方面扩展了项目反应理论。我们有一个表示患者通过随机猜测得到正确答案的概率的项,以及一个表示即使他们知道正确答案也会犯错误(即“失误”)的项。我们还观察到,底限指数函数似乎比 sigmoid 函数更准确。这些扩展超出了本章的范围,因为它们不是概率洞察的核心。更多细节请参阅原始论文[1]。
多次观察
如果你有多次观察呢?对于多次观察,唯一会改变的是似然项\(\p(\text{Observations}|A=a)\)。我们假设每个观察都是独立的,条件是能够看到。形式上 $$\p(\text{obs}1, \dots, \text{obs} |A=a) = \prod_i \p(\text{obs}_i|A=a)$$ 因此,所有观察的似然将是每个观察自身似然的乘积。这在数学上等同于计算一个观察的后验,并将后验作为新的先验。
完整代码
这里是给定观察推断视力能力的完整代码,不包括用户界面函数和先验信念的文件读取:
def main():
"""
Compute your belief in how well someone can see based
off an eye exam with 20 questions at different fonts
"""
belief_a = load_prior_from_file()
observations = get_observations()
for obs in observations:
update_belief(belief_a,obs)
plot(belief_a)
def update_belief(belief, obs):
"""
Take in a prior belief (stored as a dictionary) for a random
variable representing how well someone can see based on a single
observation (obs). Update the belief based using Bayes' Theorem
"""
# loop over every value in the support of the belief RV
for a in belief:
# the prior belief P(A = a)
prior_a = belief[a]
# the obs probability P( obs | A = a)
likelihood = calc_likelihood(a, obs)
# numerator of Bayes' Theorem
belief[a] = prior_a * likelihood
# calculate the denominator of Bayes' Theorem
normalize(belief)
def calc_likelihood(a, obs):
# returns P(obs | A = a) using Item Response Theory
f = obs["font_size"]
p_correct = sigmoid(a + f - 1)
if obs["is_correct"]:
return p_correct
else:
return 1 - p_correct
# ----------- Helper Functions -----------
def sigmoid(x):
# the classic squashing function. All outputs are [0,1]
return 1 / (1 + math.exp(-x))
def normalize(belief):
# in place normalization of a belief dictionary
total = belief_sum(belief)
for key in belief:
belief[key] /= total
def belief_sum(belief):
# get the sum of probability mass for a discrete belief
total = 0
for key in belief:
total += belief[key]
return total
选择下一个字号
在这一点上,我们已经找到了一种方法来计算在任何测试点我们对患者视力好坏信念的概率质量函数。这为我们留下了一个额外的任务:在数字视力测试中,我们需要为患者选择下一个要显示的字体大小。而不是展示一个预定的集合,我们应该根据我们对患者视力好坏的当前信念做出选择。我们受到了汤普森抽样的启发,这是一种能够平衡探索不确定性和聚焦于你最自信信念的算法。在选择字体大小时,我们只是从我们的当前信念 \(A\) 中抽取一个样本,然后选择我们认为具有该样本值能力的人能够以 80% 的准确率看到的字体大小。我们选择 80% 的常数,以便视力测试不会过于痛苦。
从这个应用中得出的一个有趣的结论是,有许多问题你可以从这门课程中学到知识,并改进当前的技术状态!通常最具创造性的任务是认识到在哪里可以有效地应用基于计算机的概率。即使是对于视力测试,这也不是故事的结束。从 CS109 开始的斯坦福视力测试只是通往更精确数字视力测试旅程中的一步。./总是有更好的方法。有什么想法吗?
发表物和新闻报道:
| [1] | 斯坦福视力测试:一种使用贝叶斯技术和人类视觉反应发现的精确视力测试. 人工智能协会 |
|---|---|
| [2] | 数字化视力测试. 《柳叶刀》杂志。 |
| [3] | 眼,机器人:人工智能显著提高了经典视力检查的准确性. 《科学》杂志。 |
特别感谢共同发明斯坦福视力测试的 Ali Malik*。
桥牌游戏
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/bridge_distribution/
桥牌是最受欢迎的协作牌类游戏之一。它由四名玩家分成两队进行。这个游戏中出现了几个有趣的概率问题。你不需要了解桥牌的规则就能理解这个例子。我专注于一组对游戏策略最重要的概率问题。
手牌强度分布
人们打桥牌的方式是先计算他们的“手牌强度”,然后根据这个数字做出决策。你的手牌强度是一个数字,等于你手中的“A”的数量乘以 4,国王的数量乘以 3,王后的数量乘以 2,以及杰克的数量乘以 1。其他牌不会对你的手牌强度产生影响。让我们将手牌强度视为一个随机变量,并计算其分布。手动计算似乎很复杂——但也许我们可以运行一个模拟?在这里,我们模拟了一百万次桥牌手牌的抽取,并计算了手牌强度。设\(X\)为手牌的强度。根据概率的定义:$$ \p(X=x) \approx \frac{\text{count}(x)}{100000} $$
<canvas id="bridgePoints" style="max-height: 500px"></canvas>
等等!那是泊松分布吗?
如果你非常仔细地观察,可能会注意到这个概率质量函数看起来非常像具有速率\(\lambda = 10\)的泊松概率质量函数。有一个很好的解释来说明为什么速率可能是 10。设\(H\)为你的手牌值。设\(X_i\)为你的手牌中第\(i\)张牌的得分,你的手牌有 13 张牌。\(H = \sum_{i=1}^{13} X_i\)。
首先,我们计算\(\E[X_i]\),即你手中的第\(i\)张牌的得分期望——不考虑其他牌。一张牌可以取四个非零值\(X_i \in \{1, 2, 3, 4\}\)。对于每个值,有 52 张牌中的 4 张具有该值,例如\(\p(X_i=1) = \frac{4}{52}\)。因此 $$\begin{align} \E[X_i] &= \sum_x x \cdot \p(X_i=x) \ &= (1+2+3+4)\frac{1}{13} \ &= \frac{10}{13} \end{align}$$ 然后,我们可以通过使用事实来计算\(\E[H]\),即随机变量之和的期望等于期望之和,无论它们是否独立:\begin{align}\E[H] &= \sum_{i=1}^{13} \E[X_i] \ &= 13 \cdot \E[X_i] \ &= 13 \cdot \frac{10}{13} \ &= 10\end{align} 说\(H\)大约等于\(\sim \Poi(\lambda=10)\)是一个有趣的断言。它表明手牌中的得分以恒定的速率出现,并且你手中的下一个得分与你得到上一个得分的时间是独立的。当然,这个假设的第二部分略有违反。因为有一组固定的牌,所以抽到一张牌会改变其他牌的概率。因此,泊松分布是一个接近但并不完美的近似。
两手手牌强度联合分布
不仅你的牌面强弱很重要,你的牌面和你的搭档的牌面相对强弱也很重要(回想一下,在桥牌中你是与搭档一起玩的)。我们知道这两张牌面不是相互独立的。如果我说你的搭档有一手好牌,这意味着在你的牌中可以有的“高价值”牌更少,因此我对你的实力的信念已经改变。如果你把每位玩家的牌面强弱看作一个随机变量,我们关心的是牌面强弱的联合分布。在下面的联合分布中,x 轴是搭档的牌面强弱,y 轴是你的牌面强弱。这个值是\(\p(\text{Partner} = x, \text{YourPoints} = y)\)。这个联合分布是通过模拟一百万随机发牌的手计算出来的:
从这个联合分布中,我们可以计算条件概率。例如,我们可以通过从联合分布中进行查找来计算你的得分给定你的得分时的条件分布:$$\begin{align} \p(&\text{Partner} = x | \text{YourPoints} = y) \ &= \frac { \p(\text{Partner} = x, \text{YourPoints} = y) } {\p(\text{YourPoints} = y)} && \text{条件概率} \ &= \frac { \p(\text{Partner} = x, \text{YourPoints} = y) } {\sum_z \p(\text{Partner} = z, \text{YourPoints} = y)} && \href{ ../../part1/law_total/}{\text{LOTP} } \end{align}$$
这里是结果的一个工作演示
你的得分:
花色分割的分布
在玩游戏时,很多时候一个玩家会知道两个对手手中某种花色的牌的确切数量(称为对手 A 和 B)。然而,玩家不会知道“分割”:特定花色在对手 A 手中的数量和对手 B 手中的数量。
两位对手的牌面大小相同,每人手中剩余\(k\)张牌。牌手中有已知数量的特定花色(例如黑桃)牌\(n\),你想知道其中有多少张在一张手中,有多少张在另一张手中。分割用元组表示。例如\((0, 5)\)表示对手 A 手中该花色牌为 0 张,对手 B 手中为 5 张。请随意选择\(k\)和\(n\)的具体值:
\(k\),每位玩家手中的牌数:
\(n\),两个手中特定花色牌的数量:
几点注意事项:如果每双手中有\(k\)张牌,那么两个玩家之间总共有\(2k\)张牌。在一局桥牌游戏的开始时,\(k=13\)。必须满足\(n \leq 2k\),因为剩余的花色牌不能比牌的总数多!如果有\(n\)张该花色的牌,那么其他花色的牌有\(2k - n\)张。这个问题假设牌是正确洗过的。
不同花色分割的概率:
设 \(Y\) 为表示对手 A 手中花色数量的随机变量。我们可以通过计算等可能的结果来计算 \(Y\) 等于不同值 \(i\) 的概率。$$\p(Y = i) = \frac { {n \choose i} \cdot {2\cdot k-n \choose k-i} } { {2\cdot k \choose k}}$$
样本集中的每个结果都是选择给定的 \(k\) 张不同花色的牌分给一位玩家(从 \(2k\) 张牌中)。为了在事件空间中创建一个结果,我们首先从 \(n\) 张给定花色的牌中选择 \(i\) 张牌。然后从其他花色的牌中选择 \(k-i\) 张牌。在这里,\(k = 13\) 和 \(n = 5\),以下是拆分的概率质量函数(PMF):
<canvas id="bridgeGraphEqual" style="max-height: 500px">
如果我们要考虑给定拆分的概率,只需选择一手牌(称之为“一手牌”)。如果我告诉你一手牌中某个花色的数量,你就可以自动计算出另一手牌中该花色的数量:回想一下,该花色的数量总和为 \(n\)。
任一手牌至少有 \(j\) 张花色牌的概率
设 \(X\) 为表示任一手牌中花色最高张数的随机变量。我们可以通过使用或然率来计算概率。\(\p(X \geq j) = 1 - \sum_{i=n-j+1}^{j - 1}\p(Y= i)\)
<canvas id="bridgeGraphOver" style="max-height: 500px"></canvas>
</canvas>
求和期望证明
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/expectation_of_sums/
现在我们已经了解了联合概率,我们拥有了证明期望最有用属性之一所需的所有工具:即随机变量和的期望等于期望的和(即使变量不是独立的)。换句话说:
对于任意两个随机变量 \(X\) 和 \(Y\),$$ \E[X + Y] = \E[X] + \E[Y] $$
证明将使用无意识统计学家定律 (LOST),其中函数是加法!
证明: 求和期望
设 \(X\) 和 \(Y\) 为任意两个随机变量:$$\begin{align} \E&[X+Y] \ &= \sum_{x} \sum_{y} (x + y) \cdot P(X=x, Y=y) && \text{LOST}\ &= \sum_{x} \sum_{y} x \cdot P(X=x, Y=y) + y \cdot P(X=x, Y=y) && \text{分配律}\ &= \sum_{x} \sum_{y} x \cdot P(X=x, Y=y) + \sum_{y} \sum_{x} y \cdot P(X=x, Y=y) && \text{重新排列求和}\ &= \sum_{x} x \sum_{y} P(X=x, Y=y) + \sum_{y} y \sum_{x} P(X=x, Y=y) && \text{提取公因式}\ &= \sum_{x} x \cdot P(X=x) + \sum_{y} y \cdot P(Y=y) && \text{边缘定义}\ &= \E[X] + \E[Y] && \text{期望定义} \end{align}$$
在证明的任何地方,我们都不需要假设 \(X\) 和 \(Y\) 是独立的。在第二步中,联合概率最终出现在每个求和中,在两种情况下,一个求和最终对联合概率进行边缘化!
证明演示
下面是一个示例,以展示证明背后的思想。这个表格显示了两个随机变量 $ X $ 和 $ Y $ 的联合概率 \(\P(X=x, Y=y)\),这两个随机变量不是独立的。您将看到如何计算 \(E[X+Y]\) 是 \(E[X]\) 和 \(E[Y]\) 中使用的项的总和。
| \(Y = 4\) | \(Y = 5\) | |
|---|---|---|
| \(X = 1\) | 0.1 | 0.3 |
| \(X = 2\) | 0.2 | 0.4 |
旁白:这两个随机变量每个只能取两个值。联合表中只有四个值将使获得直觉更容易。
使用联合概率计算 $ E[X] $:
证明的一个关键洞察是,我们可以使用联合值来计算 \(E[X]\)。为此,我们将使用 边缘化:$$ P(X = x) = \sum_{y} P(X = x, Y = y) $$ 我们可以展开 \(E[X]\),使其仅使用联合概率表中的值进行计算:$$\begin{align} E[X] &= \sum_{x} x \cdot P(X = x) \ &= \sum_{x} x \cdot \sum_{y} P(X = x, Y = y) && \text{边缘化 }X\ &= \sum_{x} \sum_{y} x \cdot P(X = x, Y = y)&& \text{分配 }y\ \end{align}$$
| $ x $ | $ y $ | $ P(X=x, Y=y) $ | $ x \cdot P(X=x, Y=y) $ |
|---|---|---|---|
| 1 | 4 | 0.1 | 1 × 0.1 = 0.1 |
| 1 | 5 | 0.3 | 1 × 0.3 = 0.3 |
| 2 | 4 | 0.2 | 2 × 0.2 = 0.4 |
| 2 | 5 | 0.4 | 2 × 0.4 = 0.8 |
E[\(X\)] = 0.1 + 0.3 + 0.4 + 0.8 = 1.6
使用联合概率计算 $ E[Y] $:
同样,我们可以仅使用联合概率表中的值来计算 $ E[Y] \(:\)\(\begin{align*} E[Y] &= \sum_{y} y \cdot P(Y = y) \\ &= \sum_{x} y \cdot \sum_{x} P(X = x, Y = y) && \text{对 }Y\text{ 进行边缘化}\\ &= \sum_{x} \sum_{y} y \cdot P(X = x, Y = y)&& \text{分配 }x\\ \end{align*}\)$
| $ x $ | $ y $ | $ P(X=x, Y=y) $ | $ y \cdot P(X=x, Y=y) $ |
|---|---|---|---|
| 1 | 4 | 0.1 | 4 × 0.1 = 0.4 |
| 1 | 5 | 0.3 | 5 × 0.3 = 1.5 |
| 2 | 4 | 0.2 | 4 × 0.2 = 0.8 |
| 2 | 5 | 0.4 | 5 × 0.4 = 2.0 |
E[\(Y\)] = 0.4 + 1.5 + 0.8 + 2.0 = 4.7
使用联合概率计算 $ E[X + Y] $:
我们可以将 $ E[X + Y] $ 重写为上面计算 $ E[X] $ 和 $ E[Y] $ 所用项的总和:$$\begin{align} E[X + Y] &= \sum_{x,y}(x + y) \cdot P(X = x, Y = y)\ &= \sum_{x,y} x \cdot P(X = x, Y = y) + y\cdot P(X = x, Y = y) \end{align}$$
| $ x $ | $ y $ | $ P(x, y) $ | $ x \cdot P(x, y) $ | $ y \cdot P(x, y) $ | $ (x + y) \cdot P(x, y) $ |
| --- | --- | --- | --- | --- |
| 1 | 4 | 0.1 | 0.1 | 0.4 | 0.1 + 0.4 = 0.5 |
| 1 | 5 | 0.3 | 0.3 | 1.5 | 0.3 + 1.5 = 1.8 |
| 2 | 4 | 0.2 | 0.4 | 0.8 | 0.4 + 0.8 = 1.2 |
| 2 | 5 | 0.4 | 0.8 | 2.0 | 0.8 + 2.0 = 2.8 |
回忆一下,$ P(x, y) $ 是 $ P(X=x,Y=y) $ 的简写。
使用上述关于 $ E[X+Y] $ 的公式推导,其中涉及联合概率表中的值:$$\begin{align} E[X + Y] = \sum_{x,y} x \cdot P(X = x, Y = y) + y\cdot P(X = x, Y = y) \end{align}$$ 带入数值:
E[\(X+Y\)] = 0.1 + 0.4 + 0.3 + 1.5 + 0.4 + 0.8 + 0.8 + 2.0 = 6.3
我们可以观察到,当计算 $ E[X] $ 和 $ E[Y] $ 时,这些值恰好各出现一次。这就是为什么证明适用于任何两个随机变量,即使它们不是独立的。
E[\(X\)] = 0.1 + 0.3 + 0.4 + 0.8 = 1.6
E[\(Y\)] = 0.4 + 1.5 + 0.8 + 2.0 = 4.7
因为它们是相加相同的值,所以期望值的和等于期望的和:$ E[X + Y] = E[X] + E[Y] = 1.6 + 4.7 = 6.3 $
贝叶斯病毒载量测试
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/bayesian_viral_load_test/
2022 年秋季斯坦福期中考试问题
我们将构建一个贝叶斯病毒载量测试,该测试更新关于患者病毒载量的信念分布。尽管病毒载量是连续的,但在我们的测试中,我们通过将数量离散化为 0 到 99 之间的整数来表示它,包括 99。病毒载量的单位是每百万样本中的病毒实例数。
如果一个人的病毒载量为 9(换句话说,每 1,000,000 个样本中有 9 个病毒),那么从这个人随机抽取的样本是病毒的概率是多少?
我们对一个患者进行 100,000 个样本的病毒测试。如果这个人的真实病毒载量为 9,那么在我们的 100,000 个样本中恰好有 1 个是病毒的概率是多少?使用计算效率高的近似值来计算你的答案。你的近似值应该尊重得到负病毒样本的概率为 0 的事实。
让我们定义一个随机变量\(X\),表示在真实病毒载量为 9 的情况下,病毒样本的数量。问题是询问\(P(X = 1)\)。我们可以将其视为一个二项过程,其中试验次数\(n\)是样本数量,概率\(p\)是样本为病毒的概率。$$ n = 100,000, p = \frac{9}{1,000,000} $$ 注意到\(n\)非常小,\(p\)非常大,因此我们可以使用泊松近似来近似我们的答案。我们发现\(\lambda = np = 100,000 \cdot 9/1,000,000 = 0.9\),所以\(X \sim \Poi(\lambda = 0.9)\)。最后一步是使用泊松分布的 PMF。 $$ P(X = 1) = \frac{(0.9)¹ e^{-0.9}}{1!} $$
根据我们对患者(他们的症状和个人病史)的了解,我们在列表prior中编码了一个先验信念,其中prior[i]是病毒载量等于\(i\)的概率。prior的长度为 100,键为 0 到 99。
给出一个方程,表示在观察到 100,000 个测试样本中有 1 个病毒样本的情况下,真实病毒载量是\(i\)的更新概率。记住\(0 \leq i \leq 99\)。你可以使用近似值。
我们想要找到 \begin{equation} P(\text{病毒载量} = i | \text{观察到的计数} \frac{1}{100000}) \end{equation} 我们可以应用贝叶斯定理得到 \begin{equation}\label{eq:bayes} = \frac{P(\text{观察到的计数} \frac{1}{100000} | \text{病毒载量} = i)P(\text{病毒载量} = i)}{P(\text{观察到的计数} \frac{1}{100000})} \end{equation} 我们知道我们可以定义一个随机变量 \(X \sim \text{观察到的计数 out of 100,000} | \text{病毒载量} = i\),并且我们可以将 \(X\) 模型化为一个二项分布的泊松近似,其中 \(n = 100000\) 和 \(p = \frac{i}{1000000}\),有 $$ \lambda = np = 100000 \cdot \frac{i}{1000000} = \frac{i}{10} $$ 所以 \(X\) 可以写成 $$ X \sim Poi(\lambda = \frac{i}{10}) $$ 现在,我们可以将我们的贝叶斯定理方程重写为 $$ = \frac{P(X = 1)P(\text{病毒载量} = i)}{P(\text{观察到的计数} \frac{1}{100000})} $$ 现在,我们可以使用泊松概率质量函数和我们的给定 \texttt{先验} 来得到: \begin{equation} = \frac{\frac{\frac{i}{10}e^{\frac{-i}{10}}}{1!}\cdot \texttt{prior[i]}}{P(\text{观察到的计数} \frac{1}{100000})} \end{equation} 现在,我们需要展开我们的分母。我们可以使用全概率公式来展开 $$ P(\text{观察到的计数} \frac{1}{100000}) = \sum_{j = 0}^{99} P(\text{观察到的计数} \frac{1}{100000} | \text{病毒载量} = i)P(\text{病毒载量} = i) $$ 我们可以将其重写为 $$ = \sum_{j = 0}^{99} \frac{\frac{j}{10}e^{\frac{-j}{10}}}{1!}\cdot \texttt{prior[j]} $$ $$ = \sum_{j = 0}^{99} \frac{j}{10}e^{\frac{-j}{10}}\cdot \texttt{prior[j]} $$ 最后,我们可以将这个结果代入得到 $$ \boxed{% \frac{ \frac{i}{10} e^{\frac{-i}{10}} \cdot \texttt{prior[i]}}{\sum_{j = 0}^{99} \frac{j}{10}e^{\frac{-j}{10}}\cdot \texttt{prior[j]}}% }].
CS109 标志
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/dart_logo/
要生成 CS109 标志,我们将向斯坦福校徽的图片投掷五十万次飞镖。我们只保留至少被一次飞镖击中的像素。每个飞镖的 x 像素和 y 像素都从高斯分布中随机选择。令 \(X\) 为代表 x 像素的随机变量,\(Y\) 为代表 y 像素的随机变量,\(S\) 为一个常数,等于标志的大小(其宽度等于其高度)。\(X \sim \mathcal{N}\left(\frac{S}{2}, \frac{S}{2}\right)\) 和 \(Y \sim \mathcal{N}\left(\frac{S}{3},\frac{S}{5}\right)\)
投掷飞镖次数:0
飞镖结果
<canvas style="width:370px; height:370px;" id="imgCanvas"></canvas>
飞镖概率密度
<canvas style="width:370px; height:370px;" id="distCanvas"></canvas>
X 分布
Y 分布
二维跟踪
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/tracking_in_2D/
警告: 在学习联合分布和推理之后,你已经拥有了跟随本例所需的所有技术能力。然而,这非常非常困难。主要是因为你需要同时理解三个复杂的东西:(1) 如何表示连续联合分布,(2) 概率模型中的推理,以及 (3) 相当复杂的观察概率计算。
在本例中,我们将探讨在二维空间中跟踪一个物体的难题。该物体存在于某个 \((x, y)\) 位置,但我们不确定确切的位置!因此,我们将使用随机变量 \(X\) 和 \(Y\) 来表示位置。 $$\begin{align} f(X = x, Y = y) &= f(X = x) \cdot f(Y = y) && \text{在先验中 X 和 Y 是独立的} \ &= \frac{1}{\sqrt{2 \cdot 4 \cdot \pi}}\cdot e ^{-\frac{(x-3)²}{2 \cdot 4}} \cdot \frac{1}{\sqrt{2 \cdot 4 \cdot \pi}}\cdot e ^{-\frac{(y-3)²}{2 \cdot 4}} && \text{使用正态分布的 PDF 公式} \ &= K_1 \cdot e ^{-\frac{(x-3)² + (y-3)²}{8}} && \text{所有常数都放入 } K_1 \end{align}$$ 这种正态分布的组合称为二元分布。以下是先验 PDF 的可视化。 
跟踪一个物体的有趣之处在于根据观察更新你对它位置的信念的过程。比如说,我们从位于原点的声纳设备中获取了一个仪器读数。仪器报告说物体距离为 4 个单位。我们的仪器并不完美:如果真实距离是\(t\)个单位,那么仪器给出的读数将服从均值为\(t\)、方差为 1 的正态分布。让我们可视化这个观察结果:
基于我们对先验信息噪声的了解,我们可以计算在给定物体真实位置\(X\)、\(Y\)的情况下,看到特定距离读数\(D\)的条件概率。如果我们知道物体位于\((x, y)\)的位置,我们可以计算出到原点的真实距离\(\sqrt{x² + y²}\),这将给出仪器高斯分布的均值:$$\begin{align} f(D = d | X = x, Y = y) &= \frac{1}{\sqrt{2 \cdot 1 \cdot \pi}}\cdot e ^{-\frac{\big(d-\sqrt{x² + y²}\big)²}{2 \cdot 1}} && \text{正态概率密度函数,其中 } \mu = \sqrt{x² + y²} \ &= K_2\cdot e ^{-\frac{\big(d-\sqrt{x² + y²}\big)²}{2 \cdot 1}} && \text{所有常数都放入 } K_2 \end{align}$$那么,我们尝试用实际数字来验证一下。假设物体的位置在\((1, 1)\),仪器读数 1 比 2 更有可能吗?$$\begin{align} \frac{f(D = 1 | X = 1, Y = 1)}{f(D = 2 | X = 1, Y = 1) } &= \frac {K_2\cdot e ^{-\frac{\big(1-\sqrt{1² + 1²}\big)²}{2 \cdot 1}}} {K_2\cdot e ^{-\frac{\big(2-\sqrt{1² + 1²}\big)²}{2 \cdot 1}}} && \text{将条件概率密度函数 D 代入}\ &= \frac {e ⁰} {e^{-1/2}} \approx 1.65 && \text{注意\(K_2\)如何相互抵消} \end{align}$$在这个阶段,我们有一个先验信念和一个观察结果。我们希望根据这个观察结果计算一个更新的信念。这是一个经典的贝叶斯公式场景。我们使用联合连续变量,但这并不会使数学变得复杂多少,只是意味着我们将处理密度而不是概率:$$\begin{align} f&(X =x, Y =y | D =4) \ &= \frac{f(D = 4| X = x, Y =y) \cdot f(X = x, Y = y)}{f(D =4)} && \text{使用密度进行贝叶斯计算}\ &= \frac{K_1 \cdot e^{-\frac{[4 - \sqrt{x² + y²})²]}{2}} \cdot K_2 \cdot e^{-\frac{[(x - 3)² + (y - 3)²]}{8}}}{f(D = 4)} && \text{代入}\ &= \frac{K_1 \cdot K_2}{ { f(D =4)}} \cdot e ^{-\big[\frac{[4 - \sqrt{x² + y²})²]}{2} + \frac{[(x - 3)² + (y - 3)²]}{8} \big]} && \text{\(f(D=4)\)相对于\((x,y)\)是常数}\ &= K_3 \cdot e ^{-\big[\frac{(4 - \sqrt{x² + y²})²}{2} + \frac{[(x - 3)² + (y - 3)²]}{8} \big]} && \text{\(K_3\)是新的常数} \end{align}$$哇!这看起来像是一个非常有趣的函数!你已经成功计算了更新的信念。让我们看看它是什么样子。这是一个图,左边是我们的先验,右边是我们的后验:
多么美丽啊!它就像是一个二维正态分布与一个圆的结合。但是等等,那个常数怎么办!我们不知道\(K_3\)的值,但这不是问题,原因有两个:第一个原因是,如果我们想要计算两个位置的相对概率,\(K_3\)将会相互抵消。第二个原因是,如果我们真的想知道\(K_3\)的值,我们可以解出它。这种数学在数百万个应用中每天都在使用。如果有多个观察结果,方程会变得非常复杂(甚至比这个还要复杂)。为了表示这些复杂函数,通常使用一个叫做粒子滤波的算法。
第四部分:不确定性理论
贝塔分布
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part4/beta/
贝塔分布是最常被用作概率分布的分布。在本节中,我们将非常元地讨论我们如何表示概率。到目前为止,概率只是 0 到 1 范围内的数字。然而,如果我们对我们的概率有不确定性,那么用随机变量来表示我们的概率(从而表达我们信念的相对可能性)是有意义的。
贝塔随机变量
| 符号: | \(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\):
在 10 次抛掷中观察到 9 次正面后,你对 \(p\) 的信念是什么?
假设我们有一枚硬币,我们想知道它出现正面的真实概率 \(p\)。我们抛掷硬币 10 次,观察到 9 次正面和 1 次反面。基于这个证据,你对 \(p\) 的信念是什么?根据概率的定义,我们可以猜测 \(p\approx\frac{9}{10}\)。这个数字是一个非常粗略的估计,特别是因为它只基于 10 次抛掷硬币。此外,“点值” \(\frac{9}{10}\) 没有能力表达它的不确定性。
我们能否有一个随机变量来表示真实概率?形式上,让 \(X\) 表示硬币出现正面的真实概率。我们不使用 \(P\) 符号表示随机变量,所以 \(X\) 将会使用。如果 \(X = 0.7\),则正面的概率是 0.7。\(X\) 必须是一个支持集为 \([0, 1]\) 的连续随机变量,因为概率是连续值,必须在 0 和 1 之间。
在抛掷硬币之前,我们可以说我们对硬币出现正面的概率的信念是均匀的:\(X \sim \Uni(0, 1)\)。设 \(H\) 为观察到的正面次数的随机变量,设 \(T\) 为观察到的反面次数的随机变量。\(\P(X =x | H = 9, T = 1)\) 是多少?
这个概率很难想象!然而,用条件反转来推理概率要容易得多:\(P(H = 9, T = 1 | X= x)\)。这个术语提出了一个问题:在正面出现的真实概率为 \(x\) 的情况下,10 次抛硬币中出现 9 个正面和 1 个反面的概率是多少?请你自己证明这个概率只是一个二项概率质量函数,其中 \(n=10\) 次实验,\(p=x\),在 \(k=9\) 个正面处评估:$$ P(H = 9, T = 1 | X= x) = {10 \choose 9}x^{9} (1-x)^{1} $$
我们遇到了一个完美的随机变量 贝叶斯定理 的场景。我们知道一个方向上的条件概率,但我们想了解另一个方向:$$\begin{align} f(&X = x|H =9, T=1) \ &= \frac{P(H =9, T=1|X=x) \cdot f(X=x)}{P(H =9, T=1)} && \text{贝叶斯定理}\ &= \frac{ {10 \choose 9} x^{9} (1-x)^{1} \cdot f(X=x)}{P(H =9, T=1)} && \text{二项概率质量函数}\ &= \frac{ {10 \choose 9} x^{9} (1-x)^{1} \cdot 1}{P(H =9, T=1)} && \text{均匀概率密度函数}\ &= \frac{ {10 \choose 9} }{P(H =9, T=1)} x^{9} (1-x)^{1} && \text{常数移到前面}\ &= K \cdot x^{9} (1-x)^{1} && \text{重命名常数}\ \end{align}$$
让我们来看看那个函数。目前我们可以让 \(K = 110\)。无论 \(K\) 的值如何,我们都会得到相同的形状,只是进行了缩放:
这是一个多么美丽的图像。它告诉我们相对似然与控制我们抛硬币的概率之间的关系。以下是该图表的一些观察结果:
-
即使只有 10 次抛硬币,我们也非常有信心,真实概率大于 0.5。
-
\(X=0.9\) 发生的概率几乎是 \(X=0.6\) 的 10 倍。
-
\(f(X=1) = 0\),这是有道理的。如果正面的概率是 1,我们怎么可能抛出那个一个反面呢?
等等,为什么?
在上述 \(f(X = x|H =9, T=1)\) 的推导中,我们提出了 \(P(H =9, T=1)\) 是一个常数的说法。很多人觉得这很难相信。为什么是这样呢?
将 \(P(H =9, T=1)\) 与 \(P(H =9, T=1 | X= x)\) 并列起来可能会有所帮助。后者说的是“在真实概率为 \(x\) 的情况下,9 个正面的概率是多少”。前者说的是“在所有可能的 \(x\) 分配下,9 个正面的概率是多少”。如果你想要计算 \(P(H =9, T=1)\),你可以使用全概率公式:$$\begin{align} P(&H =9, T=1) \ &= \int_{y=0}^{1} P(H =9, T=1 | X= y) f(X=y) \end{align}$$ 这是一个很难计算的数字,但实际上它是一个与 \(x\) 无关的常数。
贝塔推导
让我们使用 \(h\) 表示观察到的正面数量,\(t\) 表示观察到的反面数量,将上一节中的推导进行推广。
如果我们让 $H =h $ 表示观察到 \(h\) 个正面,让 \(T=t\) 表示在 \(h+t\) 次抛硬币中观察到 \(t\) 个反面。我们想要计算概率密度函数 \(f(X=x|H=h,T=t)\)。我们可以使用完全相同的步骤序列,从贝叶斯定理开始:$$\begin{align} f(&X = x|H =h, T=t) \ &= \frac{P(H =h, T=t|X=x)f(X=x)}{P(H =h, T=t)} && \text{贝叶斯定理}\ &= \frac{ { {h+t} \choose h} xh(1-x)t}{P(H =h, T=t)} && \text{二项概率质量函数,均匀概率密度函数}\ &= \frac{ { {h+t} \choose h}}{P(H =h, T=t)}xh(1-x)t && \text{移项}\ &= \frac{1}{c} \cdot xh(1-x)t && \text{其中 } c = \int_0¹ xh(1-x)t dx \end{align}$$
当我们使用贝叶斯方法来估计概率时,得到的方程定义了一个概率密度函数,从而定义了一个随机变量。这个随机变量被称为贝塔分布,其定义如下:
对于 \(X \sim \Beta(a,b)\) 的概率密度函数(PDF)如下:$$\begin{align} f(X=x) = \begin{cases} \frac{1}{B(a,b)}x{a-1}(1-x) &\mbox{if } 0 < x < 1 \ 0 & \mbox{otherwise} \end{cases} &&\mbox{where } B(a,b) = \int_0¹x{a-1}(1-x)dx \end{align}$$贝塔分布的期望值 \(E[X] = \frac{a}{a + b}\) 和方差 \(Var(X) = \frac{ab}{(a+b)²(a+b+1)}\)。所有现代编程语言都有用于计算贝塔累积分布函数(CDF)的包。在 CS109 中,我们不会要求手动计算 CDF。
为了模拟我们对硬币出现正面的概率的估计:设 \(a = h + 1\) 和 \(b = t + 1\)。贝塔分布被用作随机变量,以表示在估计抛硬币之外的概率信念分布。例如,也许一种药物已经给过 6 名患者,其中 4 名已被治愈。我们可以将我们对药物治愈患者概率的信念表达为 \(X \sim \Beta(a=5,b=3)\):

注意,对于治愈患者的概率,最可能的信念是 \(4/6\),即治愈患者的比例。这个分布表明,我们持有非零信念,认为概率可能不是 \(4/6\)。概率为 0.01 或 0.09 的可能性不大,但概率为 0.5 的可能性相当合理。
贝塔分布作为先验
你可以将 \(X \sim \Beta(a, b)\) 设置为先验,以反映你认为在抛硬币之前硬币的偏差。这是一个主观判断,代表了 \(a+b- 2\) 个“想象”试验,其中 \(a-1\) 个正面和 \(b-1\) 个反面。如果你观察到 \(h + t\) 个实际试验,其中 \(h\) 个正面,你可以更新你的信念。你的新信念将是,\(X \sim \Beta(a+h, b+t)\)。使用先验 \(\Beta(1,1) = \Uni(0, 1)\) 等同于说我们没有看到任何“想象”试验,因此先验地我们对硬币一无所知。这里是对先验也是贝塔分布时 \(X\) 分布的证明:
如果我们的先验信念是 \(X \sim \Beta(a, b)\),那么我们的后验是 \(\Beta(a+h, b+t)\):$$\begin{align} f(&X = x|H =h, T=t) \ &= \frac{P(H =h, T=t|X=x)f(X=x)}{P(H =h, T=t)} && \text{贝叶斯定理}\ &= \frac{ { {h+t} \choose h} xh(1-x)t \cdot \frac{1}{c} \cdot x{a-1}(1-x) } {P(H =h, T=t)} && \text{Beta PMF, Uniform PDF}\ &= K \cdot xh(1-x)t \cdot x{a-1}(1-x) && \text{Combine Constants}\ &= K \cdot x{a+h-1}(1-x) && \text{Combine Like Bases}\ \end{align}$$ 这就是 \(\Beta(a+h, b+t)\) 的概率密度函数。
如果我们有一个贝塔先验信念,那么我们的后验信念也是贝塔,这非常方便。在代码和证明中,如果随着时间的推移你需要对信念进行多次更新,贝塔分布特别方便。这种在观察前后分布类型保持不变的性质被称为共轭先验。
快速问题:你能否随意构造先验和想象中的试验?有些人认为这没问题(他们被称为贝叶斯主义者),有些人认为你不应该构造先验信念(他们被称为频率主义者)。一般来说,对于小数据集,如果你能够提出一个好的先验信念,这将使你更擅长做出预测。
观察:贝塔先验和均匀先验(我们最初使用的)之间有一个深刻的联系。结果是 \(\Beta(1,1) = \Uni(0,1)\)。回想一下,\(\Beta(1,1)\) 表示没有想象中的正面和没有想象中的反面。
添加随机变量
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part4/summation_vars/
在本节关于不确定性理论中,我们将探讨概率论中的某些重要结果。作为一个温和的介绍,我们将从卷积开始。卷积是一种非常复杂的说法,即“将两个不同的随机变量相加”。这个名字来源于添加两个随机变量需要你“卷积”它们的分布函数。详细研究是很有趣的,因为(1)许多自然过程可以建模为随机变量的和,并且(2)因为数学家在证明卷积定理方面取得了重大进展。对于某些特定的随机变量,计算卷积有封闭形式的方程。重要的是,卷积是随机变量的和,而不是对应随机变量的概率密度函数(PDF)的加和。
-
添加两个随机变量
-
独立泊松分布之和
-
独立二项分布之和
-
独立正态分布之和
-
独立均匀分布之和
添加两个随机变量
推导两个随机变量和的似然表达式需要有趣的洞察。如果你的随机变量是离散的,那么 \(X + Y = n\) 的概率是 \(X\) 在 \([0, n]\) 范围内取值,\(Y\) 取值使得两者之和为 \(n\) 的互斥情况的和。这里有一些例子:\(X = 0 \and Y = n\),\(X = 1 \and Y = n - 1\) 等。事实上,所有互斥情况都可以在和中列举出来:
定义:离散变量卷积的通用规则 $$\p(X + Y = n) = \sum_{i=-\infty}^{\infty} \p(X = i, Y = n- i)$$
如果随机变量是独立的,你可以进一步分解项 \(\p(X = i, Y = n- i)\)。让我们探讨一些 \(X+Y=n\) 的互斥情况:
| \(i\) | \(X\) | \(Y\) | |
|---|---|---|---|
| 0 | 0 | \(n\) | \(\P(X=0,Y=n)\) |
| 1 | 1 | \(n-1\) | \(\P(X=1,Y=n-1)\) |
| 2 | 2 | \(n-2\) | \(\P(X=2,Y=n-2)\) |
| ... | |||
| \(n\) | \(n\) | 0 | \(\P(X=n,Y=0)\) |
考虑两个独立骰子的和。设 \(X\) 和 \(Y\) 为每个骰子的结果。以下是和 \(X + Y\) 的概率质量函数:
让我们利用这个上下文来练习推导两个变量的和,在这种情况下 \(\p(X + Y = n)\),从离散随机变量卷积的一般规则开始。我们首先考虑 \(n\) 在 2 到 7 之间的值。在这个范围内,对于 \(i\) 在 1 到 \(n-1\) 之间的所有值,\(\p(X = i, Y = n- i) = \frac{1}{36}\)。对于 \(i\) 范围之外的值,\(n- i\) 不是一个有效的骰子结果,\(\p(X = i, Y = n- i) = 0\):$$\begin{align} \p&(X + Y = n) \ &= \sum_{i=-\infty}^{\infty} \p(X = i, Y = n- i) \ &= \sum_{i=1}^{n-1} \p(X = i, Y = n- i) \ &= \sum_{i=1}^{n-1} \frac{1}{36}\ &= \frac{n-1}{36} \end{align}$$
对于 \(n\) 大于 7 的值,我们可以使用相同的方法,尽管不同的 \(i\) 值会使 \(\p(X = i, Y = n- i)\) 非零。
这个一般规则的推导有一个连续的等价形式:$$\begin{align} &f(X+Y = n) = \int_{i=-\infty}^{\infty} f(X = n-i, Y=i) \d i \end{align}$$
独立泊松的和
对于任何两个泊松随机变量:\(X ~ \sim \Poi(\lambda_1)\) 和 \(Y ~ \sim \Poi(\lambda_2)\),这两个随机变量的和也是一个泊松分布:\(X +Y ~ \sim \Poi(\lambda_1 + \lambda_2)\)。即使 \(\lambda_1\) 不等于 \(\lambda_2\),这也成立。
我们如何证明上述结论?
示例推导:
让我们来证明两个独立的泊松随机变量的和也是泊松分布。设 \(X\sim\Poi(\lambda_1)\) 和 \(Y\sim\Poi(\lambda_2)\) 是两个独立的随机变量,且 \(Z = X + Y\)。\(P(Z = n)\) 是多少?
注意,二项式定理(我们在这个课程中没有涉及,但常用于展开多项式等场景)表明,对于两个数 \(a\) 和 \(b\) 以及正整数 \(n\),\((a+b)^n = \sum_{k=0}^n \binom{n}{k} a^k b^{n-k}\)。
相等 \(p\) 的独立二项式的和
对于任何两个具有相同“成功”概率 \(p\) 的独立二项式随机变量:\(X ~ \sim \Bin(n_1,p)\) 和 \(Y ~ \sim \Bin(n_2,p)\),这两个随机变量的和也是一个二项式:\(X +Y ~ \sim \Bin(n_1 + n_2,p)\)。
希望这个结果是有意义的。卷积是 \(X\) 和 \(Y\) 之间的成功次数。由于每个试验的成功概率相同,现在有 \(n_1 + n_2\) 个试验,它们都是独立的,因此卷积只是一个新的二项分布。当两个二项分布随机变量的参数 \(p\) 不同时,这个规则不成立。
独立正态分布的和
对于任意两个独立的正态随机变量 \(X ~ \sim \mathcal{N}(\mu_1,\sigma_1²)\) 和 \(Y ~ \sim \mathcal{N}(\mu_2,\sigma_2²)\),这两个随机变量的和仍然是一个正态分布:\(X +Y ~ \sim \mathcal{N}(\mu_1 + \mu_2,\sigma_1² + \sigma_2²)\)。
再次强调,这仅适用于两个正态分布是独立的情况。
独立均匀分布的和
如果 \(X\) 和 \(Y\) 是独立的均匀随机变量,其中 \(X \sim \Uni(0,1)\) 和 \(Y \sim \Uni(0,1)\):$$\begin{align} f(X+Y=n) = \begin{cases} n &\mbox{if } 0 < n \leq 1 \ 2-n & \mbox{if } 1 < n \leq 2 \ 0 & \mbox{else} \end{cases} \end{align}$$示例推导:
计算独立均匀随机变量 \(X \sim \Uni(0,1)\) 和 \(Y \sim \Uni(0,1)\) 的 \(X + Y\) 的概率密度函数?首先,将独立随机变量的一般卷积方程代入:$$\begin{align} f(X+Y=n) &= \int_{i=0}^{1} f(X=n-i, Y=i)di\ &= \int_{i=0}^{1} f(X=n-i)f(Y=i)di && \text{独立性}\ &= \int_{i=0}^{1} f(X=n-i)di && \text{因为 } f(Y=y) = 1 \end{align}$$结果发现,这不是最容易积分的。通过尝试在范围 \([0,2]\) 内的几个不同的 \(n\) 值,我们可以观察到我们试图计算的 PDF 在 \(n=1\) 处是不连续的,因此我们可以将其视为两种情况:\(n < 1\) 和 \(n > 1\)。如果我们为这两种情况分别计算 \(f(X+Y=n)\) 并正确约束积分的界限,我们就可以得到每个情况的简单封闭形式:$$\begin{align} f(X+Y=n) = \begin{cases} n &\mbox{if } 0 < n \leq 1 \ 2-n & \mbox{if } 1 < n \leq 2 \ 0 & \mbox{else} \end{cases} \end{align}$$
中心极限定理
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part4/clt/
中心极限定理有两种表述方式。要么是独立同分布随机变量的和是正态分布,要么是独立同分布随机变量的平均值是正态分布。
中心极限定理(和版本)
设 \(X_1, X_2, \dots, X_n\) 为独立同分布的随机变量。当 \(n \rightarrow \infty\) 时,这些随机变量的和趋近于正态分布:$$\begin{align} \sum_{i=1}^{n}X_i \sim N(n \cdot \mu, n \cdot \sigma²) \end{align}$$ 其中 \(\mu = \E[X_i]\) 和 \(\sigma² = \Var(X_i)\)。注意,由于每个 \(X_i\) 都是同分布的,它们共享相同的期望和方差。
到目前为止,你可能认为中心极限定理很棒。但它还有更好的。通过一些代数操作,我们可以证明,如果独立同分布随机变量的样本均值是正态分布,那么等权重的独立同分布随机变量的和也必须是正态分布:
中心极限定理(平均值版本)
设 \(X_1, X_2, \dots, X_n\) 为独立同分布的随机变量。当 \(n \rightarrow \infty\) 时,这些随机变量的平均值趋近于正态分布:$$\begin{align} \frac{1}{n}\sum_{i=1}^{n}X_i \sim N(\mu, \frac{\sigma²}{n}) \end{align}$$ 其中 \(\mu = \E[X_i]\) 和 \(\sigma² = \Var(X_i)\)。
中心极限定理直觉
在上一节中,我们探讨了当你添加两个随机变量时会发生什么。当你添加超过两个随机变量时会发生什么?例如,如果我想要将 100 个不同的均匀随机变量相加:
from random import random
def add_100_uniforms():
total = 0
for i in range(100):
# returns a sample from uniform(0, 1)
x_i = random()
total += x_i
return total
这个函数返回的total值将是一个随机变量。点击下面的按钮运行函数并观察total的结果值:
total:
总分布看起来像什么?让我们多次计算`total`并可视化它产生的值的直方图。 <canvas id="cltHistogram" style="max-height: 400px"></canvas> 这很有趣!`total`是 100 个独立均匀分布的和,看起来是正态的。这是均匀分布的特殊性质吗?不!实际上,这适用于几乎任何类型的分布(只要你要加的东西有有限的均值和有限的方差,这是我们在这个阅读器中涵盖的所有内容)。 * 40 个$X_i$的和,其中$X_i \sim \Beta(a = 5, b = 4)$?正态分布。 * 90 个$X_i$的和,其中$X_i \sim \Poi(\lambda = 4)$?正态分布。 * 50 次骰子投掷的和?正态分布。 * 10000 个$X_i$的平均值,其中$X_i \sim \Exp(\lambda = 8)$?正态分布。 对于任何分布,从该分布中抽取的$n$个独立等权样本的和或平均值将是正态分布。 ## 连续性校正 现在我们可以看到,使用正态分布的二项式近似实际上源于中心极限定理。回想一下,当我们计算正态近似的概率时,我们必须使用连续性校正。这是因为我们正在用连续随机变量(正态分布)来近似离散随机变量(二项分布)。每次你的正态分布近似离散随机变量时,都应该使用连续性校正。一般连续性校正的规则与二项式近似连续性校正的规则相同。 在上面的激励示例中,我们添加了 100 个均匀分布,不需要连续性校正,因为均匀分布的和是连续的。在下面的骰子投掷和示例中,需要连续性校正,因为骰子结果是离散的。 ## 示例 ***示例:*** 你将掷一个 6 面的骰子 10 次。设$X$为 10 个骰子的总和 = $X_1 + X_2 + \dots + X_{10}$。如果你掷出的总和$X \leq 25$或$X \geq 45$,你就赢了游戏。使用中心极限定理计算你赢的概率。回想一下$E[X_i] = 3.5$和$\text{Var}(X_i) = \frac{35}{12}$。 设$Y$为近似正态分布。根据中心极限定理$Y \sim N(10 \cdot E[X_i], 10 \cdot \Var(X_i))$。代入已知的期望和方差值:$Y \sim N(35, 29.2)$ $$\begin{align*} \P(&X \leq 25 \text{ 或 } X \geq 45) \\ &= \P(X \leq 25) + \P(X \geq 45) \\ &\approx \P(Y < 25.5) + \P(Y > 44.5) &&\text{连续性校正} \\ &\approx \P(Y < 25.5) + [1 -\P(Y < 44.5)]\\ &\approx \Phi(\frac{25.5 - 35}{\sqrt{29.2} }) + \Big[1 -\Phi(\frac{44.5- 35}{\sqrt{29.2} })\Big] &&\text{正态 CDF}\\ &\approx \Phi(-1.76) + [1 - \Phi(1.76)]\\ &\approx 0.039 + (1-0.961) \approx 0.078 \end{align*}$$ ***示例:*** 假设你有一个新的算法,你想测试它的运行时间。你对算法运行时间的方差有一个想法:$\sigma² = 4\text{sec}²$,但你想要估计均值:$\mu = t$sec。你可以重复运行该算法(独立同分布试验)。你需要运行多少次试验,才能以 95%的置信度估计运行时间 = $t \pm 0.5$?设$X_i$为第$i$次运行的时间(对于$1 \leq i \leq n$)。 $$\begin{align*} 0.95 = P(-0.5 \leq \frac{\sum_{i=1}^nX_i}{n} - t \leq 0.5) \end{align*}$$ 根据中心极限定理,标准正态分布$Z$必须等于: $$\begin{align*} Z &= \frac{\left(\sum_{i=1}^n X_i\right) - n\mu}{\sigma \sqrt{n}} \\ &= \frac{\left(\sum_{i=1}^n X_i\right) - nt}{2 \sqrt{n}} \end{align*}$$ 现在,我们重新写我们的概率不等式,使得中心项是$Z$: $$\begin{align*} 0.95&= P(-0.5 \leq \frac{\sum_{i=1}^nX_i}{n} - t \leq 0.5)=P(\frac{-0.5\sqrt{n}}{2} \leq \frac{\sum_{i=1}^nX_i}{n} - t \leq \frac{0.5\sqrt{n}}{2})\\ &=P(\frac{-0.5\sqrt{n}}{2} \leq \frac{\sum_{i=1}^nX_i}{n} - t \leq \frac{0.5\sqrt{n}}{2})=P(\frac{-0.5\sqrt{n}}{2} \leq \frac{\sum_{i=1}^nX_i}{n} - t \leq \frac{0.5\sqrt{n}}{2})\\ &=P(\frac{-0.5\sqrt{n}}{2} \leq \frac{\sum_{i=1}^nX_i}{n} - t \leq \frac{0.5\sqrt{n}}{2})\\ &=P(\frac{-0.5\sqrt{n}}{2} \leq Z \leq \frac{0.5\sqrt{n}}{2}) \end{align*}$$ 现在我们可以找到使这个等式成立的$n$的值。 $$\begin{align*} 0.95&= \phi(\frac{\sqrt{n}}{4}) - \phi(-\frac{\sqrt{n}}{4}) = \phi(\frac{\sqrt{n}}{4}) - (1- \phi(\frac{\sqrt{n}}{4})) \\ &= 2\phi(\frac{\sqrt{n}}{4}) - 1\\ 0.975 &= \phi(\frac{\sqrt{n}}{4})\\ \phi^{-1}(0.975) &= \frac{\sqrt{n}}{4} \\ 1.96 &= \frac{\sqrt{n}}{4}\\ n &= 61.4 \end{align*}$$ 因此,需要运行 62 次。如果你对在方差未知的情况下如何扩展这种情况感兴趣,可以查看学生 t 检验的变体。
抽样
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part4/samples/
在本节中,我们将讨论从总体中计算出的统计数据。然后,我们将讨论关于原始总体的概率声明——这是大多数科学学科的基本要求。
假设你是不丹的国王,你想了解你国家人民的平均幸福感。你不能询问每一个人,但你可以询问一个随机子样本。在下一节中,我们将考虑基于子样本可以做出的原则性声明。假设我们随机抽取了 200 名不丹人,并询问他们的幸福感。我们的数据看起来像这样:\({72, 85, \dots, 71}\)。你也可以将其视为一个包含 \(n\) = 200 个独立同分布(独立,同分布)的随机变量 \({X_1, X_2, \dots, X_n}\) 的集合。
理解样本
抽样的理念很简单,但细节和数学符号可能很复杂。这里有一张图片来展示所有涉及的想法:

理论上,存在某个大型总体(例如居住在不丹的 774,000 人)。我们随机抽取了 \(n\) 个人作为样本,其中总体中的每个人都有同等的机会被纳入我们的样本。我们从每个人那里记录一个数字(例如他们报告的幸福感)。我们将从第 i 个人那里抽取的数字称为 \(X_i\)。可视化你的样本 \({X_1, X_2, \dots, X_n}\) 的一种方法是为它们的值制作直方图。
我们假设所有的 \(X_i\) 都是同分布的。这意味着我们假设有一个单一的潜在分布 \(F\),我们从其中抽取了样本。回想一下,离散随机变量的分布应该定义一个概率质量函数。
从样本中估计均值和方差
我们假设我们观察到的数据是从同一潜在分布(\(F\))中独立同分布(IID)的,具有真实的均值(\(\mu\))和真实的方差(\(\sigma²\))。由于我们无法与不丹的所有人交谈,我们必须依靠我们的样本来估计均值和方差。从我们的样本中,我们可以计算出样本均值(\(\bar{X}\))和样本方差(\(S²\))。这些是我们对真实均值和真实方差的最好猜测。 $$\begin{align} \bar{X} &= \sum_{i=1}^n \frac{X_i}{n} \ S² &= \frac{1}{n-1}\sum_{i=1}^n (X_i - \bar{X})² \end{align}$$ 第一个问题要问的是,这些估计是无偏的吗?是的。无偏意味着如果我们重复进行许多次抽样过程,我们估计的期望值应该等于我们试图估计的真实值。我们将证明这一点对于\(\bar{X}\)。\(S²\)的证明在讲义中。 $$\begin{align} E[\bar{X}] &= E[\sum_{i=1}^n \frac{X_i}{n}] = \frac{1}{n}E\left[\sum_{i=1}^n X_i\right] \ &= \frac{1}{n}\sum_{i=1}^n E[X_i] = \frac{1}{n}\sum_{i=1}^n \mu = \frac{1}{n}n\mu = \mu \end{align}$$
样本均值的方程似乎与我们对期望的理解有关。同样可以说样本方差,除了方程分母中令人惊讶的\((n-1)\)。为什么是\((n-1)\)?那个分母是必要的,以确保\(E[S²] = \sigma²\)。
证明背后的直觉是样本方差计算每个样本与样本均值的距离,而不是真实均值。样本均值本身也在变化,我们可以证明它的方差也与真实方差有关。
标准误差
好的,你让我相信我们对均值和方差的估计是无偏的。但现在我想知道我的样本均值相对于真实均值可能会变化多少。 $$\begin{align} \text{Var}(\bar{X}) &= \text{Var}(\sum_{i=1}^n \frac{X_i}{n}) = \left(\frac{1}{n}\right)² \text{Var}\left(\sum_{i=1}^n X_i\right) \ &= \left(\frac{1}{n}\right)² \sum_{i=1}^n\text{Var}( X_i) =\left(\frac{1}{n}\right)² \sum_{i=1}^n \sigma² = \left(\frac{1}{n}\right)² n \sigma² = \frac{\sigma²}{n}\ &\approx \frac{S²}{n} \ \text{Std}(\bar{X}) &\approx \sqrt{\frac{S²}{n}} \end{align}$$
这个术语,Std(\(\bar{X}\)),有一个特殊的名称。它被称为标准误差,这是你在科学论文中报告均值估计的不确定性(以及如何获得误差条)的方式。太好了!现在我们可以为不丹人计算所有这些美好的统计数据。但等等!你从未告诉我如何计算 Std(\(S²\))。这是很难的,因为中心极限定理不适用于\(S²\)的计算。相反,我们需要一种更通用的技术。参见下一章:Bootstrapping
假设我们计算的幸福样本有 \(n\) = 200 人。样本均值是 \(\bar{X} = 83\)(这里的单位是什么?幸福分数?)样本方差是 \(S² = 450\)。现在我们可以计算出我们均值估计的标准误差为 1.5。当我们报告我们的结果时,我们将说我们对不丹平均幸福分数的估计是 83 \(\pm\) 1.5。我们对幸福方差的估计是 450 \(\pm\) ?。
自举法
自举法是一种新发明的统计技术,用于理解统计量的分布和计算 \(p\)-值(\(p\)-值是一个科学主张错误的概率)。它是在 1979 年在这里斯坦福发明的,当时数学家们刚开始理解计算机和计算机模拟如何被用来更好地理解概率。
第一个关键洞见是:如果我们能访问基础分布(\(F\)),那么回答我们可能提出的关于我们的统计量准确性的任何问题都变得简单直接。例如,在前一节中,我们给出了如何从大小为 \(n\) 的样本中计算样本方差的公式。我们知道在期望中,我们的样本方差等于真实方差。但如果我们想知道真实方差在计算出的数值的某个范围内,这个概率是多少?这个问题可能听起来很枯燥,但它对于评估科学主张是至关重要的!如果你知道基础分布 \(F\),你可以简单地重复从 \(F\) 中抽取大小为 \(n\) 的样本的实验,从我们的新样本中计算样本方差,并测试有多少部分落在某个范围内。
自举法的下一个洞见是,我们能从样本本身得到对 \(F\) 的最佳估计!估计 \(F\) 的最简单方法(我们将在本课程中使用的方法)是假设 \(P(X=k)\) 就是 \(k\) 在样本中出现的频率的分数。请注意,这定义了我们估计 \(F\) 的概率质量函数 \(\hat{F}\)。
def bootstrap(sample):
N = number of elements in sample
pmf = estimate the underlying pmf from the sample
stats = []
repeat 10,000 times:
resample = draw N new samples from the pmf
stat = calculate your stat on the resample
stats.append(stat)
stats can now be used to estimate the distribution of the stat
自举法是合理的事情去做,因为你所拥有的样本是你关于基础总体分布实际看起来如何的最佳和唯一信息。此外,大多数样本如果它们是随机选择的,看起来会非常像它们所来自的总体。
要计算 \(\text{Var}(S²)\),我们可以为每个重采样 \(i\) 计算 \(S_i²\),并在 10,000 次迭代后,我们可以计算所有 \(S_i²\) 的样本方差。你可能想知道为什么重采样的大小与原始样本(\(n\))相同。答案是,你所计算的统计量的变异性可能取决于样本的大小(或重采样的大小)。为了准确估计统计量的分布,我们必须使用相同大小的重采样。
自举法有强大的理论保证,并被科学界接受。当基础分布有一个“长尾”或者样本不是独立同分布时,它就会失效。
\(p\)-值计算的例子
我们试图弄清楚人们在不丹还是尼泊尔更快乐。我们在不丹抽取了\(n_1 = 200\)个个体,在尼泊尔抽取了\(n_2 = 300\)个个体,并要求他们对他们的幸福感进行 1 到 10 的评分。我们测量了两个样本的样本均值,并观察到尼泊尔的人稍微快乐一些——尼泊尔样本均值与不丹样本均值在幸福感量表上的差异是 0.5 分。
如果你想要使这个主张科学化,你应该计算一个\(p\)-值。\(p\)-值是指在零假设为真的情况下,测量的统计量等于或大于你所报告的值的概率。零假设是两个测量的现象之间没有关系或两组之间没有差异的假设。
在比较尼泊尔和不丹的情况下,零假设是尼泊尔和不丹的幸福分布没有差异。零假设的论点是:尼泊尔和不丹的幸福分布没有差异。当你抽取样本时,尼泊尔的平均值偶然比不丹高 0.5 分。
我们可以使用自助法来计算\(p\)-值。首先,我们通过从尼泊尔的全部样本和不丹的全部样本中制作一个概率质量函数来估计零假设的潜在分布。
def pvalue_bootstrap(bhutan_sample, nepal_sample):
N = size of the bhutan_sample
M = size of the nepal_sample
universal_sample = combine bhutan_samples and nepal_samples
universal_pmf = estimate the underlying pmf of the universalSample
count = 0
observed_difference = mean(nepal_sample) - mean(bhutan_sample)
repeat 10,000 times:
bhutan_resample = draw N new samples from the universalPmf
nepal_resample = draw M new samples from the universalPmf
mu_bhutan = sample mean of the bhutanResample
mu_nepal = sample mean of the nepalResample
mean_difference = |muNepal - muBhutan|
if mean_difference > observed_difference:
count += 1
pvalue = count / 10,000
这尤其好,因为我们没有在任何地方对样本来自的参数分布做出假设(即我们从未声称幸福感是高斯分布)。你可能听说过 t 检验。这是计算\(p\)-值的另一种方法,但它假设两个样本都是高斯分布,并且它们都有相同的方差。在现在这个我们有合理计算能力的背景下,自助法是一个更正确、更通用的工具。
算法分析
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part4/algorithmic_analysis/
在本节中,我们将使用概率来分析代码。具体来说,我们将计算代码的期望:期望运行时间、期望结果值等。我们将关注期望的原因是它有几个很好的性质。我们迄今为止看到的最有用的性质之一是,期望的和是期望的和,无论随机变量之间是否相互独立。在本节中,我们将看到更多有用的性质,包括总期望定律,这在分析代码时也非常有用:
总期望定律
总期望定律为你提供了一种在计算 \(\E[X|Y=y]\)(其中 \(Y\) 是另一个随机变量)更容易的情况下计算 \(\E[X]\) 的方法:$$\begin{align} \E[X] &= \sum_y \E[X|Y=y] \p(Y=y) \end{align}$$
分布式文件系统
想象一下从斯坦福的电脑上加载一个大型文件的任务,通过互联网。你的文件存储在一个分布式文件系统中。在分布式文件系统中,你的文件最接近的实例可能在世界各地不同位置的几台电脑之一。想象你知道文件位于几个位置 \(l\) 之一的概率:\(\P(L=l)\),以及对于每个位置,获取文件所需的期望时间 \(T\),\(\E[T|L=l]\),假设文件就在那个位置:
| 位置 | \(P(L = l)\) | $\E[T | L = l]$ |
|---|---|---|---|
| 南加州 | 0.5 | 0.3 秒 | |
| 纽约 | 0.2 | 20.7 秒 | |
| 日本 | 0.3 | 96.3 秒 |
总期望定律为计算 \(\E[T]\) 提供了一种直接的方法:
递归代码的玩具示例
在理论计算机科学中,有很多时候你想分析算法的期望运行时间。为了练习这种技术,让我们尝试解决一个简单的递归函数。设 Y 为 recurse() 返回的值。\(E[Y]\) 是什么?
def recurse():
x = random.choice([1, 2, 3]) # Equally likely values
if x == 1:
return 3;
else if (x == 2):
return 5 + recurse()
else:
return 7 + recurse()
为了解决这个问题,我们需要使用总期望定律,将 \(X\) 作为背景变量。
总期望定律的证明
让我们来证明总期望定律。在这个证明中,我们将从 \(\sum_y E[X|Y=y]P(Y=y)\) 开始,并展示它等于 \(E[X]\)。我们的第一步将是展开 \(E[X|Y=y]\)。证明的其余部分将只是代数运算:
信息论
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part4/information_theory/
信息论是一个极其强大的视角,在众多算法中扮演着核心角色,包括决策树、WordleBot、自适应测试、最佳扑克玩法甚至数据压缩(如霍夫曼编码或 JPEG 文件)!本章的目标是在展示信息论的强大功能的同时,尽可能保持内容的直接性。为此,一个很好的起点是思考如何编写一个能够玩“想一个动物”问答游戏的机器人。
想一个动物!
“想一个动物”游戏是这样的:人类将要想一个动物。我们假设他们选择动物的概率分布是已知的(基于四岁孩子对动物的喜爱程度):

你的算法任务是选择下一个要问的问题。假设你被提供了一个包含经典问题(如)的“是”或“否”问题库:
-
它是宠物吗?
-
它住在水里吗?
-
你在想着狗吗?
选择最佳问题
我们如何选择最佳问题来提问呢?考虑一个简化版的游戏,有五种动物(狗、猫、大象、熊和猴子),并且只有两个问题可供选择:“它是宠物吗?”和“它是狗吗?”对于每个问题,我们可以使用全概率公式来思考回答“是”或“否”的概率。甚至更好!对于每个可能的问题和每个可能的答案,如果我们看到那个问题的答案,我们可以思考由此产生的动物概率质量函数!
我们已经非常接近了!如果我们能够量化四个结果概率质量函数的不确定性,我们就可以简单地选择一个最小化我们对人们所想动物预期不确定性的问题。这种不确定性的量化形式上称为“熵”,它是信息论中的关键概念。
从高层次衡量不确定性
让 \(X\) 是任何随机变量。量化 \(X\) 的概率质量函数所代表的多少不确定性的一个非常优雅的方法是思考 \(X\) 可能取的所有值,并对每个值计算如果 \(X\) 确实取了那个值你会多么惊讶。如果你对这些惊讶值的加权求和,你会得到随机变量的预期惊讶值
观察事件 \(P(E)\) 和 \(\text{Surprise}(E)\) 的值之间的关系,我们可以观察到一些直观的关系:
| 事件概率 \(P(E)\) | 事件惊讶 \(\text{Surprise}(E) = \log_2 \frac{1}{P(E)}\) |
|---|---|
| 1/2 | 1 |
| 1/4 | 2 |
| 1/8 | 3 |
| 1/16 | 4 |
| 1/32 | 5 |
| 1/64 | 6 |
| 1/128 | 7 |
如果一个概率为 \(P(E) = 1/16\) 的事件发生,我们将比一个概率为 \(P(E) = 1/2\) 的事件发生时感到四倍的“惊讶”。这感觉很好!
定义: 事件的惊讶(信息含量)
事件 E 的信息含量,也称为惊讶或自信息,是一个随着事件概率的降低而增加的函数。当概率接近 1 时,事件的惊讶值较低,但如果概率接近 0,事件发生的惊讶值较高。这种关系由以下函数描述:
这里是计算随机变量不确定度 \((H)\) 的代码,基于其概率质量函数:
import numpy as np
def calc_uncertainty(pmf):
"""
Calculate how much uncertainty is represented by this
probability mass function. Also known as the Entropy of a
random variable, H(X).
"""
uncertainty = 0
for x in pmf:
p_x = pmf[x]
# skip zero probabilities
if p_x == 0: continue
suprise_x = np.log2(1/p_x)
uncertainty += suprise_x * p_x
return uncertainty
现在我们已经拥有了在“想一个动物”游戏中选择最佳问题的所有理论工具。对于每个可能的概率质量函数,我们都可以计算该 PMF 的不确定度 \((H)\):

问题“它是宠物吗?”的预期不确定度为 1.3。问题“它是狗吗?”的预期不确定度为 1.7。因此,如果我们问“它是宠物吗?”这个问题,我们预期对朋友所想的动物会更有信心。
这只是信息论众多应用之一!
分布之间的距离
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part4/divergence/
这里有一个重要的问题!你如何量化两个分布之间的差异?换句话说,如果我有两个概率质量函数,我能计算出一个数字来表示它们彼此之间有多大的差异?这里有三种合理的方式来量化分布之间的距离:
总变差距离
遍历所有可能的值并计算概率的绝对差异。
定义: 总变差距离
设 \(X\) 和 \(Y\) 为离散随机变量
地球迁移距离
想象一个分布是一堆泥土。要让它看起来和另一个分布一样,需要做多少工作?也称为 Wasserstein 度量。
这个值非常有意义,但它没有封闭形式的方程。相反,它通过求解线性规划来计算。如果随机变量可以取的值的范围大小为 \(n\),线性规划的计算时间为 \(O(n³ \cdot \log n)\),这非常慢。
库尔巴克-莱布勒散度
设 \(X\) 和 \(Y\) 为离散随机变量。计算当实际概率质量函数为 \(X\) 时,使用 \(Y\) 作为概率质量函数带来的“额外惊喜”的期望值。
定义: 库尔巴克-莱布勒散度
设 \(X\) 和 \(Y\) 为离散随机变量
这里是计算每年观察到的飓风概率质量函数与预测的泊松分布差异的示例代码
from scipy import stats
import math
def kl_divergence(predicted_lambda, observed_pmf):
"""
We predicted that the number of hurricanes would be
X ~ Poisson(predicted_lambda) and observed a real world
number of hurricanes Y ~ observed_pmf
"""
X = stats.poisson(predicted_lambda)
divergence = 0
# loop over all the values of hurricanes
for i in range(0, 40):
pr_X_i = X.pmf(i)
pr_Y_i = observed_pmf[i]
excess_surprise_i = math.log(pr_X_i / pr_Y_i)
divergence += excess_surprise_i * pr_X_i
return divergence
维度诅咒
在机器学习中,就像计算机科学的许多领域一样,经常涉及高维点,而高维空间具有一些令人惊讶的概率性质。
一个随机值 \(X_i\) 是一个均匀分布的值:Uni(0, 1)。
一个 \(d\) 维的随机点是一个 \(d\) 个随机值的列表:\([X_1 \dots X_d]\)。

一个随机值 \(X_i\) 如果 \(X_i\) 小于 0.01 或者 \(X_i\) 大于 0.99,则该值接近边缘。一个随机值接近边缘的概率是多少?
设 \(E\) 为随机值接近边缘的事件。\(P(E) = P(X_i < 0.01) + P(X_i > 0.99) = 0.02\)
一个三维的随机点 \([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\) 高维点的许多其他现象:例如,点之间的欧几里得距离开始收敛。
Thompson 采样
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/thompson/

想象一下你必须做出以下一系列决定。你有两种药物可以给药,药物 1 或药物 2。最初你不知道哪种药物更好。你想要知道哪种药物最有效,但与此同时,探索的成本很高。
这里有一个例子:
Welcome to the drug simulator.
There are two drugs: 1 and 2.
Next patient. Which drug? (1 or 2): 1
Failure. Yikes!
Next patient. Which drug? (1 or 2): 2
Success. Patient lives!
Next patient. Which drug? (1 or 2): 2
Failure. Yikes!
Next patient. Which drug? (1 or 2): 1
Failure. Yikes!
Next patient. Which drug? (1 or 2): 1
Success. Patient lives!
Next patient. Which drug? (1 or 2): 1
Failure. Yikes!
Next patient. Which drug? (1 or 2): 2
Success. Patient lives!
Next patient. Which drug? (1 or 2): 2
Failure. Yikes!
Next patient. Which drug? (1 or 2):
这个问题出奇地复杂。有时它被称为“多臂老丨虎丨机问题!”事实上,对这个问题的完美答案可能非常难以计算。有许多近似解,并且这是一个活跃的研究领域。
一种解决方案已经变得相当受欢迎:Thompson 采样。它易于实现,易于理解,有可证明的保证 [1],并且在实践中表现良好 [2]。
你对选择的了解
Thompson 采样的第一步是表达你对选择(以及你不知道的)的了解。让我们回顾一下上一节中提到的两种药物。到结束时,我们测试了药物 1 四次(1 次成功)和药物 2 四次(2 次成功)。一种复杂的方式来表示我们对药物 1 和药物 2 后面隐藏的概率的信念是使用 Beta 分布。让 \(X_1\) 表示对药物 1 概率的信念,让 \(X_2\) 表示对药物 2 概率的信念。$$ $$\begin{align} X_1 \sim \Beta(a = 2, b = 4)\ X_2 \sim \Beta(a = 3, b = 3) \end{align}$$ $$
回想一下,在具有均匀先验的 Beta 分布中,第一个参数 \(a\) 是观察到的成功次数 + 1。第二个参数 \(b\) 是观察到的失败次数 + 1。从图形上观察这两个分布是有帮助的:
如果我们不得不猜测,药物 2 看起来更好,但仍然有很多不确定性,这体现在这些信念的高方差中。这是一个有用的表示。但我们如何利用这些信息来做出下一个药物的好决定。
做出选择
确定正确的选择很难!如果你只有一个更多的病人,那么你该做什么就很明确了。你应该计算 \(X_2 > X_1\) 的概率,如果这个概率超过 0.5,那么你应该选择 \(a\)。然而,如果你需要持续给药,那么正确的选择就不那么明确了。如果你选择 1,你将错过了解 2 的机会。我们该怎么办?我们需要平衡“探索”的需求和利用已知信息的需要。
汤普森采样的简单思想是随机地根据其成为最优选择的概率来做出选择。在这种情况下,我们应该选择药物 1,其选择的概率是 1 大于 2。人们在实践中是如何做到这一点的呢?他们有一个非常简单的公式。从每个 Beta 分布中随机采样。选择其采样值较大的选项。
sample_a = sample_beta(2, 4)
sample_b = sample_beta(3, 3)
if sample_a > sample_b:
choose choice a
else:
choose choice b
采样意味着什么?这意味着根据概率密度函数(或概率质量函数)选择一个值。所以在我们上面的例子中,我们可能会为药物 1 采样 0.4,为药物 2 采样 0.35。在这种情况下,我们会选择药物 1。
在开始时,汤普森采样“探索”了相当长的时间。随着它越来越确信一种药物比另一种药物更好,它将开始大多数时候选择那种药物。最终,它将收敛到知道哪种药物最好,并且它将始终选择那种药物。
夜视功能
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/night_sight/
在这个问题中,我们探讨如何使用概率论在黑暗中拍照。数码相机有一个传感器,在照片拍摄的持续时间中捕获光子以生成图片。然而,这些传感器容易受到“噪声”的影响,即撞击镜头的光子数量的随机波动。在问题的范围内,我们只考虑单个像素。噪声光子到达表面的到达率是恒定的。

左:使用标准照片捕获的照片。右:使用快门连拍的同张照片 [1].
对于噪声,标准差是关键!为什么?因为如果相机可以计算预期的噪声量,它可以直接减去它。但是围绕平均值的波动(以标准差衡量)会导致相机无法简单减去的测量变化。
第一部分:标准照片
首先,让我们计算以标准方式拍照时的噪声量。如果照片拍摄的持续时间是 1000 𝜇s,那么像素在单次拍照中捕获的光子数量的标准差是多少?请注意,噪声光子以每微秒 10 光子的速率(𝜇s)落在特定的像素上。
标准照片中的噪声:正如你可能猜到的,因为照片以恒定的速率撞击相机,并且彼此独立,所以撞击任何像素的噪声照片数量被建模为泊松分布!对于给定的噪声率,设\(X\)为撞击像素的噪声照片数量:$$X \sim \Poi(\lambda = 10,000).$$ 注意,10,000 是 1000𝜇s 内撞击的平均光子数(持续时间以微秒为单位乘以每微秒的光子数)。泊松的标准差简单地等于其参数的平方根,\(\sqrt{\lambda}\)。因此,捕获的噪声光子的标准差为 100(相当高)。
第二部分:快门拍摄
为了减轻噪声,斯坦福大学的毕业生意识到你可以进行快门拍摄(连续快速拍摄多张照片)并累加捕获的光子数量。由于手机相机的限制,相机在 1000μs 内最多可以拍摄 15 张照片,每张照片的持续时间为 66μs。如果我们对 15 张照片的快门拍摄进行平均,光子数量的标准差是多少?
快门拍摄中的噪声:
设 \(Y\) 为单个像素捕获的 15 张照片中光子散粒噪声的平均数量。我们想要计算 \(\text{Var}(Y)\)。具体来说,\(Y = \frac{1}{15}\sum_{i=1}^{15} X_i\),其中 \(X_i\) 是第 i 张照片中的散粒噪声光子数量。类似于前一部分:$$X_i \sim \Poi(\lambda = 66 \cdot 10)$$ 由于 \(X_i\) 是泊松分布,\(\E[X_i] = 660\) 和 \(\Var(X_i) = 660\)。
由于 \(Y\) 是独立同分布随机变量的平均值,中心极限定理将会发挥作用。此外,根据中心极限定理的规则,\(Y\) 的方差将等于 \({1}/{n}\cdot \Var(X_i)\)。 $$\begin{align} \Var(Y) &= {1}/{n}\cdot \Var(X_i) \ &= 1/15 \cdot 660 = 44 \end{align}$$ 因此,标准差将是这个方差的平方根 \(\Std(Y) = \sqrt{44}\),这大约是 6.6。这是一个巨大的散粒噪声减少!
问题由 Will Song 和 Chris Piech 提出。由谷歌的 Night Sight 提供。
P-Hacking
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/p_hacking/
结果表明,科学有一个缺陷!如果你测试了许多假设,但只报告了具有最低 p 值的那个,那么你更有可能得到一个虚假的结果(一个由机会产生而不是真实模式的结果)。
回顾 p 值:p 值原本是用来表示虚假结果概率的。它是如果两个总体实际上完全相同,则在数据集中观察到至少与观察到的均值差异(或你测量的任何统计量)一样大的差异的概率。p 值 < 0.05 被认为是“统计上显著的”。在课堂上,我们比较了两个总体的样本均值并计算了 p 值。如果我们有 5 个总体并寻找具有显著 p 值的成对比较,这被称为 p-hacking!
为了探索这个想法,我们将寻找一个完全随机的数据集中的模式——每个值都是均匀分布(0,1),并且与其他任何值独立。在这个玩具数据集中,任何均值差异都没有明显的意义。然而,我们可能只是偶然地发现一个看似统计上显著的结果。以下是一个包含 5 个随机总体、每个总体有 20 个样本的模拟数据集的例子:

上表中的数字只是为了演示目的。你不应该基于这些数字得出结论。我们称每个总体为随机总体,以强调其中没有模式。
有许多比较
你有多少种方法可以从一组五个总体中选择一对进行比较?总体内元素的价值以及成对的顺序都不重要。
理解从均匀分布(0,1)中抽取 20 个样本的均值分布的近似
均匀分布(0, 1)的方差是多少?
设 \(Z \sim \Uni(0, 1)\) $$\begin{align} \Var(Z) &= \frac{1}{12}(\beta - \alpha) \ &=\frac{1}{12} (1-0)\ &= \frac{1}{12} \end{align}$$
从均匀分布(0,1)中抽取 20 个样本的均值分布的近似是什么?
设 \(Z_1...Z_n\) 是独立同分布的 \(\Uni(0,1)\)。设 \(\bar{X} = \frac{1}{n} \sum_{i=1}^{n} Z_i\)。 $$\E[X] = \frac{1}{n} \sum_{i=1}^{n} E[Z_i] = \frac{1}{n} \sum_{i=1}^{n} 0.5 = \frac{n}{n} 0.5 = 0.5$$ $$\begin{align} \Var(X) &= \Var\left(\frac{1}{n} \sum_{i=1}^{n} Z_i\right) \ &= \frac{1}{n²} \Var\left( \sum_{i=1}^{n} Z_i\right)\ &= \frac{1}{n²} \sum_{i=1}^{n} \Var\left(Z_i\right) \ &= \frac{1}{n²} \sum_{i=1}^{n} v \ &= \frac{n}{n²} v = \frac{v}{n} = \frac{v}{20} = \frac{1}{240} \end{align}$$ 使用中心极限定理,\(\bar{X}\sim N\left(\mu = 0.5 , \sigma² = \frac{1}{240}\right)\)
从一个总体减去另一个总体的均值分布的近似是什么?注意:如果第一个总体的均值小于第二个总体,则此值可能为负。
设 \(X_1\) 和 \(X_2\) 为总体均值。
\(X_1\sim N(\mu = 0.5 , \sigma² = \frac{1}{240})\)
\(X_2\sim N(\mu = 0.5 , \sigma² = \frac{1}{240})\) 期望值计算简单,因为 $$E[X_1 - X_2] = E[X_1] - E[X_2] = 0$$ $$\begin{align} \Var(X_1 - X_2) &= \Var(X_1) + \Var(X_2) \ &= \frac{1}{120} \end{align}$$ 独立正态分布的和(或差)仍然是正态分布:\fbox{\(Y \sim N(\mu = 0, \sigma² = \frac{v}{10})\)}(8 分) 如果只有两个种群,那么最小的均值差异\(k\),使得差异在统计上显著是多少?换句话说,观察到均值差异为\(k\)或更大的概率小于 0.05。这个问题的一个棘手之处在于要认识到距离的双向性。如果\(P(Y<-k)\)或\(P(Y > k)\),我们会认为这是一个显著的距离。 $$\begin{align} P(Y < -k) + P(Y > k) &= 0.05 \ F_Y(-k) + (1 - F_Y(k)) &= 0.05 \ (1-F_Y(k)) + (1 - F_Y(k)) &= 0.05 \ 2 - 2F_Y(k) &= 0.05 \ F_Y(k) &= 0.975 \end{align}$$ 现在我们需要求逆\(\Phi\)来得到\(k\)的值。 $$\begin{align} 0.975 &= \Phi\Big(\frac{k - 0}{\sqrt{v/10}}\Big) \ \Phi^{-1}(0.975) &= \frac{k}{\sqrt{v/10}} \ k &= \Phi^{-1}(0.975)\sqrt{v/10} \end{align}$$(5 分) 给出一个表达式,表示 5 个随机种群中最小的样本均值小于 0.2 的概率。设\(X_i\)为种群\(i\)的样本均值。 $$\begin{align} P(min{X_1 ... X_n} < 0.2) &= P\left(\bigcup_{i=1}^{5} X_i < 0.2\right) \ &= 1 - P\left(\left(\bigcup_{i=1}^{5} X_i < 0.2\right)^{\complement}\right) \ &= 1 - P\left(\bigcap_{i=1}^{5} X_i \geq 0.2\right) \ &= 1 - \prod_{i=1}⁵ P(X_i \ge 0.2) \ &= 1 - \prod_{i=1}⁵ 1 - \Phi\Big(\frac{0.2 - 0.5}{\sqrt{v/20}}\Big) \ \end{align}$$(7 分) 使用以下函数编写代码,估计在 5 个种群中找到均值差异的概率,这种差异被认为是显著的(使用设计用于比较两个种群的 bootstrap 方法)。至少运行 10,000 次模拟来估计你的答案。你可以使用以下辅助函数。
# the smallest difference in means that would look statistically significant
k = calculate_k()
# create a matrix with n_rows by n_cols elements, each of which is Uni(0, 1)
matrix = random_matrix(n_rows, n_cols)
# from the matrix, return the column (as a list) which has the smallest mean
min_mean_col = get_min_mean_col(matrix)
# from the matrix, return the row (as a list) which has the largest mean
max_mean_col = get_max_mean_col(matrix)
# calculate the p-value between two lists using bootstrapping (like in pset5)
p_value = bootstrap(list1, list2)
编写伪代码:
n_significant = 0
k = calculate_k()
for i in range(N_TRIALS):
dataset = random_matrix(20, 5)
col_max = get_max_mean_col(dataset)
col_min = get_min_mean_col(dataset)}
diff = np.mean(col_max) - np.mean(col_min)}
if diff >= k:
n_significant += 1}
print(n_significant / N_TRIALS)
差分隐私
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/differential_privacy/
最近,许多组织已经发布了在大型数据集上训练的机器学习模型(GPT-3、YOLO 等...)。这对科学是一个巨大的贡献,并简化了现代人工智能研究。然而,公布这些模型可能会允许对模型进行潜在的“逆向工程”,以揭示模型的训练数据。具体来说,攻击者可以下载一个模型,查看参数值,然后尝试重建原始训练数据。这对于在敏感数据(如健康信息)上训练的模型来说尤其糟糕。在本节中,我们将使用随机性作为防御算法“逆向工程”的方法。
注入随机性
一种对抗算法逆向工程的方法是在已经存在的数据集中添加一些随机元素。设
代表一组真实的人类数据。考虑以下代码片段:
def calculateXi(Xi):
return Xi
简单来说,攻击者可以针对所有 100 个样本调用上述操作,揭示所有 100 个数据点。相反,我们可以注入一些随机性:
def calculateYi(Xi):
obfuscate = random() # Bern with parameter p=0.5
if obfuscate:
return indicator(random())
else:
return Xi
攻击者可以期望调用新函数 100 次,并得到其中 50 个的正确值(但他们不知道是哪 50 个)。
恢复 \(p\)
现在考虑如果我们发布 calculateYi 函数,一个对样本均值感兴趣的研究者如何获取有用的数据?他们可以查看:
其期望值为:
然后为了揭示一个估计值,科学家可以这样做,
然后继续进行更多研究!
第五部分:机器学习
参数估计
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part5/parameter_estimation/
我们已经学习了多种随机变量的分布,所有这些分布都有参数:当你定义随机变量时作为输入提供的数字。到目前为止,当我们处理随机变量时,要么明确告知参数的值,要么通过理解生成随机变量的过程来推断这些值。
如果我们不知道参数的值,也无法从自己的专业知识中估计它们,那会怎样?如果我们知道的不是随机变量,而是大量使用相同潜在分布生成的数据示例,那又会怎样?在本章中,我们将学习从数据中估计参数的正式方法。
这些思想对于人工智能至关重要。几乎所有现代机器学习算法都是这样工作的:(1)指定一个具有参数的概率模型。(2)从数据中学习这些参数的值。
参数
在我们深入参数估计之前,首先让我们回顾一下参数的概念。给定一个模型,参数是产生实际分布的数字。在伯努利随机变量的情况下,单个参数是值 \(p\)。在均匀随机变量的情况下,参数是定义最小值和最大值的 \(a\) 和 \(b\) 值。以下是随机变量及其对应参数的列表。从现在开始,我们将使用符号 \(\theta\) 来表示所有参数的向量:
| Distribution | Parameters |
|---|---|
| Bernoulli(\(p\)) | \(\theta = p\) |
| Poisson(\(\lambda\)) | \(\theta = \lambda\) |
| Uniform(\(a, b\)) | \(\theta = [a, b]\) |
| Normal(\(\mu, \sigma²\)) | \(\theta = [\mu, \sigma²]\) |
在现实世界中,通常你不知道“真实”的参数,但你能够观察到数据。接下来,我们将探讨如何使用数据来估计模型参数。
估计参数值的方法不止一种。主要有两种思想流派:最大似然估计(MLE)和最大后验估计(MAP)。这两种思想流派都假设你的数据是独立同分布(IID)的样本:\(X_1, X_2, \dots X_n\)。
最大似然估计
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part5/mle/
我们用于估计参数的第一个算法被称为最大似然估计(MLE)。MLE 背后的核心思想是选择那些使观察到的数据最可能的参数(\(\theta\))。
我们将要用来估计参数的数据将是 \(n\) 个独立同分布(IID)的样本:\(X_1, X_2, \dots X_n\)。
似然
我们假设我们的数据是同分布的。这意味着它们必须有相同的概率质量函数(如果数据是离散的)或相同的概率密度函数(如果数据是连续的)。为了简化我们关于参数估计的讨论,我们将使用符号 \(f(X=x|\Theta = \theta)\) 来指代这个共享的 PMF 或 PDF。我们的新符号有两个有趣之处。首先,我们现在已经包含了关于 \(\theta\) 的条件,这是我们表示不同值 \(X\) 的似然依赖于我们的参数值的方式。其次,我们将使用相同的符号 \(f\) 来表示离散和连续分布。
似然是什么意思,它与“概率”有何不同?在离散分布的情况下,似然是数据概率质量或联合概率质量的同义词。在连续分布的情况下,似然指的是数据的概率密度。
由于我们假设每个数据点是独立的,因此我们所有数据的似然是每个数据点似然的乘积。从数学上讲,我们的数据给出参数 \(\theta\) 的似然是:$$\begin{align} L(\theta) = \prod_{i=1}^n f(X_i = x_i|\Theta = \theta) \end{align}$$
对于不同的参数值,我们数据的似然将不同。如果我们有正确的参数,我们的数据将比我们有错误的参数时更有可能。因此,我们将似然写成参数(\(\theta\))的函数。
最大化
在最大似然估计(MLE)中,我们的目标是选择参数(\(\theta\))的值,以最大化上一节中的似然函数。我们将使用符号 \(\hat{\theta}\) 来表示参数的最佳选择值。形式上,MLE 假设:$$\begin{align} \hat{\theta} = \underset{\theta}{\operatorname{argmax }} \text{ }L(\theta) \end{align}$$
Argmax 是“最大值之论证”的缩写。函数的 argmax 是函数在该域上最大化的值。这适用于任何维度的域。
argmax 的一个酷特性是,由于对数是一个单调函数,函数的 argmax 与其对数的 argmax 是相同的!这很好,因为对数使数学更简单。如果我们找到似然的对数的 argmax,它将等于似然的 argmax。因此,对于 MLE,我们首先写出对数似然函数(\(LL\)) $$\begin{align} LL(\theta) &= \log L(\theta) \ &= \log \prod_{i=1}^n f(X_i=x_i|\Theta = \theta) \ &= \sum_{i=1}^n \log f(X_i = x_i|\Theta = \theta) \end{align}$$
要使用最大似然估计器,首先写出给定参数的数据的对数似然。然后选择使对数似然函数最大化的参数值。argmax 可以通过多种方式计算。我们在这个课程中涵盖的所有方法都需要计算函数的第一导数。
二项式 MLE 估计
在我们的第一个例子中,我们将使用 MLE 来估计伯努利分布的 \(p\) 参数。我们将基于 \(n\) 个数据点进行估计,我们将这些数据点称为独立同分布(IID)随机变量 \(X_1, X_2, \dots X_n\)。这些随机变量中的每一个都被假定为来自相同的伯努利分布,具有相同的 \(p\),\(X_i \sim \text{Ber}(p)\)。我们想找出那个 \(p\) 是多少。
MLE 的第一步是将伯努利分布的似然写成我们可以最大化的函数。由于伯努利是一个离散分布,似然是概率质量函数。
伯努利 \(X\) 的概率质量函数可以写成 \(f(x) = p^{x}(1-p)^{1-x}\)。哇!这是怎么回事?这是一个方程,它允许我们说 \(X = 1\) 的概率是 \(p\),而 \(X = 0\) 的概率是 \(1- p\)。请你自己证明当 \(X_i=0\) 和 \(X_i=1\) 时,PMF 返回正确的概率。我们这样写 PMF 是因为它可导。
现在我们来进行一些 MLE 估计: $$\begin{align} L(\theta) &= \prod_{i=1}^n p{x_i}(1-p) && \text{首先写出似然函数} \ LL(\theta) &= \sum_{i=1}^n \log p{x_i}(1-p) && \text{然后写出对数似然函数}\ &= \sum_{i=1}^n x_i (\log p) + (1 - x_i) log(1-p) \ &= Y \log p + (n - Y) \log(1-p) && \text{其中 } Y = \sum_{i=1}^n x_i \end{align}$$
天哪!我们得到了对数似然方程。现在我们只需要选择使我们的对数似然最大化的 \(p\) 值。正如你的微积分老师可能教你的那样,找到使一个函数最大化的值的一种方法就是找到该函数的第一导数并将其设为 0。 $$\begin{align} \frac{\delta LL(p)}{\delta p} &= Y \frac{1}{p} + (n - Y) \frac{-1}{1-p} = 0 \ \hat{p} &= \frac{Y}{n} = \frac{\sum_{i=1}^n x_i}{n} \end{align}$$
所有这些工作,结果发现最大似然估计(MLE)仅仅是样本均值...
正态 MLE 估计
实践是关键。接下来,我们将尝试估计正态分布的最佳参数值。我们所能访问的只有来自正态分布的 \(n\) 个样本,我们将其称为独立同分布的随机变量 \(X_1, X_2, \dots X_n\)。我们假设对于所有 \(i\),\(X_i \sim N(\mu = \theta_0, \sigma² = \theta_1)\)。这个例子似乎更复杂,因为正态分布有两个参数需要估计。在这种情况下,\(\theta\) 是一个包含两个值的向量,第一个是均值(\(\mu\))参数。第二个是方差(\(\sigma²\))参数。 $$\begin{align} L(\theta) &= \prod_{i=1}^n f(X_i|\theta) \ &=\prod_{i=1}^n \frac{1}{\sqrt{2\pi\theta_1}} e^{-\frac{(x_i - \theta_0)²}{2\theta_1}} && \text{连续变量的似然是概率密度函数}\ LL(\theta) &= \sum_{i=1}^n \log \frac{1}{\sqrt{2\pi\theta_1}} e^{-\frac{(x_i - \theta_0)²}{2\theta_1}} && \text{我们想要计算对数似然} \ &= \sum_{i=1}^n\left[ - \log(\sqrt{2\pi\theta_1}) - \frac{1}{2\theta_1}(x_i - \theta_0)² \right] \end{align}$$
再次,MLE 的最后一步是选择最大化对数似然函数的 \(\theta\) 的值。在这种情况下,我们可以计算 \(LL\) 函数相对于 \(\theta_0\) 和 \(\theta_1\) 的偏导数,将两个方程都设为等于 0,然后求解 \(\theta\) 的值。这样做会导致最大化似然的 \(\hat{\mu} = \hat{\theta_0}\) 和 \(\hat{\sigma²} = \hat{\theta_1}\) 的值。结果是:\(\hat{\mu} = \frac{1}{n}\sum_{i=1}^n x_i\) 和 \(\hat{\sigma²} = \frac{1}{n}\sum_{i=1}^n (x_i - \hat{\mu})²\)。
线性变换加噪声
最大似然估计(MLE)是一种可以用于任何具有可导似然函数的概率模型的算法。以一个例子来说,让我们估计一个模型中的参数 \(\theta\),其中存在一个随机变量 \(Y\),使得 \(Y = \theta X + Z\),\(Z \sim N(0, \sigma²)\),而 \(X\) 是一个未知的分布。
在你被告知 \(X\) 的值的情况下,\(\theta X\) 是一个数字,而 \(\theta X + Z\) 是高斯分布和一个数字的和。这意味着 \(Y|X \sim N(\theta X, \sigma²)\)。我们的目标是选择一个 \(\theta\) 的值,以最大化独立同分布的概率:\((X_1, Y_1), (X_2, Y_2), \dots (X_n, Y_n)\)。
我们通过首先找到给定 \(\theta\) 的数据的对数似然函数来解决这个问题。然后我们找到最大化对数似然函数的 \(\theta\) 的值。首先,使用正态分布的概率密度函数来表达 \(Y|X,\theta\) 的概率:$$\begin{align} f(Y_i | X_i , \theta) = \frac{1}{\sqrt{2\pi} \sigma} e^{-\frac{(Y_i - \theta X_i)²}{2\sigma²}} \end{align}$$
现在我们已经准备好编写似然函数,然后取其对数得到对数似然函数:$$\begin{align} L(\theta) &= \prod_{i=1}^n f(Y_i, X_i | \theta) && \text{让我们分解这个联合函数}\ &= \prod_{i=1}^n f(Y_i | X_i, \theta)f(X_i ) && f(X_i) \text{ 与 } \theta \text{ 独立}\ &= \prod_{i=1}^n\frac{1}{\sqrt{2\pi} \sigma} e^{-\frac{(Y_i - \theta X_i)²}{2\sigma²}}f(X_i) &&\text{代入 }f(Y_i | X_i) \text{ 的定义} \end{align}$$ $$\begin{align} LL(\theta) &= \log L(\theta) \ &= \log \prod_{i=1}^n \frac{1}{\sqrt{2\pi} \sigma} e^{-\frac{(Y_i - \theta X_i)²}{2\sigma²}} f(X_i) &&\text{代入 }L(\theta)\ &= \sum_{i=1}^n \log \frac{1}{\sqrt{2\pi} \sigma} e^{-\frac{(Y_i - \theta X_i)²}{2\sigma²}} + \sum_{i=1}^n \log f(X_i) &&\text{乘积的对数是各对数之和}\ &=n \log \frac{1}{\sqrt{2\pi}\sigma} - \frac{1}{2\sigma²} \sum_{i=1}^n (Y_i - \theta X_i)² + \sum_{i=1}^n \log f(X_i ) \end{align}$$
移除常数乘数和不含 \(\theta\) 的项。我们剩下的是尝试找到一个 \(\theta\) 的值,使得最大化:$$\begin{align} \hat{\theta} &= \underset{\theta}{\operatorname{argmax}} - \sum_{i=1}^m (Y_i - \theta X_i)²\ &= \underset{\theta}{\operatorname{argmin}} \sum_{i=1}^m (Y_i - \theta X_i)² \end{align}$$
这个结果说明,使数据最可能的 \(\theta\) 值是使 \(Y\) 的预测平方误差最小化的值。我们将在几天后看到,这是线性回归的基础。
最大后验概率
chrispiech.github.io/probabilityForComputerScientists/en/part5/map/
MLE(最大似然估计)很棒,但它并不是估计参数的唯一方法!本节介绍另一种算法,最大后验概率(Maximum A Posteriori,MAP)。MAP 的范式是我们应该选择最有可能的数据对应的参数值。乍一看,这似乎与 MLE 相同,然而请注意,MLE 选择的是使数据最有可能的参数值。形式上,对于独立同分布(IID)的随机变量 \(X_1, \dots, X_n\):$$\begin{align} \theta_{\text{MAP}} =& \underset{\theta}{\operatorname{argmax }} \text{ } f(\Theta = \theta | X_1=x_1, X_2=x_2, \dots X_n=x_n) \end{align}$$在上面的方程中,我们试图计算给定观测随机变量的未观测随机变量的条件概率。当这种情况发生时,想想贝叶斯定理!使用贝叶斯定理的连续版本展开函数 \(f\)。$$\begin{align} \theta_{\text{MAP}} =& \underset{\theta}{\operatorname{argmax }} \text{ } f(\Theta = \theta | X_1=x_1, X_2=x_2, \dots X_n=x_n) \ =& \underset{\theta}{\operatorname{argmax }} \text{ } \frac{f(X_1=x_1, X_2=x_2, \dots, X_n=x_n |\Theta = \theta) f(\Theta = \theta)}{f(X_1=x_1, X_2=x_2, \dots X_n=x_n)} && \text{贝叶斯定理} \end{align}$$请注意,\(f\) 都是概率密度函数或概率质量函数。现在我们将利用两个观察结果。首先,假设数据是 IID 的,因此我们可以分解给定 \(\theta\) 的数据密度。其次,分母相对于 \(\theta\) 是常数。因此,它的值不影响 argmax,我们可以省略这一项。数学上:$$\begin{align} \theta_{\text{MAP}} =& \underset{\theta}{\operatorname{argmax }} \text{ } \frac{f(\Theta = \theta) \cdot \prod_{i=1}^n f(X_i =x_i| \Theta = \theta) }{f(X_1 = x_1, X_2 = x_2, \dots X_n = x_n)} && \text{由于样本是 IID 的}\ =& \underset{\theta}{\operatorname{argmax }} \text{ } f(\Theta = \theta) \cdot\prod_{i=1}^n f(X_i =x_i |\Theta = \theta) && \text{分母相对于 \(\theta\) 是常数} \end{align}$$与之前一样,找到 MAP 函数的对数的 argmax 将更方便,这给出了参数 MAP 估计的最终形式。 $$\begin{align} \theta_{\text{MAP}} =& \underset{\theta}{\operatorname{argmax }} \text{ } \left( \log f(\Theta = \theta) + \sum_{i=1}^n \log(f(X_i =x_i|\Theta = \theta)) \right) \end{align}$$使用贝叶斯术语,MAP 估计是 \(\theta\) 的“后验”分布的众数。如果你将这个方程与 MLE 方程并排放置,你会注意到 MAP 是相同函数的 argmax 加上一个对数先验项。
参数先验
为了准备好 MAP 估计的世界,我们需要复习我们的分布。我们需要为我们的不同参数中的每一个找到一个合理的分布。例如,如果你正在预测泊松分布,\(\lambda\) 的先验分布应该选择哪种合适的随机变量类型?
对于先验分布的一个期望是,得到的后验分布具有相同的函数形式。我们称这些为“共轭”先验。在你多次更新你的信念的情况下,共轭先验使得在数学方程中进行编程变得容易得多。
这里是一个不同参数及其通常用于其先验分布的分布列表:$$\begin{align} &\text{参数 }&& \text{分布}\ &\text{伯努利 } p && \text{Beta}\ &\text{二项式 } p && \text{Beta}\ &\text{泊松 } \lambda && \text{Gamma}\ &\text{指数 } \lambda && \text{Gamma}\ &\text{多项式 } p_i && \text{Dirichlet}\ &\text{正态 } \mu && \text{Normal}\ &\text{正态 } \sigma² && \text{Inverse Gamma} \end{align}$$ 你只需要对新的分布有一个高层次的理解。你不需要了解逆伽马分布。我包括它是为了完整性。
用于表示你对随机变量“先验”信念的分布通常会具有自己的参数。例如,Beta 分布使用两个参数 \((a, b)\) 定义。我们是否必须使用参数估计来评估 \(a\) 和 \(b\)?不。这些参数被称为“超参数”。这是一个我们保留用于在运行参数估计之前固定的模型参数的术语。在你运行 MAP 之前,你将决定 \((a, b)\) 的值。
Dirichlet
Dirichlet 分布以与多项式分布推广伯努利分布相同的方式推广了 Beta 分布。一个服从 Dirichlet 分布的随机变量 \(X\) 被参数化为 \(X \sim \text{Dirichlet}(a_1, a_2, \dots, a_m)\)。该分布的 PDF 为:$$\begin{align} f(X_1 = x_1, X_2 = x_2, \dots, X_m = x_m) = K \prod_{i=1}^m x_i^{a_i - 1} \end{align}$$ 其中 \(K\) 是归一化常数。
你可以直观地理解 Dirichlet 分布的超参数:想象你已经看到了 \(\sum_{i=1}^m a_i - m\) 个虚拟试验。在这些试验中,你有 \((a_i - 1)\) 个值为 \(i\) 的结果。作为一个例子,考虑估计一个六面偏斜骰子(每个面是不同形状)得到不同数字的概率。我们将通过反复掷骰子 \(n\) 次来估计掷出每个面的概率。这将产生 \(n\) 个独立同分布的样本。对于 MAP 模式,我们需要为每个参数 \(p_1 \dots p_6\) 的信念设定一个先验。我们希望表达出我们轻信每次掷骰子的概率是相等的。
在你掷骰子之前,让我们想象你已经掷了六次骰子,并且得到了每种可能值的一个。因此,“先验”分布将是 Dirichlet(\(2, 2, 2, 2, 2, 2\))。在观察到 \(n_1 + n_2 + \dots + n_6\) 个新的试验结果,其中 \(n_i\) 是结果 \(i\) 的次数后,“后验”分布是 Dirichlet(\(2 + n_1, \dots 2 + n_6\))。使用代表每个结果的一个想象观察的先验称为“拉普拉斯平滑”,并且它保证了你的概率不会是 0 或 1。
Gamma
Gamma(\(k, \theta\)) 分布是泊松分布 \(\lambda\) 参数的共轭先验分布(它也是指数分布的共轭分布,但我们将不会深入探讨这一点)。
超参数可以被解释为:你在 \(\theta\) 个想象的时间段内观察到了 \(k\) 个总想象事件。在接下来的 \(t\) 个时间段内观察到 \(n\) 个事件后,后验分布是 Gamma(\(k + n, \theta + t\))。
例如,Gamma(10, 5) 将代表在 5 个时间段内观察到 10 个想象事件。这就像想象一个有某种置信度的 2 的速率。如果我们以那个 Gamma 作为先验,然后在接下来的 2 个时间段内观察到 11 个事件,我们的后验是 Gamma(21,7),这相当于一个更新的速率为 3。
机器学习
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part5/machine_learning/
机器学习是计算机科学的一个子领域,它使计算机能够在没有明确编程的情况下执行任务。机器学习领域包含多个不同的任务,以及多种不同的“学习”算法。在本章中,我们将重点关注分类以及两种经典的分类算法:朴素贝叶斯和逻辑回归。
分类
在分类任务中,你的任务是使用带有特征/标签对 (\(\mathbf{x}\), y) 的训练数据来估计一个函数 \(\hat{y} = g(\mathbf{x})\)。这个函数可以用来进行预测。在分类中,\(y\) 的值取自一个 \textbf{离散} 的数值集合。因此,我们通常选择 \(g(\mathbf{x}) = \underset{y}{\operatorname{argmax }}\text{ }\hat{P}(Y=y|\mathbf{X} = \mathbf{x})\)。
在分类任务中,你将得到 \(N\) 个训练对:\((\mathbf{x}^{(1)},y^{(1)}), (\mathbf{x}^{(2)},y^{(2)}), \dots , (\mathbf{x}^{(N)},y^{(N)})\) 其中 \(\mathbf{x}^{(i)}\) 是第 \(i\) 个训练示例的 \(m\) 个离散特征向量,而 \(y^{(i)}\) 是第 \(i\) 个训练示例的离散标签。
在我们介绍机器学习时,我们将假设训练数据集中的所有值都是二元的。虽然这不是一个必要的假设,但它使得学习核心概念变得容易得多。具体来说,我们假设所有标签都是二元的 \(y^{(i)} \in \{0, 1\} \text{ }\forall i\),并且所有特征都是二元的 \(x^{(i)}_j \in \{0, 1\} \text{ }\forall i, j\)。
Naïve Bayes
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part5/naive_bayes/
Naive Bayes 是一种用于“分类任务”的机器学习算法。它做出了一个实质性的假设(称为朴素贝叶斯假设),即所有特征在给定分类标签的情况下彼此独立。这个假设是错误的,但它允许算法快速且高效,通常很有用。为了实现朴素贝叶斯,你需要学习如何训练你的模型以及如何使用它进行预测,一旦模型训练完成。
训练(又称参数估计)
训练的目标是估计所有 \(0 < i \leq m\) 个特征的概率 \(P(Y)\) 和 \(P(X_i | Y)\)。我们使用符号 \(\hat{p}\) 来明确表示概率是一个估计值。
使用 MLE 估计:$$\begin{align} \hat{p}(X_i = x_i | Y = y) = \frac{ (\text{训练样本中 \(X_i = x_i\) 且 \(Y = y\) 的数量})}{(\text{训练样本中 \(Y = y\) 的数量})} \end{align}$$
使用拉普拉斯 MAP 估计:$$\begin{align} \hat{p}(X_i = x_i | Y = y) = \frac{ (\text{训练样本中 \(X_i = x_i\) 且 \(Y = y\) 的数量}) + 1 }{(\text{训练样本中 \(Y = y\) 的数量}) + 2} \end{align}$$
使用 MLE 估计训练 \(Y\) 的先验概率:$$\begin{align} \hat{p}(Y = y) = \frac{ (\text{训练样本中 \(Y = y\) 的数量})}{(\text{训练样本数量})} \end{align}$$
预测
对于 \(\mathbf{x} = [x_1, x_2, \dots , x_m]\) 的例子,估计 \(y\) 的值如下:$$\begin{align} \hat{y} &= \argmax_{y = {0, 1}} \text{ } \log \hat{p}(Y = y) + \sum_{i=1}^m \log \hat{p}(X_i = x_i | Y = y) \end{align}$$ 注意,对于足够小的数据集,你可能不需要使用 argmax 的对数版本。
理论
在分类的世界里,当我们做出预测时,我们希望选择 \(y\) 的值,使其最大化 \(P(Y=y|\mathbf{X})\)。 $$\begin{align} \hat{y} &= \argmax_{y = {0, 1}} P(Y = y|\mathbf{X} = \mathbf{X}) && \text{我们的目标}\ &= \argmax_{y = {0, 1}} \frac{P(Y=y)P(\mathbf{X} =\mathbf{x}| Y = y)}{P(\mathbf{X} =\mathbf{x})} && \text{根据贝叶斯定理}\ &= \argmax_{y = {0, 1}} P(Y=y)P(\mathbf{X} =\mathbf{x}| Y = y)) && \text{因为 \(P(\mathbf{X} =\mathbf{x})\) 与 \(Y\) 无关} \end{align}$$
使用我们的训练数据,我们可以将 \(\mathbf{X}\) 和 \(Y\) 的联合分布解释为一个巨大的多项式分布,每个 \(\mathbf{X}=\mathbf{x}\) 和 \(Y=y\) 的组合都有一个不同的参数。例如,如果输入向量只有长度为 1。换句话说 \(|\mathbf{x}| = 1\),\(x\) 和 \(y\) 可以取的值数量很少,比如二进制,这是一个完全合理的做法。我们可以使用 MLE 或 MAP 估计器来估计多项式分布,然后在我们的表中进行几次查找来计算 argmax。
当特征数量变得很大时,糟糕的情况就会出现。回想一下,我们的多项式分布需要为向量 \(\mathbf{x}\) 和值 \(y\) 的每个唯一组合估计一个参数。如果存在 \(|\mathbf{x}| = n\) 个二进制特征,那么这种策略将需要 \(\mathcal{O}(2^n)\) 的空间,并且可能有许多参数在没有与相应赋值匹配的训练数据的情况下被估计。
朴素贝叶斯假设
朴素贝叶斯假设是,给定 \(y\),\(\mathbf{x}\) 的每个特征都是相互独立的。朴素贝叶斯假设是错误的,但很有用。这个假设允许我们使用与特征大小成线性关系的空间和数据来做出预测:如果 \(|\mathbf{x}| = n\),则为 \(\mathcal{O}(n)\)。这使我们能够训练和预测具有巨大特征空间的数据,例如具有互联网上每个单词指示符的特征空间。使用这个假设,预测算法可以被简化。 $$\begin{align} \hat{y} &= \argmax\limits_{y = {0, 1}} \text{ }P(Y = y)P(\mathbf{X} = \mathbf{x}| Y = y) && \text{正如我们上次留下的}\ &= \argmax\limits_{y = {0, 1}} \text{ } P(Y= y)\prod_i P(X_i = x_i| Y = y) &&\text{朴素贝叶斯假设}\ &= \argmax\limits_{y = {0, 1}} \text{ } \log P(Y = y) + \sum_i \log P(X_i = x_i| Y = y) && \text{为了数值稳定性}\ \end{align}$$
在最后一步,我们利用了函数的 argmax 等于函数的 log 的 argmax 的性质。这个算法在训练和预测时都既快又稳定。
逻辑回归
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part5/log_regression/
逻辑回归是一种分类算法(我知道,这个名字很糟糕。或许逻辑分类会更好一些),它通过尝试学习一个近似 \(\P(y|x)\) 的函数来工作。它假设 \(\P(y|x)\) 可以近似为应用在输入特征线性组合上的 sigmoid 函数。学习逻辑回归非常重要,因为逻辑回归是人工神经网络的基本构建块。
从数学上讲,对于一个单个训练数据点(\(\mathbf{x}, y\)),逻辑回归假设:$$\begin{align} P(Y=1|\mathbf{X}=\mathbf{x}) &= \sigma(z) \text{ 其中 } z = \theta_0 + \sum_{i=1}^m \theta_i x_i \end{align}$$ 这个假设通常以等价的形式写出:$$\begin{align} P(Y=1|\mathbf{X}=\mathbf{x}) &=\sigma(\mathbf{\theta}^T\mathbf{x}) &&\text{ 其中我们总是将 \(x_0\) 设置为 1}\ P(Y=0|\mathbf{X}=\mathbf{x}) &=1-\sigma(\mathbf{\theta}^T\mathbf{x}) &&\text{ 根据概率的总法则} \end{align}$$ 使用这些方程来表示 \(Y|X\) 的概率,我们可以创建一个算法,该算法选择 \(\theta\) 的值,以最大化所有数据的概率。我首先将陈述对数概率函数和关于 \(\theta\) 的偏导数。然后我们将在(a)展示一个可以选择 \(\theta\) 的最优值的算法,以及(b)展示这些方程是如何推导出来的。
一个重要的事实是:给定参数(\(\theta\))的最佳值,逻辑回归通常可以很好地估计不同类别标签的概率。然而,给定不良的,甚至随机的 \(\theta\) 值,它的工作表现会很差。逻辑回归机器学习算法的“智能”程度取决于 \(\theta\) 的良好值。
符号
在我们开始之前,我想确保我们对于符号的使用是一致的。在逻辑回归中,\(\theta\) 是一个长度为 \(m\) 的参数向量,我们将根据 \(n\) 个训练样本来学习这些参数的值。参数的数量应该等于每个数据点的特征数量。
在逻辑回归中,我们经常使用的一些符号你可能不太熟悉:$$\begin{align} \mathbf{\theta}^T\mathbf{x} &= \sum_{i=1}^m \theta_i x_i = \theta_1 x_1 + \theta_2 x_2 + \dots + \theta_m x_m && \text{点积,也称为加权求和}\ \sigma(z) &= \frac{1}{1+ e^{-z}} && \text{sigmoid 函数} \end{align}$$
对数似然
为了选择逻辑回归参数的值,我们使用最大似然估计(MLE)。因此,我们将有两个步骤:(1)写出对数似然函数;(2)找到最大化对数似然函数的 \(\theta\) 值。
我们预测的标签是二元的,我们的逻辑回归函数的输出应该是标签为 1 的概率。这意味着我们可以(并且应该)将每个标签解释为一个伯努利随机变量:\(Y \sim \text{Bern}(p)\) 其中 \(p = \sigma(\theta^T \textbf{x})\)。
首先,这里有写出一个数据点的概率的超级简洁方法(回想这是伯努利概率质量函数的方程形式):$$\begin{align} P(Y=y | X = \mathbf{x}) = \sigma({\mathbf{\theta}T\mathbf{x}})y \cdot \left[1 - \sigma({\mathbf{\theta}T\mathbf{x}})\right] \end{align}$$
现在我们知道了概率质量函数,我们可以写出所有数据的似然:$$\begin{align} L(\theta) =& \prod_{i=1}^n P(Y=y^{(i)} | X = \mathbf{x}^{(i)}) && \text{独立训练标签的似然}\ =& \prod_{i=1}^n \sigma({\mathbf{\theta}T\mathbf{x}{(i)}}){y{(i)}} \cdot \left[1 - \sigma({\mathbf{\theta}T\mathbf{x}{(i)}})\right]{(1-y)} && \text{代入伯努利的似然} \end{align}$$ 如果你取这个函数的对数,你得到逻辑回归报告的对数似然。对数似然方程是:$$\begin{align} LL(\theta) = \sum_{i=1}^n y^{(i)} \log \sigma(\mathbf{\theta}T\mathbf{x}) + (1-y^{(i)}) \log [1 - \sigma(\mathbf{\theta}T\mathbf{x})] \end{align}$$
回想一下,在最大似然估计(MLE)中,唯一剩下的步骤就是选择参数(\(\theta\))以最大化对数似然。
对数似然的梯度
现在我们有了对数似然函数,我们只需要选择最大化它的\(\theta\)值。我们可以通过使用优化算法找到\(\theta\)的最佳值。然而,为了使用优化算法,我们首先需要知道对数似然相对于每个参数的偏导数。首先,我将给你偏导数(这样你可以看到它是如何被使用的)。然后,我将向你展示如何推导它:$$\begin{align} \frac{\partial LL(\theta)}{\partial \theta_j} = \sum_{i=1}^n \left[ y^{(i)} - \sigma(\mathbf{\theta}T\mathbf{x}) \right] x_j^{(i)} \end{align}$$
梯度下降优化
我们的目标是选择参数(\(\theta\))以最大化似然,并且我们知道对数似然相对于每个参数的偏导数。我们已经准备好使用我们的优化算法了。
在逻辑回归的情况下,我们不能从数学上求解\(\theta\)。相反,我们使用计算机来选择\(\theta\)。为此,我们采用一个称为梯度下降(优化理论中的经典算法)的算法。梯度下降背后的思想是,如果你持续地向下走小步(在负梯度的方向上),你最终会到达局部最小值。在我们的情况下,我们想要最大化我们的似然。正如你所想象的,最小化我们似然的负值将等同于最大化我们的似然。
导致每个小步骤的参数更新可以计算如下:$$\begin{align} \theta_j^{\text{ new}} &= \theta_j^{\text{ old}} + \eta \cdot \frac{\partial LL(\theta^{\text{ old}})}{\partial \theta_j^{\text{ old}}} \ &= \theta_j^{\text{ old}} + \eta \cdot \sum_{i=1}^n \left[ y^{(i)} - \sigma(\mathbf{\theta}T\mathbf{x}) \right] x_j^{(i)} \end{align}$$其中\(\eta\)是我们采取的步长的大小。如果你继续使用上述方程更新\(\theta\),你将收敛到\(\theta\)的最佳值。你现在有一个智能模型。以下是逻辑回归的梯度上升算法的伪代码:

小贴士:别忘了,为了学习\(\theta_0\)的值,你可以简单地定义\(\textbf{x}_0\)始终为 1。
导数
在本节中,我们提供了对数似然梯度的数学推导。这些推导值得了解,因为这些思想在人工神经网络中得到了广泛的应用。
我们的目标是计算对数似然相对于每个 theta 的导数。首先,这是 sigmoid 函数相对于其输入的导数的定义:$$\begin{align} \frac{\partial}{\partial z} \sigma(z) = \sigma(z)[1 - \sigma(z)] && \text{要得到相对于\(\theta\)的导数,使用链式法则} \end{align}$$花点时间来欣赏 sigmoid 函数导数的美丽。sigmoid 具有如此简单的导数的原因在于 sigmoid 分母中的自然指数。
由于似然函数是对所有数据的求和,而在微积分中,和的导数是各个导数的和,因此我们可以专注于计算一个示例的导数。theta 的梯度仅仅是每个训练数据点的这个项的总和。
首先,我将向您展示如何通过困难的方式计算导数。然后,我们将探讨一种更简单的方法。对于一个数据点 \((\mathbf{x}, y)\) 的梯度导数:$$\begin{align} \frac{\partial LL(\theta)}{\partial \theta_j} &= \frac{\partial }{\partial \theta_j} y \log \sigma(\mathbf{\theta}^T\mathbf{x}) + \frac{\partial }{\partial \theta_j} (1-y) \log [1 - \sigma(\mathbf{\theta}^T\mathbf{x}] && \text{项之和的导数}\ &=\left[\frac{y}{\sigma(\theta^T\mathbf{x})} - \frac{1-y}{1-\sigma(\theta^T\mathbf{x})} \right] \frac{\partial}{\partial \theta_j} \sigma(\theta^T \mathbf{x}) &&\text{log \(f(x)\) 的导数}\ &=\left[\frac{y}{\sigma(\theta^T\mathbf{x})} - \frac{1-y}{1-\sigma(\theta^T\mathbf{x})} \right] \sigma(\theta^T \mathbf{x}) [1 - \sigma(\theta^T \mathbf{x})]\mathbf{x}_j && \text{链式法则 + sigma 的导数}\ &=\left[ \frac{y - \sigma(\thetaT\mathbf{x})}{\sigma(\thetaT \mathbf{x}) [1 - \sigma(\theta^T \mathbf{x})]} \right] \sigma(\theta^T \mathbf{x}) [1 - \sigma(\theta^T \mathbf{x})]\mathbf{x}_j && \text{代数操作}\ &= \left[y - \sigma(\theta^T\mathbf{x}) \right] \mathbf{x}_j && \text{消去项} \end{align}$$
《微分不再流泪》
那是艰难的方法。逻辑回归是人工神经网络的基石。如果我们想要扩展规模,我们就必须习惯于一种更简单的方式来计算导数。为此,我们必须欢迎我们老朋友链式法则的回归。根据链式法则:$$\begin{align} \frac{\partial LL(\theta)}{\partial \theta_j} &= \frac{\partial LL(\theta)}{\partial p} \cdot \frac{\partial p}{\partial \theta_j} && \text{其中 } p = \sigma(\theta^T\textbf{x})\ &= \frac{\partial LL(\theta)}{\partial p} \cdot \frac{\partial p}{\partial z} \cdot \frac{\partial z}{\partial \theta_j} && \text{其中 } z = \theta^T\textbf{x} \end{align}$$ 链式法则是微积分的分解机制。它允许我们通过将其分解成更小的部分来计算复杂的偏导数(\(\frac{\partial LL(\theta)}{\partial \theta_j}\))。$$\begin{align} LL(\theta) &= y \log p + (1-y) \log (1 - p) && \text{其中 } p = \sigma(\theta^T\textbf{x}) \ \frac{\partial LL(\theta)}{\partial p} &= \frac{y}{p} - \frac{1-y}{1-p} && \text{通过求导得到} \end{align}$$ $$\begin{align} p &= \sigma(z) && \text{其中 }z = \theta^T\textbf{x}\ \frac{\partial p}{\partial z} &= \sigma(z)[1- \sigma(z)] && \text{通过求导得到 sigmoid 函数} \end{align}$$ $$\begin{align} z &= \theta^T\textbf{x} && \text{如前所述}\ \frac{\partial z}{\partial \theta_j} &= \textbf{x}_j && \text{只有 \(\textbf{x}_j\) 与 \(\theta_j\) 交互} \end{align}$$ 这些导数都更容易计算。现在我们只需将它们相乘。$$\begin{align} \frac{\partial LL(\theta)}{\partial \theta_j} &= \frac{\partial LL(\theta)}{\partial p} \cdot \frac{\partial p}{\partial z} \cdot \frac{\partial z}{\partial \theta_j} \ &= \Big[\frac{y}{p} - \frac{1-y}{1-p}\Big] \cdot \sigma(z)[1- \sigma(z)] \cdot \textbf{x}_j && \text{通过代入每个项} \ &= \Big[\frac{y}{p} - \frac{1-y}{1-p}\Big] \cdot p[1- p] \cdot \textbf{x}_j && \text{因为 }p = \sigma(z)\ &= [y(1-p) - p(1-y)] \cdot \textbf{x}_j && \text{相乘得到} \ &= [y - p]\textbf{x}_j && \text{展开} \ &= [y - \sigma(\theta^T\textbf{x})]\textbf{x}_j && \text{因为 } p = \sigma(\theta^T\textbf{x}) \end{align}$$
扩散
原文:
chrispiech.github.io/probabilityForComputerScientists/en/part5/diffusion/
扩散任务
目标: 创建一个可以从“树照片分布”生成树木图片的模型
数据: 许多树木图片:

整体思路
通过迭代地向像素添加高斯噪声来补充你的数据集,然后训练一个深度学习模型来去除噪声。

合理的步骤数量是每次添加 10% 的噪声,这样在 10 个时间步之后,每个像素都是完全噪声。
关键任务是训练一个深度神经网络来预测像素的“去噪”值:

损失:预测像素和真实颜色之间的均方误差。将你的神经网络的参数设置为最小化损失。然后你就有了一个可以一次去除 10% 噪声的模型。从随机噪声开始,然后运行它通过你的去噪神经网络 10 次。
扩散模型的原理
扩散模型的魔力在于高斯噪声过程。让我们分解一下:
1. 添加噪声:正向过程
在每个步骤 $ t $ 中,我们对像素值添加高斯噪声:$$ x_{t+1} = x_t + n_t \quad \text{where } n_t \sim N(0, \sigma²). $$ 这逐渐将原始图像转换为纯噪声。
2. 去除噪声:逆向过程
要逆转这个过程,我们需要条件分布 $ x_{t-1} | x_t $。这里令人惊讶的部分是:
关键事实 #1: $ x_{t-1} | x_t $ 是具有已知方差的 Gaussian
如果噪声方差 $ \sigma² $ 足够小,$ x_{t-1} | x_t $ 的分布可以近似为:$$ x_{t-1} | x_t \sim N(\mu_{t-1}(x_t), \sigma²), $$ 其中:
-
$ \mu_{t-1}(x_t) $:Gaussian 的均值,它依赖于 $ x_t $。
-
$ \sigma² $:噪声的已知方差。
这是一个好消息!这意味着我们只需要估计均值 $ \mu_{t-1}(x_t) $ 来完全描述 $ x_{t-1} | x_t $。
3. 训练神经网络
关键事实 #2: 你只需要标准回归!
为了训练神经网络,我们需要它预测高斯均值 $ \mu_{t-1}(x_t) $。我们如何衡量预测的质量?
预测的高斯 $ q_\theta(x_{t-1} | x_t) $(来自神经网络)和真实的高斯 $ p(x_{t-1} | x_t) $ 之间的差异可以通过 KL 散度 来衡量。幸运的是,在这种情况下:$$ \text{最小化 KL 散度 } \Leftrightarrow \text{最小化均方误差 (MSE)}. $$ 这只因为分布是 Gaussian。因此,我们可以简单地训练神经网络来最小化其预测的像素值($ \mu_{t-1}(x_t) $)和真实像素值之间的 MSE。
一旦训练完成,神经网络可以迭代地去除图像噪声,从随机噪声开始,直到生成清晰、逼真的图像。
4. 完整的扩散算法
这里是扩散模型的完整工作流程:
-
正向过程: 向图像添加高斯噪声,将其转换为纯噪声。
-
反向过程: 训练一个神经网络来预测均值 $ \mu_{t-1}(x_t) $ 并逐步去除噪声。
-
图像生成: 从随机噪声开始,反向运行神经网络 $ T $ 次以生成逼真的图像。
这种优雅的方法结合了简单的高斯噪声和深度学习的力量,以生成惊人的结果!
关键思想 #1 的证明草图
主张: 当噪声方差 $ \sigma² $ 足够小时,$ x_{t-1} | x_t $ 大约是高斯分布。
我们从贝叶斯定理开始,表示条件概率:$$ \p(x_{t-1} | x_t) = \frac{ \p(x_t | x_{t-1}) \p(x_{t-1}) }{ \p(x_t) } $$ 我们将考虑这个表达式的对数。这是因为高斯的对数是二次函数,这将使我们的数学更容易。我们可以写出:$$ \log \p(x_{t-1} | x_t) = \log \p(x_t | x_{t-1}) + \log \p(x_{t-1}) - \log \p(x_t) $$ 让我们分解这个表达式中的各项。
正向过程似然:
在正向过程中,给定 $ x_{t-1} $ 的 $ x_t $ 是高斯分布:$$ \p(x_t | x_{t-1}) = \frac{1}{\sqrt{2 \pi \sigma²}} \exp\left(-\frac{(x_t - x_{t-1})²}{2 \sigma²}\right). $$ 取对数,我们得到:$$ \log \p(x_t | x_{t-1}) = -\frac{(x_t - x_{t-1})²}{2 \sigma²} + \text{constant} $$ 关于 $ x_{t-1} $ 的先验:
先验 $ p(x_{t-1}) $ 是 $ x_{t-1} $ 在前一步的概率。这个很难知道!一棵树的像素的先验分布是什么?然而,我们采用一个非常巧妙的技巧。其对数密度可以在 $ x_t $ 附近对 $ x_{t-1} $ 进行泰勒展开,假设 $ x_{t-1} $ 接近 $ x_t \(:\)$ \log \p(x_{t-1}) \approx \log \p(x_t) + \Big[ \frac{\partial}{\partial x} \log \p(x_t) \Big] (x_{t-1} - x_t) $$ 完成平方:
上面的表达式中涉及两个涉及 $ x_{t-1} $ 和 $ x_t $ 差别的项。作为一个有用的步骤,我们将对这些项进行平方完成。
对这些项的总和进行平方完成:$$ -\frac{(x_t - x_{t-1})²}{2 \sigma²} + \Big[ \frac{\partial}{\partial x} \log \p(x_t) \Big] (x_{t-1} - x_t) $$ 首先,重写 $ (x_t - x_{t-1})² \(:\)$ (x_t - x_{t-1})² = (x_{t-1} - x_t)² $$ 这使我们能够将总和重写为:$$ -\frac{1}{2 \sigma²} (x_{t-1} - x_t)² + \Big[ \frac{\partial}{\partial x} \log \p(x_t) \Big] (x_{t-1} - x_t) $$
提取 $ -\frac{1}{2 \sigma²} $ 以使二次项更加明确:$$ -\frac{1}{2 \sigma²} \left[ (x_{t-1} - x_t)² - 2 \sigma² \Big[ \frac{\partial}{\partial x} \log \p(x_t) \Big] (x_{t-1} - x_t) \right] $$
括号内的表达式是 $ (x_{t-1} - x_t) $ 的二次表达式。让我们对以下表达式完成平方:$$ (x_{t-1} - x_t)² - 2 \sigma² \Big[ \frac{\partial}{\partial x} \log \p(x_t) \Big] (x_{t-1} - x_t) $$
这使我们能够将二次表达式重写为:$$ \left[ (x_{t-1} - x_t) - \sigma² \Big[ \frac{\partial}{\partial x} \log \p(x_t) \Big] \right]² - \left( \sigma² \Big[ \frac{\partial}{\partial x} \log \p(x_t) \Big] \right)² $$
将其代入。让 $ K $ 代表常数:$$\begin{align} \log \p(x_{t-1} | x_t) &= \log \p(x_t | x_{t-1}) + \log \p(x_{t-1}) - \log \p(x_t) \ &= -\frac{(x_t - x_{t-1})²}{2 \sigma²} + \Big(\log \p(x_t) + \Big[ \frac{\partial}{\partial x} \log \p(x_t) \Big] (x_{t-1} - x_t)\Big) - \log \p(x_t) + K \ &= -\frac{(x_t - x_{t-1})²}{2 \sigma²} + \Big[ \frac{\partial}{\partial x} \log \p(x_t) \Big] (x_{t-1} - x_t)+ K \ &= -\frac{1}{2 \sigma²} \left[ \left( x_{t-1} - x_t - \sigma² \Big[ \frac{\partial}{\partial x} \log \p(x_t) \Big] \right)² \right] + K \end{align}$$
最终结果:回想一下高斯概率密度函数的对数看起来是这样的:
设 $ X \sim N(\mu, \sigma²) \(。\) X $ 的概率密度函数的对数是什么?$$\log \P(X=x) = -\frac{1}{2 \sigma²} (x - \mu)² + K$$从上面的公式中,我们可以看到 $ x_{t-1} | x_t $ 是高斯分布。我们如何知道这一点?分布与正态分布的对数密度相同,除了加性因子。 $$ x_{t-1} | x_t \sim N\left( \mu_{t-1}, \sigma² \right), $$ 其中:$$ \mu_{t-1} = x_t + \sigma²\Big[ \frac{\partial}{\partial x} \log \p(x_t) \Big] $$ 方差保持为 $ \sigma² $,这是从正向过程中固定的。
维度诅咒
在机器学习中,就像计算机科学的许多领域一样,经常涉及高维点,而高维空间具有一些令人惊讶的概率性质。
一个随机值 \(X_i\) 是一个均匀分布(Uni)的(0, 1)。
一个维度为 \(d\) 的随机点是一个 \(d\) 个随机值的列表:\([X_1 \dots X_d]\)。

一个随机值 \(X_i\) 如果 \(X_i\) 小于 0.01 或者 \(X_i\) 大于 0.99,则认为它接近边缘。随机值接近边缘的概率是多少?
设 \(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\)
一个随机点 \([X_1, \dots X_{100}]\) 的维度为 \(100\),如果其任何值接近边缘,则认为该点接近边缘。100 维点接近边缘的概率是多少?
同样,它是:\(1 - (1 - P(E))^{100} = 1 - 0.98^{100} \approx 0.867\)高维点的许多其他现象:例如,点之间的欧几里得距离开始收敛。
MLE 正态分布演示
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/mle_demo/
让我们手动执行最大似然估计。你的任务是选择参数值,使得数据看起来尽可能可能。这里有 20 个数据点,我们假设它们来自正态分布
数据 = [6.3 , 5.5 , 5.4, 7.1, 4.6, 6.7, 5.3 , 4.8, 5.6, 3.4, 5.4, 3.4, 4.8, 7.9, 4.6, 7.0, 2.9, 6.4, 6.0 , 4.3]
选择你的参数估计值
参数 \(\mu\): 参数 \(\sigma\):
给定你的参数的数据似然
似然:对数似然:最佳观测:
你的高斯分布
帕累托分布的最大似然估计
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/mle_pareto/
你正在创建不同大小的圆形艺术作品,这些圆形遵循帕累托分布:
\(X \sim \text{Pareto}(\alpha)\)
帕累托分布由单个参数 \(\alpha\) 定义,并具有概率密度函数
你希望你的艺术作品中的 \(\alpha\) 与你当地海滩的沙子中的 \(\alpha\) 相匹配。你去了海滩,收集了 100 粒沙子并测量了它们的大小。将测量的半径称为 \(x_1 , \dots, x_{100}\):
observations = [1.677, 3.812, 1.463, 2.641, 1.256, 1.678, 1.157,
1.146, 1.323, 1.029, 1.238, 1.018, 1.171, 1.123, 1.074, 1.652,
1.873, 1.314, 1.309, 3.325, 1.045, 2.271, 1.305, 1.277, 1.114,
1.391, 3.728, 1.405, 1.054, 2.789, 1.019, 1.218, 1.033, 1.362,
1.058, 2.037, 1.171, 1.457, 1.518, 1.117, 1.153, 2.257, 1.022,
1.839, 1.706, 1.139, 1.501, 1.238, 2.53 , 1.414, 1.064, 1.097,
1.261, 1.784, 1.196, 1.169, 2.101, 1.132, 1.193, 1.239, 1.518,
2.764, 1.053, 1.267, 1.015, 1.789, 1.099, 1.25 , 1.253, 1.418,
1.494, 1.015, 1.459, 2.175, 2.044, 1.551, 4.095, 1.396, 1.262,
1.351, 1.121, 1.196, 1.391, 1.305, 1.141, 1.157, 1.155, 1.103,
1.048, 1.918, 1.889, 1.068, 1.811, 1.198, 1.361, 1.261, 4.093,
2.925, 1.133, 1.573]
根据你收集的数据,推导出 \(\alpha\) 的最大似然估计公式。
编写对数似然函数
在最大似然估计(MLE)中,第一个主要目标是为我们数据构造一个对数似然表达式。为此,我们首先写出如果我们被告知 \(\alpha\) 的值,我们的数据集看起来有多可能:\begin{aligned} L(\alpha) = f(x_1\dots x_n) = \prod_{i=1}n\frac{\alpha}{x_i{\alpha+1}} \end{aligned}
如果我们尝试优化对数似然,优化将变得容易得多:\begin{aligned} LL(\alpha) &= \log L(\alpha) = \log \prod_{i=1}n\frac{\alpha}{x_i{\alpha+1}} \ &= \sum_{i=1}^n \log \frac{\alpha}{x_i^{\alpha+1}} \ &= \sum_{i=1}^n \log \alpha - (\alpha +1)\log x_i \ &= n \log \alpha - (\alpha +1) \sum_{i=1}^n\log x_i \ \end{aligned}
选择 \(\alpha\)
我们将选择 \(\alpha\) 以最大化对数似然。为此,我们需要 \(\alpha\) 对 LL 的导数 \begin{aligned} \frac{\partial LL(\alpha)}{\partial \alpha} &= \frac{\partial LL(\alpha)}{\partial \alpha} \Big( n \log \alpha - (\alpha +1) \sum_{i=1}^n\log x_i \Big) \ &= \frac{n}{\alpha} - \sum_{i=1}^n\log x_i \end{aligned}
一种优化方法是求导数并将其设为零:\begin{aligned} 0=\frac{n}{\alpha} - \sum_{i=1}^n\log x_i\ \sum_{i=1}^n\log x_i = \frac{n}{\alpha} \ \alpha = \frac{n}{ \sum\limits_{i=1}^n\log x_i} \end{aligned}
到目前为止,我们有一个可以用来计算 \(\alpha\) 的公式!哇哦
将其放入代码
import math
def estimate_alpha(observations):
# This code computes the MLE estimate of alpha
log_sum = 0
for x_i in observations:
log_sum += math.log(x_i)
n = len(observations)
return n / log_sum
def main():
observations = [1.677, 3.812, 1.463, 2.641, 1.256, 1.678, 1.157, 1.146,
1.323, 1.029, 1.238, 1.018, 1.171, 1.123, 1.074, 1.652, 1.873, 1.314,
1.309, 3.325, 1.045, 2.271, 1.305, 1.277, 1.114, 1.391, 3.728, 1.405,
1.054, 2.789, 1.019, 1.218, 1.033, 1.362, 1.058, 2.037, 1.171, 1.457,
1.518, 1.117, 1.153, 2.257, 1.022, 1.839, 1.706, 1.139, 1.501, 1.238,
2.53 , 1.414, 1.064, 1.097, 1.261, 1.784, 1.196, 1.169, 2.101, 1.132,
1.193, 1.239, 1.518, 2.764, 1.053, 1.267, 1.015, 1.789, 1.099, 1.25 ,
1.253, 1.418, 1.494, 1.015, 1.459, 2.175, 2.044, 1.551, 4.095, 1.396,
1.262, 1.351, 1.121, 1.196, 1.391, 1.305, 1.141, 1.157, 1.155, 1.103,
1.048, 1.918, 1.889, 1.068, 1.811, 1.198, 1.361, 1.261, 4.093, 2.925,
1.133, 1.573]
alpha = estimate_alpha(observations)
print(alpha)
if __name__ == '__main__':
main()
高斯混合
原文:
chrispiech.github.io/probabilityForComputerScientists/en/examples/mixture_models/
数据 = [6.47, 5.82, 8.7, 4.76, 7.62, 6.95, 7.44, 6.73, 3.38, 5.89, 7.81, 6.93, 7.23, 6.25, 5.31, 7.71, 7.42, 5.81, 4.03, 7.09, 7.1, 7.62, 7.74, 6.19, 7.3, 7.37, 6.99, 2.97, 3.3, 7.08, 6.23, 3.67, 3.05, 6.67, 6.5, 6.08, 3.7, 6.76, 6.56, 3.61, 7.25, 7.34, 6.27, 6.54, 5.83, 6.44, 5.34, 7.7, 4.19, 7.34]参数 \(t\): 参数 \(\mu_a\): 参数 \(\sigma_a\): 参数 \(\mu_b\): 参数 \(\sigma_b\):

浙公网安备 33010602011771号