斯坦福-CS109-计算机科学家的概率论-二-

斯坦福 CS109:计算机科学家的概率论(二)

原文:chrispiech.github.io/probabilityForComputerScientists/en/index.html

译者:飞龙

协议:CC BY-NC-SA 4.0

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 中我们不明确考虑的随机变量)。

\[\begin{align*}X \sim \text{HypGeo}(n=12, N = 1000, m = 60)\end{align*} \]

\[\begin{align*} P(X \geq 1) &= 1 - P(X = 0) \\ &= 1 - \frac{ {60 \choose 0}{940 \choose 12} }{1000 \choose 12} \\ &\approx 0.5261 \end{align*} \]

然而,法官 Breyer 通过引用二项式分布来论证。这不是二项式分布的完美应用,因为二项式分布假设每个实验成功的可能性(\(p\))是相等的。由于陪审员是随机选择的,每次选择后得到少数族裔陪审员的可能性都会略有变化(并取决于选择的结果)。然而,正如我们将看到的,由于概率变化不大,二项式分布并不太偏离。

\[\begin{align*} X \sim \text{Binomial}(n=12, p = 60/1000) \end{align*} \]

\[\begin{align*} P(X \geq 1) &= 1 - P(X = 0) \\ &= 1 - {60 \choose 0}(1- 0.06)^{12} \\ &\approx 0.5241 \end{align*} \]


致谢:问题由 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)\) 是多少?请提供两位小数的数值答案。

\[P(0.9 < X < 1.0) = \Phi\left(\frac{1.0 - 0.7}{0.2}\right) - \Phi\left(\frac{0.9 - 0.7}{0.2}\right) = \Phi(1.5) - \Phi(1.0) = 0.9332 - 0.8413 = 0.09 \]

在对数正态假设下,\(H_2\)\(P(0.9 < X < 1.0)\) 是多少?

\[F_X(1.0) - F_X(0.9) = \Phi\Big(\frac{\text{logit}(1.0) - 1.0}{0.9}\Big) - \Phi\Big(\frac{\text{logit}(0.9) - 1.0}{0.9}\Big)$$ 我们可以通过数值方法求解:$$\Phi\Big(\frac{\text{logit}(1.0) - 1.0}{0.9}\Big) - \Phi\Big(\frac{\text{logit}(0.9) - 1.0}{0.9}\Big) = 1 - \Phi(1.33) \approx 0.91 \]

在正常假设下,\(H_1\)\(X\) 可以取的最大值是多少?

\[\infty \]

在观察任何考试分数之前,你假设(a)两个假设中的一个正确,并且(b)最初,每个假设被正确选择的概率相等,\(P(H_1)=P(H_2)=\frac{1}{2}\)。然后你观察到一个单独的考试分数,\(X = 0.9\)。你对对数正态假设正确的更新概率是多少?

\[\begin{align*} P(H_2|X = 0.9) &= \frac{f(X = 0.9|H_2)P(H_2)}{f(X = 0.9|H_2)P(H_2) + f(X = 0.9|H_1)P(H_1)}\\ &= \frac{f(X = 0.9|H_2)}{f(X = 0.9|H_2) + f(X = 0.9|H_1)}\\ &= \frac{\frac{1}{\sigma(\sqrt{2\pi})0.9*(1 - 0.9)}e^{-\frac{(\text{logit}(0.9) - 1.0)²}{2*0.9²}}}{\frac{1}{\sigma(\sqrt{2\pi})0.9*(1 - 0.9)}e^{-\frac{(\text{logit}(0.9) - 1.0)²}{2*0.9²}} + \frac{1}{0.2\sqrt{2\pi}}e^{-\frac{(0.9 - 0.7)²}{2*0.2²}}} \end{align*} \]

维度诅咒

原文: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)。

当然,这种离散化只是对联合概率分布的近似。为了得到更好的近似,我们可以创建更精细的离散化。在极限情况下,我们可以使我们的桶无限小,与每个桶关联的值成为概率的二阶导数。

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

图片 4

就像在单随机变量情况下一样,我们现在用密度而不是概率来表示我们对连续随机变量的信念。回想一下,密度表示相对信念。如果\(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,标准差相等)进行卷积来实现。

图片 1图片 2图片 3

为了使用高斯模糊,你需要能够计算该二维高斯在像素空间中的概率质量。每个像素被赋予一个等于 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\)为离散随机变量。

定义: 带有离散随机变量的条件定义。

\[\begin{align*} \P(X=x|Y=y)=\frac{P(X=x,Y=y)}{P(Y=y)} \end{align*} \]

定义: 带有离散随机变量的贝叶斯定理。

\[\begin{align*} \P(X=x|Y=y)=\frac{P(Y=y|X=x)P(X=x)}{P(Y=y)} \end{align*} \]

在存在多个随机变量的情况下,使用缩写变得越来越有用!上述定义与以下符号相同,其中小写符号如\(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\) 完全不相连的节点。在设计贝叶斯网络时,你不必直接考虑这个假设。如果节点之间的箭头遵循因果路径,这个假设自然就是好的。

设计贝叶斯网络

设计贝叶斯网络有几个步骤。

  1. 选择你的随机变量,并将它们作为节点。

  2. 添加边,通常基于你对哪些节点直接导致其他节点的假设。

  3. 为所有节点定义 \(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\) 抽取一个值。

让我们通过一个例子来了解如何在贝叶斯网络部分中的简单疾病模型中抽样一个“粒子”:

  1. \(P(\text{Uni} = 1)\) 中抽样:伯努利分布\((0.8)\)。Uni 的抽样值为 1。

  2. \(P(\text{Influenza} = 1 | \text{Uni} = 1)\) 中抽样:伯努利分布\((0.2)\)。流感的抽样值为 0。

  3. \(P(\text{Fever} = 1 | \text{Influenza} = 0)\) 中抽样:伯努利分布\((0.05)\)。发烧的抽样值为 0。

  4. \(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 网站对家用用户来说很棒,但类似的概率模型正在全球成千上万的医院中使用。当你阅读这段内容时,通用推理正在被用于改善真实人类的医疗保健(有时甚至挽救生命)。这对计算机科学家来说是一些值得学习的概率。如果我们没有专家怎么办?我们能否从数据中学习这些概率?跳转到第五部分来回答这个问题。

维度灾难

原文:chrispiech.github.io/probabilityForComputerScientists/en/examples/curse_of_dimensionality/#part3_examples/


在机器学习中,就像计算机科学的许多领域一样,经常涉及高维点,高维空间具有一些令人惊讶的概率特性。

一个随机 \(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)\) 是什么?

通过一种称为边缘化的过程,可以计算联合分布中随机变量子集的分配的概率:将所有该分配为真的单元格的概率相加。

\[\begin{align} \p(D=1) &= \sum_{j \in \{0, 1\}} \sum_{k \in \{0, 1\}} \p(D= 1, G= j, T = k)\\ &= 0.01 + 0.01 + 0.02 + 0.08 = 0.12 \end{align} $$ $$ \begin{align} \p(D=0) &= \sum_{j \in \{0, 1\}} \sum_{k \in \{0, 1\}} \p(D= 0, G= j, T = k)\\ &= 0.21 + 0.32 + 0.07 + 0.28 = 0.88 \end{align} \]

注意到 \(\p(D=0) + \p(D=1) = 1\)。这意味着人口统计变量是互斥的。

公平性定义 #1:奇偶性

如果算法做出正预测(\(G\) = 1)的概率在条件化人口统计变量时保持不变,则算法满足“奇偶性”。

这个算法是否满足“奇偶性”?

\[\begin{align} P(G=1|D=1) &= \frac{P(G = 1, D = 1)}{P(D=1)} && \text{条件概率}\\ &= \frac{P(G = 1, D = 1, T= 0) + P(G=1, D = 1, T=1)}{P(D=1)} && \text{概率或}\\ &= \frac{0.01 + 0.08}{0.12} = 0.75 && \text{从联合概率得出} \end{align} $$ $$ \begin{align} P(G=1|D=0) &= \frac{P(G = 1, D = 0)}{P(D=0)} && \text{条件概率}\\ &= \frac{P(G = 1, D = 0, T= 0) + P(G=1, D = 0, T=1)}{P(D=0)} && \text{概率或}\\ &= \frac{0.32 + 0.28}{0.88} \approx 0.68 && \text{从联合概率得出} \end{align} \]

不满足。由于 \(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

前进之路?

Wadsworth 等人:通过对抗学习实现公平性

联邦党人文集作者身份

原文: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 =

假设

这个问题有很多假设,值得强调。事实上,每次我们根据稀少的信息进行概括(尤其是关于人口统计数据)时,我们都应该谨慎行事。以下是我能想到的假设:

  1. 这份数据仅适用于美国人的名字。在其他国家,根据名字给出的年龄概率可能会有很大差异。

  2. 美国人口普查并不完美。它没有捕捉到所有居住在美国的人,而且有一些人口统计数据没有得到充分代表。这也会影响我们的结果。

揭示年龄的名字

一些名字在特定年份特别流行,这些名字提供了关于出生年份的大量信息。让我们看看一些具有最高最大概率的名字。

中等流行度(>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 DouglasMiley 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 的概率是多少?

\[\begin{align*} P(&0.008 < X < 0.012) \\ &= P(X < 0.012) - P(X < 0.008) \\ &= F_X(0.012) - F_X(0.008) \\ &= 0.966 - 0.013 \\ &= 0.953 \end{align*} \]

从语义上讲,这导致了一个断言:在观察了 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} $$ *** * *

[1] 通过超声波和末次月经预测早期妊娠的分娩日期

致谢:这个问题最初是由克里斯·格雷格提出给我的。**********

贝叶斯碳定年

原文: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 取 TrueFalse 值的事件:$$\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 个病毒),那么从这个人随机抽取的样本是病毒的概率是多少?

\[\frac{9}{1,000,000} \]

我们对一个患者进行 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\) 的值如何,我们都会得到相同的形状,只是进行了缩放:

这是一个多么美丽的图像。它告诉我们相对似然与控制我们抛硬币的概率之间的关系。以下是该图表的一些观察结果:

  1. 即使只有 10 次抛硬币,我们也非常有信心,真实概率大于 0.5。

  2. \(X=0.9\) 发生的概率几乎是 \(X=0.6\) 的 10 倍。

  3. \(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)的加和。

  1. 添加两个随机变量

  2. 独立泊松分布之和

  3. 独立二项分布之和

  4. 独立正态分布之和

  5. 独立均匀分布之和

添加两个随机变量

推导两个随机变量和的似然表达式需要有趣的洞察。如果你的随机变量是离散的,那么 \(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)\) 是多少?

\[\begin{align*} P(Z = n) &= P(X + Y = n) \\ &= \sum_{k=-\infty}^{\infty} \p(X = k, Y = n- k) & \text{(卷积)}\\ &= \sum_{k=-\infty}^{\infty} P(X = k) P(Y = n - k) & \text{(独立性)}\\ &= \sum_{k=0}^n P(X = k) P(Y = n - k) &\text{(X 和 Y 的范围)}\\ &= \sum_{k=0}^n e^{-{\lambda_1}} \frac{\lambda_1^k}{k!} e^{-{\lambda_2}} \frac{\lambda_2^{n-k}}{(n-k)!} & \text{(泊松概率质量函数)} \\ &= e^{-(\lambda_1 + \lambda_2)} \sum_{k=0}^n \frac{\lambda_1^k \lambda_2^{n-k}}{k!(n-k)!} \\ &= \frac{ e^{-(\lambda_1 + \lambda_2)}}{n!} \sum_{k=0}^n \frac{n!}{k!(n-k)!} \lambda_1^k \lambda_2^{n-k} \\ &= \frac{ e^{-(\lambda_1 + \lambda_2)}}{n!} (\lambda_1 + \lambda_2)^n & \text{(二项式定理)} \end{align*} \]

注意,二项式定理(我们在这个课程中没有涉及,但常用于展开多项式等场景)表明,对于两个数 \(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]\) 提供了一种直接的方法:

\[\begin{align*} \E[T] &= \sum_l \E[T|L=l] \p(L=l)\\ &= 0.5 \cdot 0.3 + 0.2 \cdot 20.7 + 0.3 \cdot 96.7\\ &= 33.3 \text{ 秒} \end{align*} \]

递归代码的玩具示例

在理论计算机科学中,有很多时候你想分析算法的期望运行时间。为了练习这种技术,让我们尝试解决一个简单的递归函数。设 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\) 作为背景变量。

\[\begin{align*} \E[Y] = &\sum_{i \in \{1,2,3\}} \E[Y|X=i] \P(X=i)\\ =&\E[Y|X=1] \P(X=1) \\& + \E[Y|X=2] \P(X=2) \\&+ \E[Y|X=3] \P(X=3) \end{align*}$$ 我们知道对于 $x \in \{1,2,3\}$,概率 $\P(X=x) = \frac{1}{3}$。我们如何计算像 $\E[Y|X=2]$ 这样的值呢?嗯,那是在 $X=2$ 的世界里你的期望回报。在这种情况下,你将返回 5 + recurse()。这个期望是 $5 + \E[Y]$。将每个情况下的类似结果代入,我们可以继续我们的解决方案:$$\begin{align*} E[Y|X=1] &= 3\\ E[Y|X=2] &= 5 + \E[Y]\\ E[Y|X=3] &= 7 + \E[Y]\\ \end{align*}$$ 现在我们可以将值代入总期望定律:$$\begin{align*} \E[Y] = &\sum_{i \in \{1,2,3\}} \E[Y|X=i] \P(X=i)\\ =&\E[Y|X=1] \P(X=1) \\& + \E[Y|X=2] \P(X=2) \\&+ \E[Y|X=3] \P(X=3) \\ =&3 \cdot 1/3 \\ &+ (5 + \E[Y]) \cdot 1/3\\ &+ (7 + \E[Y]) \cdot 1/3\\ = &(15 + 2\E[Y]) \cdot 1/3 \\ 1/3 \cdot \E[Y] = &5 \\ \E[Y] = &15 \end{align*} \]

总期望定律的证明

让我们来证明总期望定律。在这个证明中,我们将从 \(\sum_y E[X|Y=y]P(Y=y)\) 开始,并展示它等于 \(E[X]\)。我们的第一步将是展开 \(E[X|Y=y]\)。证明的其余部分将只是代数运算:

\[\begin{align*}\sum_y& E[X|Y=y]P(Y=y) \\ &= \sum_y\sum_x x P(X =x | Y = y) P(Y = y) \\ &= \sum_y\sum_x x P(X =x , Y = y)  \\ &= \sum_x\sum_y x P(X =x , Y = y)  \\ &= \sum_x x \sum_y  P(X =x , Y = y)  \\ &= \sum_x x P(X =x)  \\ &= E[X]\end{align*} \]

posted @ 2025-12-15 17:00  绝不原创的飞龙  阅读(3)  评论(0)    收藏  举报