# 5 事件集合  

> 译者：[PEGASUS1993](https://github.com/PEGASUS1993)

数据科学中的大多数问题涉及多个变量和事件。 随机变量及其联合分布为我们提供了一种方法来建立我们数据来源的概率模型。 某些技术对于处理大量变量和事件特别有用。它们包括：  
    在精确值难以计算时使用边界  
    使用小型集合时注意模式，然后推广到较大的集合  
    使用对称性，既可以观察也可以简化计算   
在本章中，我们将研究所有这些技术的有力例子。　　

```
# HIDDEN
from datascience import *
from prob140 import *
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
%matplotlib inline
import math
from scipy import stats
```
## 5.1Bounding the Chance of a Union
```
# HIDDEN
from datascience import *
from prob140 import *
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
%matplotlib inline
import math
from scipy import stats

from matplotlib import patches
import shapely.geometry as sg
import descartes

def show_intersection():
    plt.figure(figsize=(5, 5))
    # create the circles with shapely
    a = sg.Point(-.5,0).buffer(1.0)
    b = sg.Point(0.5,0).buffer(0.75)

    # compute the 3 parts
    left = a.difference(b)
    right = b.difference(a)
    middle = a.intersection(b)

    # use descartes to create the matplotlib patches
    ax = plt.subplot(111)
    ax.add_patch(descartes.PolygonPatch(left, fc='darkblue', ec='k', alpha=0.8))
    ax.add_patch(descartes.PolygonPatch(right, fc='gold', ec='k', alpha=0.6))
    ax.add_patch(descartes.PolygonPatch(middle, fc='olive', ec='k', alpha=0.8))
    ax.annotate('A', [-0.5, 0])
    ax.annotate('B', [0.5, 0])

    # control display
    plt.title('Not Mutually Exclusive')
    plt.axis('off')
    ax.set_xlim(-2, 2); ax.set_ylim(-2, 2)
    ax.set_aspect('equal')
```
在我们获得更大的事件集合之前，让我们考虑两个不相互排斥的事件的联合。 下图显示了两个这样的事件。 集合是整个彩色区域：蓝色，金色，当然也包括交叉区域。  
```
show_intersection()
```
　　　　　　　　![](https://i.imgur.com/0wAqh2R.png)                                  
我们可以通过分区找到 P（A∪B）。 A∪B 的区域是所有 A 联合 B 中不包含在 A 的一部分。即： A∪B=A∪(B∖AB)  
因此：  　 　P(A∪B)=P(A)+P(B\AB)     　(加法法则) 

　　　　　　    =P(A)+P(B)−P(AB)   (差异法则)  
我们现在有一个 n = 2 的公式。它计算两个事件结合的概率，首先包括每个事件的机会，然后排除交集的机会。　　
Inclusion-Exclusion Formula：两个事件的集合情况  
　　　　　　　　P(A∪B)=P(A)+P(B)−P(AB)
#### 布尔不等式
对于 n> 2，n 个事件的并集的维恩图可能非常复杂且具有多个重叠。所以并集会有点难以找到。我们将在下一节中讲述这一点。  
现在，我们会观察到一些更为简单的事情，即添加所有单个事件的概率而不处理重叠事件必须给我们一个联合概率的上限。  
可以在上图中看到，对于 n = 2。如果只是添加 P（A）和 P（B），则双倍计算交点并且您的答案大于 P（A∪B）(需要校对)。 从上面的 Inclusion-Exclusion Formula 公式中也可以看出这一点。  
布尔的不等式提供了 n 个事件联合概率的上限。 设 A1，A2，...，AnA1，A2，......，An 为事件，则布尔不等式： 
　　　　　　　　　　![](https://i.imgur.com/d81Z2c0.png)　
 
也就是说，至少一个事件发生的可能性不大于发生概率的总和。  
我们已经讨论了为什么 n = 2 时不等式是正确的。一般来说，不等式可以通过数学归纳来证明，这当做个练习留给您。  
对于每个 k，由于![](https://i.imgur.com/mQc8d6b.jpg) ,我们也有个下限：  
　　　　　　　　　![](https://i.imgur.com/pDBTZN6.jpg)  

所以  
　　　　　　　　　![](https://i.imgur.com/iGQeSnc.jpg)  
例如，如果天气预报显示星期六下雨的几率是 40％，而星期日下雨的几率是 10％，那么在这两天的某个时间点降雨的可能性至少为 40％，最多 50％。  
为了准确地找到机会，你需要在两天都下雨的机会，这是你没有的。假设独立在这种情况下似乎不是一个好主意。 因此，您无法计算确切的答案，并且必须满足边界。（有问题，待斟酌）  
虽然边界不是精确答案甚至是近似值，但它们非常有用。 以下是 Boole 不等式在数据科学中的常见用法示例。 它附有 Bonferroni 的名字，因为 Boole 和 Bonferroni 都有关于工会概率的相关界限。   

### Bonferroni 方法  
假设您基于随机样本估计五个参数，并且对于每个参数，您有一个方法可以产生具有任何预先指定概率的良好估计。例如，如果估计值 99％可以保证很好，那么你就有办法做到这一点。  
现在假设你希望你的估计是这样的，95％那五个都是好的。你该怎么办？  
只有 95％的概率才能使每项评估成为可能。如果你这样做，他们一切都好的可能性将低于 95％，因为“一切都很好”的事件是每个事件的一个子集“估计我是好的”。  
布尔不等式可以帮助你弄清楚该怎么做。  
让 A<sub>1</sub>成为 Estimate i 很好的事件。 你想要 P(A<sub>1</sub>A<sub>2</sub>A<sub>3</sub>A<sub>4</sub>A<sub>5</sub>)= 0.95。 但现在你被卡住了，因为你可以控制的只是 P(A<sub>1</sub>)，P(A<sub>2</sub>)，P(A<sub>3</sub>)，P(A<sub>4</sub>)和 P(A<sub>5</sub>)。 您可以将它们中的每一个都设置为您想要的大小，但是你不知道它们与交叉的可能性有何关系，因为这五个估计是相关的。它们都基于相同的样本。  
你可以通过查看“所有五个都很好”事件的补充来解决这个问题。 补充是“至少一个是坏的”，这是事件的结合“Estimate i 是坏的”。 你的条件是  
　　　　　　　![](https://i.imgur.com/XLZSGIp.jpg)　　  
总和中的每个项都是相应估计值不是很好的概率。你希望这些概率很小。但是由于上面的计算，你也希望它们足够大，以便它们的总和至少为 0.05。  
一种方法是使它们中的每一个等于 0.05 / 5 = 0.01，即 1％。 换句话说，你必须构建每个估计值，以便偶然发现 99％（例如，通过构建 99％的置信区间）。 这被称为 Bonferroni 同时推理方法。  
Bonferroni 方法表明，如果你构建五个估计值中的每个估计值，以便有机会获得 99％，那么所有五个估计值都是好的几率至少为 95％。  
您可以将 95％替换为任何其他阈值并再次执行计算，以查看单个估计值的好坏程度，以便它们同时具有超过阈值的机会。  
## 5.2 容斥  
虽然我们已经确定了 n 个事件结合的概率，除非在 n = 2 的情况下，我们还没有确切机会的公式。对于 n = 2，我们有    
　　　　　　　　　　　![](https://i.imgur.com/EMCP9Fm.jpg)　  
 
### n 个事件集合  
让我们看看我们是否可以通过应用我们对两个事件的并集的了解来猜测更大的 n 的公式。  
　　　　　　　　　　　　![](https://i.imgur.com/dvbZRXH.jpg)　　  
            
一种清晰的形式正在出现！如果我们有一些粗略和准备好的描述，那么将它们写出来会更容易。（XXX）     
重要的是要注意，集合“1≤i<j≤n”指定所有无序的不同索引对。 如果索引是不同的，则其中一个必须小于另一个，因此它是指示集的一部分。 如果 i 和 j 在集合中，则 i <j，因此 i 和 j 是不同的。  
以相同的方式，1≤i<j <k≤n 指定不同指数的所有无序三元组。以此类推。     
### 高斯  
根据我们在三个事件中看到的情况，我们将猜测 n 事件结合的可能性可以通过计算得出  
包括所有事件的概率   
排除所有双交叉点的概率  
包括所有三重交叉点的概率  
排除所有四重交叉点的概率; 以此类推。  
### 一般包含 - 排除公式  
对于事件 A<sub>1</sub>，A<sub>2</sub>，...，A<sub>n</sub>,  
![](https://i.imgur.com/RntLiTf.jpg)

如果你感到疑惑，你可以通过归纳证明这一点; 对于 n = 3 的情况，只需执行类似于上述步骤的步骤。 我们将在后面的章节中用不同的方法证明该公式。  
现在，让我们接受并继续前进。  
### 每个总和中的项数  
要结束该部分，我们将计算包含 - 排除公式中每个总和中的术语数，因此我们知道应用它所需要完成的工作的范围。  
这是再次参考的公式:  
![](https://i.imgur.com/5zWHSpI.png)  
显然，第一个总和中有 n 个项。由于下一步将要清楚的原因，我们将其写为：  
![](https://i.imgur.com/FFPOupS.png)  
在第二个总和中，这些项数对应于从索引 1 到 n 中选择的不同的无序对。这个数字是  
![](https://i.imgur.com/3LejgYo.png)  
在第三个总和中，项数是三个组的数量  
![](https://i.imgur.com/C9mGxLr.png)  
以此类推。  
这表明在包含 - 排除公式中添加和减去了很多项。  
但有时我们很幸运，许多项数都是相等的。然后简化了总和了。这有一个漂亮的例子，请继续阅读。  
## 5.3 匹配问题  
这个著名的问题已经在帽子和人，信件和信封，茶杯和碟子方面进行了各种各样的陈述。事实上，实际上，您可能想要匹配两种项目的任何情况似乎都出现在某处作为匹配问题的设置。  

在字母信封设置中，有 n 个字母标记为 1 到 n，还有 n 个信封标记为 1 到 n。 这些信件被随机地置换到信封中，每个信封一个字母（一个不幸的事件通常归咎于一个不幸的假设秘书），所以所有的排列都是同样可能的。 主要问题是关于放入匹配信封的字母数量。  
除了“现实生活”设置之外，问题在于随机排列的固定点的数量。 固定点是一个元素，其位置不受洗牌的影响。
### 固定位置匹配  
考虑 n 个元素的随机排列，为简单起见，我们将其称为{1,2，...，n}。 对于 1 到 n 范围内的任何 i，位置 i 是固定点的几率是多少？ 换句话说，我写信封的可能性是多少？  
我们知道有 n！ 可能的排列，所有这些都是同样可能的。 要找到 P（在位置 i 处匹配），我们所要做的就是计算将字母 i 放入信封中的排列数量 i。这是计算这些的好方法：  
把信 i 放在信封 i 里。  
完成后，剩余的 n-1 封信进行（n-1）!次置换。  
所以  
![](https://i.imgur.com/tSWtYTB.png)  
请注意答案中没有 i。 无论你修复哪个位置，在该位置匹配的机会是 1 / n。 这形象化了直观的概念，即每个字母同样可能落入任何包络中，因此它落入匹配包络的机会是 1 / n。  
现在修复任何一对位置 i≠j。要找到 P（在位置 i 和 j 处匹配），请扩展我们上面使用的方法：  
将信件 i 放在信封 i 中，将信件 j 放入信封 j 中。  
完成后，剩余的 n-2 封信进行(n−2)!次置换。  
所以  
![](https://i.imgur.com/TcKQBXh.png)  
通过归纳检验 k = 1,2，...，n，  
![](https://i.imgur.com/j9FFCz5.png)  
### 无匹配情况 
如果落在右边信封中的信件是好事件，则最糟糕的事件是每个信件都落在错误的信封中。这是没有匹配的事件，被称为紊乱。让我们找到紊乱的情况。  
关键是要注意补充是一个联合，然后使用包含 - 排除公式。  
![](https://i.imgur.com/FYo1Mro.png)  
事件 A<sub>i</sub>与“位置 i 匹配”。  
通过包含 - 排除公式和我们上面的计算，  
![](https://i.imgur.com/AvuVMuQ.png)  
如果这些款项看起来很令人毛骨悚然，那就再看看。 所添加的术语都没有索引（i，j 等）！ 每个和包括多次添加常数值，因此等于总和中的项数的常数乘积。   
第一个求和公式项数为 n,第二个求和公式的项数是  
![](https://i.imgur.com/AnaBDv3.png)   
第三个求和公式的项数  
![](https://i.imgur.com/C2PJGua.png)  
以此类推  
![](https://i.imgur.com/tDBqaHb.png)  
记住这点  
![](https://i.imgur.com/NrDWBFv.png)  
所以紊乱的概率是(当 n 很大时)    
![](https://i.imgur.com/ruvZIbK.png)  
在随机变量的语言中，令 M<sub>n</sub>为 n 个元素的随机排列中的固定点（匹配）的数量。 然后，对于每个 n≥1，我们有一个确切的公式，表明 M<sub>n</sub>为 0：  
![](https://i.imgur.com/KhiwQ5I.png)  
当 n 很大时，我们也有一个近似值：  
![](https://i.imgur.com/f7escgO.png)  
粗略地看，当 n 很大时，n 个元素的所有排列中约 36.8％将所有元素移离其原始位置。  
### k 匹配  
![](https://i.imgur.com/6bmaHd9.png)　　
## 5.4 无替换抽样  
  
考虑一组标记为 1,2 ...，n 的 n 个个体。 在没有替换的情况下随机抽取的结果是所有元素的随机排列。 当您尝试评估两个样本是否来自相同的基础分布时，您在 Data8 中使用了随机排列

