概率论中的基础概念
修改历史
- 精简内容,只保持概率里基本概念的梳理
- 添加 CDF,PDF,PMF 的说明
本文是对概率中常见概念的梳理,更多是从自己的角度解释重要概念或公式之间的关系,本文尝试回答的一些问题有:
- 概率论是如何引入新的符号和运算规则以描述不确定性对象的某些属性的?
- 概率模型为什么是一种对特定随机场景的完整抽象?
- 随机变量是变量还是函数?
- 随机变量之间典型关系有哪些?
主要参考材料来自:
- Introduction to Probability, SECOND EDITION, Dimitri P. Bertsekas and John N. Tsitsiklis
- Elements of information theory, SECOND EDITION, Thomas M.Cover and Joy A. Thomas
编程语言以及数学语言的类比
进入到 python 官方文档主页 3.11.4 Documentation ,一般会看到两个 reference 的页面链接,分别是 The Python Language Reference 和 The Python Standard Library, 前者详细介绍了语言本身的特点,比如采用缩进而不需要用花括号,有 with, catch 各类内置关键词等,这些特性使得 python 成为一个具有强大描述力,语法简洁的通用语言;后者则是介绍这门语言里内置的库,它们预设了 python 在设计时主要关注的操作对象,比如其中好几章是关于 html,xml,http,urllib, 甚至还有 tkinker 这样的用于实现图形界面的工具,可见 python 设计之初就偏向 web 等应用层工具的开发。
作为对比, C 语言也有两个重要的参考资料 The GNU C Reference Manual 和 The GNU C Library 。前者介绍 C 的语法等特征,后者包含大量的关于内存操作、字符串(流)、文件系统、sokect 、进程等对象的操作说明,因此它和 python 很不一样,更多关注系统编程。
人们还可以给编程语言添加第三方库,比如 python 中包括整个数据分析和机器学习的技术栈: numpy,pandas,matplotlib,pytorch 等等。
数学语言也有一定相似性,它的基本语法特征和内置库(如集合论,初等几何,初等代数等)在中学就学过了,之后每个课程都是在引入新的库,比如工科必学的微积分,线代和概率论。
然而数学语言更加灵活,新库的引入不单单在最初设计的语言特性范围内构建新对象,还会引入新的关键词、语法以及一大堆的数学对象,这就像是 lisp 设计的操作对象包括语言 s-expression 自身,因此它可以给语言添加新的语法(应该说 lisp 模仿数学语言)
概率论就像是数学语言里的一个库,它引入了一些新语法,如条件概率里的竖线: P(A|B) ,描述分布的波浪号等: X~N(0,1), 以此扩充了语法,同时引入了大量数学对象如事件,随机变量,期望,分布等等。概率库的依赖包括集合论,微积分,而以概率库为依赖,可以继续构建如机器学习,信息论等更上层的应用包。
数学的一大特点就是抽象,在不同的抽象层,会用不同的语法和数据结构来表示同一种对象:
- 经典的(早期的)概率论里,把外部世界的现象或事件的描述直接写到数学语言里,例如 P(硬币为正)=1/2
- 经过一轮抽象后,用集合论的语言来描述事件,比如 P({正}) = 1/2
- 再一次抽象后,用随机变量来描述,例如 P(X=1)=1/2, 这里 X 可以是 0 表示反面,1 表示正面。
同样由于数学语言的灵活性,可以在同一个陈述中混合使用随机变量、集合甚至画图来表示同一个事件,比如 P(X=1|上一次抛硬币为正), 这种灵活性对于理解问题很有帮助,但有的时候会带来困惑,就像动态类型语言可以隐式地做类型转换而隐藏 bug 一样,因此要对概念有足够清晰的认识。
ABC: 事件的概率
日常中,人们主要是针对某个事件来谈论概率,比如明天下雨的概率,抛硬币后结果为正的概率,概率论第一步就是把这种直觉的对象转换成符号。语法上,一般约定用大写字母 A,B,C 及数字下标 \( A_i, B_{i}, C_{i} \) 来表示事件,并且给每个事件赋予 0 到 1 之间的一个值, 表示发生的可能性或者信念, 称为概率。
实验,结果,样本和事件
一般来说,随机事件是从一个随机性的动态过程中得到的结果。以连续抛三次硬币为例,这个过程本身就是一个典型的随机过程。然而,在概率论中,我们关注的是这些动态过程产生的静态结果事件或事件组合的概率,而排除时间的动态影响。因此,我们要分析的就是三次抛硬币可能出现的各种结果组合的概率。
对于动态过程的具体机制,通常在“随机过程”这一分类下讨论。概率论提供了描述和理解随机现象的数学基础,而随机过程则进一步允许我们追踪和分析这些现象随时间的动态变化。它考虑的是随机事件序列如何随着时间或其他变量的变化而变化,主要用于理解和预测复杂系统的行为,比如股市波动、气候变化等。
本文用 “随机实验”一词来指代产生随机事件的过程,将其看作一个黑盒,并不打开分析,如上图所示,随机实验的所有可能结果组成了样本空间,我们只对该静态空间里的对象做一些约定:
- 实验结果要有原子性,也就是说一旦某个结果发生,那么其他的结果不可能在本次实验中发生,体现在上图中,蓝色小原点表示的每个实验结果都是不重叠的。
- 样本空间的子集称为事件,或者说,事件是实验结果的集合
- 事件是对样本空间的一次划分,对某个事件的描述是一次对样本集合空间结构的划分,或者说是对原子样本的组合,例如上图中描述了事件 A, 那么样本空间相当于被分成了 A 和非 A, 而事件 A 是通过更小的实验结果组成的(也可以是空集)。
- 这也是为什么集合论会用来表示事件,因为很多时候(尤其离散情况下),讨论事件的关系就是在讨论子集合之间的关系(交并补等)
- 如果没有特别说明结果来自多次实验,那么所有的结果或事件都出自一次实验,也就是我们讨论的都是一次实验中事件的概率。
- 当抛三次硬币时,并不是执行了三次实验,而是一次实验里抛了三次。
- 可以基于本实验中多次重复活动的结果,定义问题所关注的事件,比如"第一次硬币为正","三次里出现 2 次正面","出现奇数次正面","出现素数次反面"等等
- 这只是当前的约定,后文引出了实验之间的独立性后,会考虑不同实验下事件之间的关系。(因为只有在出现独立、分布这些概念之后才能更好地谈论不同实验的组合关系)
假设事件 A1 是今晚掷色子结果为正,事件 A2 是明天南极出现暴风雪。
以上两个事件来自什么样的实验?
也许可以把整个地球看作实验场,任何发生在地球上的事件都看作试验结果。
事件 A1 和 A2 是原子的(互不相容)吗?
并不是,互不相容意味着出现了 A1 就不会出现 A2, 反之亦然。因此 A1 和 A2 不是实验结果,而是事件,他们有一同发生的可能性。
对 A1 和 A2 这两件事情,能否看作一个实验里样本空间里的不同事件?
尽管在概率论里很少讨论实验过程本身,但在用概率解决现实中的问题时,实验的描述实际非常关键,它是一种元信息,或者说先验信息,它可以隐藏在概率图结构里,也可以藏在贝叶斯推理的先验分布中。
样本空间,概率公理,加减法以及集合论
正如线性代数讨论的对象都在线性空间,概率论讨论的对象则在样本空间之中。二者的区别在于,线性空间用 8 条公理(根据描述方式会有所不同)限制了该空间的结构为"线性",而概率论中样本空间则只有 3 条限制:
- 概率必须大于或等于 0
- 样本空间所有原子样本概率之和为 1.
- (有限空间)可加性:如果事件 A 与 B 没有共同原子样本,那么 \( P(A\cup B) = P(A) +P(B) \)
- 这个公理可以扩展到任意 n 个不相交事件的并的概率计算,但无法扩展到无穷个,因此一个补充的公理是无穷可加性(但大部分时候我们不处理离散无穷)
这些公理非常通用和"抽象", 例如:
- 其中只提到一个加法运算,如何对概率做更复杂的运算不是这些公理所提供的
- 没有给样本空间任何明确的结构上的规范,必须根据实际问题来确定样本空间的结构,比如有限空间,无限空间,离散空间,连续空间,链式结构,图结构等等。
可以用一个类比来说明线代和概率公理的区别:线性代数中的线性公理要求造出来的房子一定是方的,但概率公理只是对造房子提供预算的上限以及安全性规范,至于造出什么样的房子,要根据什么样的客人来住而定,如果是北极熊,可以造一个圆顶的雪屋,如果是鸟,那么搭一个鸟窝即可。
根据以上公理,再结合集合论的工具,可以得到很多其他的性质,例如:
- 任何事件 A 的概率 P(A) 都小于等于 1: 借助 A 与 A 补集不相交的性质
- 空集事件概率为 0: 利用全集和空集相交且组成全集的性质
- \( P(A\cup B) = P(A) + P(B) - P(A\cap B) \) 该性质的特点是有一个减法,但公理中没有直接出现减法,也没有出现交集(除了在公理 3 提到交集为空的前提),因此需要用到集合论里的性质,把 A 和 B 的并集拆分成没有交集的几个部分,他们是 \( A \cap B^{c} \), \( B\cap A^{c} \) 和 \( A\cap B \), 然后应用公理 3 求和,移项之后构造出概率之间的减法。
光从概率公理出发,基本只能做加减法,但加减法也可以足够复杂,例如计数问题,不过计数涉及的复杂运算并不是概率公理里提供的,而是根据求解的目的对样本空间摆弄时,计算排列组合而出现的。
另外,从应用角度,我们不需要过度关注公理到性质的推导,或者公理的精简性,可以把这些性质都看作是既定的规则, 问题在于如何在实际中灵活应用这些规则。
条件概率:子空间,乘除法,信息的引入
条件概率是在概率公理提供的框架下的新概念:事件 A 和 B 同时发生的概率与 B 发生的的比率被称为条件概率, 为此还引入了新的记号 P(A|B).
条件概率是一种定义,它类似公理,但它目的不是说明某个性质,而是引入一个新的对象以及这个对象的计算方法: \[ P(A|B) = \frac{P(A\cap B)}{P(B)} \]
条件概率的直觉来自于等可能事件组成的样本空间:比如掷色子,点数为 4 的概率是 1/6, 是因为样本空间有 6 个等可能的潜在结果,而如果有人告诉你结果只能是偶数,那么样本空间缩小到了 3, 于是(条件)概率就变成了 1/3.
它给概率论带来几乎无限的新视角:
样本空间可以分层
原本我们只有一个样本空间,也就是全集,但现在可以把任何事件都看作子样本空间,并且在这个子样本空间里, 只要把原概率除以条件事件的概率,就可以变成"相对概率"或者条件概率,
而如果只考虑子空间,条件概率是符合概率公理的(可以直接用定义和集合论推导)。这与线性空间里子空间概念有类似之处。
引入了乘法定律
\[ P(B) P(A|B) = P(A\cap B) \]
\[ P(A) P(B|A) = P(A\cap B) \]
以上可以推广到 n 个事件串联的情况(一种 chain rule)
引入了全概率定理
假设 B1 和 B2 对 A 进行划分,即 \( B_1\cup B_2 = A, B_1\cap B_2=\emptyset \),那么:
\[ P(A) = P(A, B1) + P(A, B2) = P(B1)P(A|B1) + P(B2)P(A|B2) \]
该式子同样可以推广到 n 个事件。
注意这个公式体现了一种 divide and conquer 的思想和计算方式,全局空间的问题可以先划分成不同子空间问题,待解决各个子空间问题后再进行汇总。
基于条件概率的模型
由于概率公理没有提供对样本空间结构的规定,只要赋予给模型中各个事件的概率符合概率律即可。 因此条件概率的出现使得可以用条件概率来描述问题背景,这被称为条件概型。
这直接开启了一个领域,比如概率图模型中都是用条件概率来建模,然后根据这些初始的条件概率去计算其他事件的概率。
在此基础上引入了独立性,这带来了对 "信息" 的一种表达
独立性意味着 B 的发生不会给 A 发生提供有利或不利的信息,即 \( P(A|B) = P(A) \) ;
引入了贝叶斯定理/公式
\[ P(B|A) = \frac{P(B) P(A|B)}{P(A)} \]
这是一种根据新的 "观察证据" 来更新信念的算法,它可以被看作概率论里原生的 学习算法,可以不断根据新数据来修改对某个事件发生的概率的预测。
该公式还可以扩展到 Bayes 推断甚至 Bayes 哲学的讨论等等
概率模型及推断:对问题的完整抽象层
前文提到,概率的公理或性质仅提供了“预算和安全性”的规范,样本空间的结构完全由使用者根据需求去确定。只要符合概率公理,样本空间可以是任何精雕细琢的结构,这是概率论应用如此广泛的原因之一:限制少导致外延丰富。
概率模型由样本空间以及样本概率的初始赋值组成,这些初始概率需要遵循概率公理的规定,我们用抛三次硬币实验为例,由于三次抛硬币有 8 种可能的结果,因此我们可以用一个表格来表示这个概率模型:
抛硬币结果 | 概率 |
---|---|
HHH | 0.125 |
HHT | 0.125 |
HTH | 0.125 |
HTT | 0.125 |
THH | 0.125 |
THT | 0.125 |
TTH | 0.125 |
TTT | 0.125 |
以上就是一个完整的概率模型,因为它包括了样本空间里所有的结果,也包括每个样本的概率值,这时候想要计算任何其他事件的概率,比如出现两次正面的概率,就可以找出表格里特定事件组成新的集合并对概率求和来得到。
然而概率公理和概率模型并没有限制我们只能用以上方式表达,而这种建模方式类似算法中的 "暴力" 遍历,当抛掷硬币次数很多的时候,表格会变得非常大,以至于无法在现实中实践。这与数理逻辑中对某个复杂表达式用真值表方式去计算语义,导致陷入指数级别增长问题。而数理逻辑中,试图用推理这种语法变换方式来绕过疯狂增长的真值表,概率中,我们也可以利用样本空间中其他数学性质和运算规则来达到类似的效果。 比如对于抛硬币的情况,我们只需要给出单个硬币为正的概率 p, 而抛 n 次得到结果的样本空间的结构是通过排列组合规则形成的,因此根据组合数学中的规则以及概率公理中第三条加法规则,就可以计算出任意组合下事件的概率。
那么这种方式是如何表达概率模型中的样本空间和初始赋值呢?
- 初始赋值仅仅是抛一次硬币为正面的概率 p
- 样本空间是通过组合数学中规则"潜在地" 展开的,这里的"潜在"是相对上文提到的显式地列出所有实验结果而言的。
因此可以看到,概率公理的简单性使得它可以和数学其他领域灵活地结合,也导致构建概率模型有时候会带有点艺术性,因为没有明确的规则告诉你如何把现实问题转换成概率语言,需要引入哪个其他领域的数学结构。幸运的是在概率发展的历史上积累下了许多常见的"结构",一旦这些结构被确定下来,很多时候计算概率的问题就会转换到其他的数学领域(因为到目前为止,概率公理和条件概率定义只引入了针对概率的减法和乘法,没有新的计算规则),最终概率空间的结构一般会被"浓缩"在一个概率分配函数(概率分布)或其他形式化的描述中,比如图模型,只要给定目标事件或该事件对应的编码就能通过公式或者一套算法计算出随机事件的概率,而不需要用原始的列表方式保存所有样本和对应概率(类比于 python 中可以用一个素数生成函数来潜在生成第 n 的质数,也可以预先把小于 N 所有质数生出来保存成列表)。
例如,二项分布模型用于描述以上连续抛硬币的场景,泊松分布用于描述单位时间(或空间)内随机事件发生的次数, 正态分布可以刻画许多自然现象和社会现象,如人群身高、智力等等。在解决具体问题的时候,首先思考能否把问题转换到现有结构的概率模型中,如果失效后再考虑自己构造模型。
可以说,概率模型是对问题的完整抽象层,它需要把当前所关注的外部世界的问题里的信息都按概率的语法和语义规则编写成数学语言,理论上,当概率模型确定下来之后,任何可解的事件概率都能通过数学形式(不论符号化还是算法化)推导而计算出来,这个过程一般称为概率推断(probablistic inference),注意 inference 一词,在逻辑推理(logic inference)中,我们从初始的某个命题,通过公理系统(一套推理规则)一步一步得到特定命题。这与给定初始概率和模型得到目标事件概率的做法是类似的。在寻找解的过程中可能需要进行妥协和权衡,例如当遇到难以计算的公式时,可能要绕开 NP hard 问题而去获得可以接受的近似解。 如果这个过程是完全按照确定性规则进行的,一般叫作精确推断,如果是通过近似手段则称为近似推断。
除此之外,还有统计推断的概念,它的初始值是现实中看到的数据,而它的规则则是人为引入的假设的概率模型,然后得到特定的概率值或者是概率模型中的参数(例如均值方差)。
根据样本空间是离散或连续、有限或无限两个维度对概率模型进行较高层的划分,对于每类模型,其实都要引入其他数学领域的规则来确定概率空间的结构,这些结构最终体现在计算规则上,比如有的需要组合数学,有的需要微积分:
离散有限概型
如果每个实验结果概率都相等,则被称为古典概型,这是人们根据日常直觉发展出来的模型,也是概率论出现时讨论最多的模型,例如:赌博的色子点数,分割均匀的幸运大转盘。 由于这类模型里样本是均匀的,因此在该模型中进行概率推理时,基本是在做计数,也就是求解排列组合问题。
离散无限概型
一般要用到无穷级数。比如在固定时间内接到的电话呼入次数可以是 0、1、2、……,没有上限,因此是无限的。 而泊松分布可以用来描述各个次数的概率,这是离散无限概型的一个例子。
连续有限概型
这类问题很可能变成了求面积、体积等几何问题,比如经典的罗密欧朱丽叶约会等待问题。
连续无限概型
例如计算某人身高大于 190 的概率,由于身高一般呈现正态分布,精确计算的话一般涉及到微积分。
离散(可数)无穷空间:新公理的引入
补充说明离散无穷的样本空间里会遇到的问题,能够从"规则制定者"的角度来审视概率公理。
由于实验结果有无穷多,而根据定义,实验结果是互斥的,因此有无穷多的概率大于 0 的不相容事件(也有无穷多概率为 0 的事件,但它们求和还是 0, 没有实质影响),而概率公理 2 要求所有的结果的概率之和为 1, 因此这些事件的概率排成的无穷序列的和要收敛到 1.
收敛的前提是,这些实验结果能够排列成一个序列,序列意味着能够用自然数作为下标进行索引,而自然数是可数无穷的,那么样本空间里事件个数也得是可数无穷。但公理 3 的可加性并无法覆盖可数无穷(根据数学归纳法只能推广到任意 n 个实验结果的求和公式),因此要引入新的公理:
- Countable Additivity Axiom: 如果 A1, A2, A3… 是无限的不相交的无穷序列(序列是可数的),那么:
\[ P(A_1\cup A_2 \cup A_3 \cdots) = P(A_1) +P(A_2) + P(A_3) + \cdots \]
注意以上公理对不可数无穷仍然是失效的,如果有效,对于连续的分布(比如一维 0-1 均匀分布),每个点的概率是 0, 而每个点都是不相交的,那么他们求和之后总概率就是 0 了,这违背了概率公理,对于这种情况,需要引入极限和积分的概念才行。
独立性,古典概型和条件概型
独立性定义的美感
独立性的直觉来自 B 的发生不会给 A 的发生提供有利或不利的信息,即 \( P(A|B) = P(A) \) 根据条件概率公式,等价于 \( \frac{P(A \cap B)}{P(B)} = P(A) \), (称为直觉公式),该式子暴露出了直觉在未经加工而映射到形式系统后出现的一些瑕疵,这些瑕疵完全来自数学内部的"审美":
- P(B) 是在分母的位置,这意味着当 B 等于 0 的时候,独立性是没有定义的。
- 式子表达的是 B 对 A 是否提供信息的问题,因此是单向的。
只要在做一次变换,就会得到 \( P(A \cap B) = P(A)P(B) \) ,称为雕琢公式,该式子从数学上更为优雅:
- 它完全覆盖了 \( \frac{P(A \cap B)}{P(B)} = P(A) \) 或者 \( P(A|B) =P(A) \) 的意义。
- 该公式在 P(B) = 0 的情况下也有意义(因此是对直觉公式的扩充),它表明不可能事件和其他任何事件都是独立的
- 该公式是对称的,只要做一次变换就得到 \( P(B|A)=P(A) \), 也就是如果 A, B 独立,那么 A 对 B 不会提供什么信息,同时 B 对 A 也不会提供额外信息。
因此 \( P(A \cap B) = P(A)P(B) \) 被作为是独立性的正式定义
在候世达的《表象与本质》一书的 "等式与物理学家" 小节里,作者提到牛顿定律 F=ma 没有展现出物理的因果关系, 他认为写成 F/m=a 是更符合直觉的,这样等式左边表示了力 F 作用在质量为 m 的物体上这一过程,右边则得到一个更本质的结果,即加速度。因此从 F/m=a 表达的是从"表象"进入到"本质", 解释成因果关系的话,说明了对物体施加力是速度改变的原因。
如果按候世达(物理学家视角)的审美,那么 \( P(A|B) = P(A) \) 应该是更"优雅" 的,这可能是数学和物理的区别。
独立性只说明抽象的概率关系
如果两个可能事件 A ,B 独立,那么他们肯定不会互斥,这也意味着 A, B 不可能都是"实验结果"(意味着是原子的,或放宽条件,至少是互斥的)。
如上左图所示,A,B 互斥意味着 \( A \cap B \) 是空集,那么 \( P(A\cap B) = 0 \), 而由于 A, B 都是可能事件(面积不为 0),因此 \( P(A)P(B) > 0 \ne P(A \cap B) \) , A, B 也就不独立了。因此除非 A,B 其中之一或者两者都是不可能事件,否则 A, B 独立意味着它们一定不互斥,它们在样本空间里的关系如上右图所示。
这可能会带来一点困惑,因此接下来用 A, B 的三种不同意义来理解独立性:
在真实发生的物理世界中: 物理世界事件的独立性意味着两个事件发生的过程是没有交互的,比如我今天晚上抛硬币为正和明天南极出现暴风雪可以认为是独立的(排除量子纠缠或者蝴蝶效应之类的情况),但这两个事件在概率空间中是有交集的,它们的交集不为空说明的是两个事件有可能同时发生,而不能说明这两个事件之间有什么关联。
上右图中 A, B 两个图形的面积可以看作事件发生的概率大小,那么 A 和 B 独立表示的是 A 的面积乘以 B 的面积等于 A 和 B 交集的面积。假设 A 和 B 概率都是 0.5, 且 A 和 B 独立, 那么交集部分的面积就 0.25。
一般来说,这些数值是事件的属性所决定的,事件的属性同时决定了他们是否独立,而概率只是一种体现独立性的数学上的一种指标。 但不妨反过来思考,能不能把手伸进这个概率空间,把右图中 B 整体往右边平移一点点,这样 A, B 概率还是 0.5, 但 \( A\cap B \) 就变小了,于是 \( P(A\cap B) \ne P(A)P(B) \) ,A,B 不再独立。这样平移之后的 B 是什么? 我想有以下几种回答:
- 可以是任何概率为 0.5 且与 A 不独立的事件,因为移动后的 B 和原来的 B 完全不一样,虽然它们共享了很多可能的实验结果。但它们可以是完全不同的事件,因为在现实世界这个巨大的随机试验场里,A 和 B 共享的实验结果可能是非常底层的,比如硬币和暴风雪都是符合物理规律的,因此他们有很多交集
- 假设对 B 只进行了非常轻微的移动,因此它的意义还是明天南极出现暴风雪这个事件。但无论如何它和晚上抛硬币有了某种联系,出现正面会使得暴风雪概率降低,一种想象是,一旦晚上掷出了正面,气候武器会寻找南极潜在暴风雪因子(比如某些小的气旋), 然后发送一个导弹把这个气旋破坏掉,从而减小了第二天出现暴风雪的概率。也就是说这种控制概率空间的手, 在物理世界里找到的对应更像是一种"信道" 以及改变事件概率的机制,因为操纵独立性是在操纵信息的沟通和执行机制。
但总的来说,如果要改变物理事件的概率空间从而逆向改变物理事件,总体是比较困难的,但接下来的两个例子显示,在概率空间所表示的另外一种意义下,"插手"概率空间实际非常简单:
- 假设上图右侧中黄色背景的正方形是一个飞镖盘,一个飞镖以均匀概率射向其任何一个位置,那么 A, B 的意义很明确,表示的就是飞镖落入区域 A 和区域 B 的概率。假设飞镖盘面积是 1, A 和 B 的面积都是 0.5, 那么只要 A,B 重叠区域大小是 0.25 (这有无数种相交情况,比如 A 在上 B 在下), 事件 A 和 B 就是独立的,否则就不是独立。可以看到,这里独立和不独立完全是可以操控的,为什么?
- 和上一个例子类似,移动 B 的位置完全改变了事件 B 的“总体”意义,尽管都是飞镖落入某个面积为 0.5 的圆环,并且圆环只是进行了很小的平移,但移动前后圆环意义已经不一样了。
- 其次, A, B 事件不是两个不交互的物理事件,他们是同一个物理事件的两种看法(视角),A 和 B 都在谈论同一个物理过程的结果,或者说,他们传递信息的手段是逻辑上的,而不是物理上的。一旦知道了飞镖的位置,那么它是否属于 A 和是否属于 B 是逻辑蕴含的,不需要 A 传递信息给 B 或 B 传递给 A, 而人之所以要去看 P(A), P(B) 是人的信息缺失所导致的。
最后一个例子和飞镖场景类似,但它没有一个与 venn 图完全对照的物理载体,完全在一个可能空间里进行事件划分: 这里 A 表示的是掷均匀六面体色子点数小于均值(即 1,2,3),而 B 表示点数为偶数的概率,那么他们各自概率都是 0.5 而他们的交集表示的既小于 4 又是偶数的概率,结果只有 2, 因此概率 \( P(A\cap B) =\frac{1}{6} \ne 0.5\cdot 0.5=0.25 \) , 因此 A 和 B 不独立。 但如果这是一个均匀 4 面体(或者任何可能的 \( 2^{n} \)面体)的均匀色子,A B 的意义仍然不变,那么 A, B 事件就是独立的。
这个例子中,事件 A B 仍然是对可能空间的划分的结果,我们改变的是黄色的背景,从而使得 A 和 B 的独立性发生改变。
这种困难来自样本空间完全是概率层面的抽象,无论事件是物理的或是主观视角的,原子的还是组合的,都一同放在样本空间里讨论,它们的实际意义已经被抽象掉了,独立性只说明了事件发生的概率关系,而没有说明真实事件发生的先后等其他关系,这也是为什么因果关系无法通过纯粹摆弄样本空间而获得。
条件独立
假设 A 表示第一次抛硬币为正,B 表示第二次抛硬币为正,A, B 是独立的; C 表示两次抛硬币的结果不同,A B 都会各自影响 C 的概率,但一旦知道 C 之后,A 和 B 就互斥了。
以下两张图片分别用 Venn 图和概率图来展现事件 A,B,C 中存在的条件独立问题。 Venn 描述了样本空间里事件发生概率的情况,概率图则展示事件之间的依赖关系。
venn 图中,A, B 在全局概率空间下是独立的,它们的面积的乘积等于它们交集的面积,但在 C 事件的子空间里, A B 没有了交集,因此 \( A\cap C \) 和 \( B\cap C \) 可以看作是是互斥事件,不可能相互独立,因此给定 C 后 A B 不再独立。
右侧概率图中,用箭头表示影响,比如 A->C 表示 A 事件会影响 C 事件。图里 A,B,C 在图模型里被称为对撞结构:在不考虑 C 时, A B 之间是独立的,当给定 C 后,A, B 不再独立。
两两独立和完全独立
考虑连续掷两次色子的实验:第一次为正记为 A, 第二次为正记作 B, 两次结果都一样记作 C. 那么根据计算, \( P(A)=P(B)=P(C)=\frac{1}{2} \) ,而 \( A \cap B, A\cap C , B\cap C \) 三个事件是等价的,都是两次抛硬币为正。 因此它们的概率都是 1/4, 根据独立的定义,发现 A,B,C 是两两独立的。
但这它们不是完全独立的,所谓完全独立,是对于某个事件集合,给定集合里任意子集,相对其他事件组成的集合都是独立的,这是一个非常强的要求。上例中,在给定 C 的情况下, \( P(A|C) = P(B|C) = \frac{1}{2} \), 但 \( P(A\cap B|C) = \frac{1}{2} \), 不等于两个条件事件相乘,因此 C 和 \( A\cap B \) 不独立。
下图分别用 Venn 和概率图展示了 A,B,C 事件的关系,右侧图中 D 表示的是”两次为正”事件。它成了 A,B,C 的一个共同潜在结果,没有观测的情况下, A,B,C 都是独立的,但给定任何一个观测事件,由于共同潜在结果的影响,其他事件都不再独立。
条件概型与 Bayes 网络
上文已经用概率图展示过变量之间的独立性关系,本节对此进行简单总结,主要是回到概率模型的视角来看待 Bayes 网络。
回忆一下,概率模型指的是一个结构定义清晰的样本空间和空间中一组事件的初始概率,由于条件概率引入了样本子空间的概念,这使得我们可以用事件之间的条件概率来作为初始概率,而条件概率本身描述了事件之间的关系,因此其他事件都可以通过条件概率计算出来,这种概率模型可以称为条件概型,它主要借助围绕条件概率定义的相关运算来进行推断。
如之前讨论的,变量间(两两)的相互关系可以用图形式来表示,Bayes 网络(也称有向图模型)正是通过带方向的边来表示依赖关系,通过定义节点的条件概率(相对于其父节点,如果没有父节点则采用边缘概率)来初始化概率分布。 正如离散均匀概率模型中,大量采用来自组合数学的规则进行概率推断,贝叶斯网络的推断规则源自图论, 而计算机科学里已经有许多关于图的算法,这是为什么 AI 领域常常用概率图模型来进行概率推断,概率图模型实际是给概率推断找到了一个可以和自动算法密切结合的入口。
上图是概率图模型中三个变量典型的依赖关系, chain 表示的是 A 通过 C 影响 B, fork 表示 A, B 同时被 C 影响,collision 表示 A, B 都可以对 C 造成影响,它刻画了实验活动的先验信息,一定程度上把实验的动态环境中的部分信息也用形式化语言表达了出来,不单单包括静态的概率表。
king's sibling 问题和因果
考虑这样一个问题: 如果某个国王是来自一个双孩家庭,那么他的另一个兄弟姐妹是女孩的概率是多少?
假设我们只知道事实数据,也就是国王(是男性)还有一个手足,但不知道性别,现在能否用概率公式推算出性别的概率?
答案是不行,或者说会得到很多结果,因为我们不知道数据生成的过程(也就是国王和他手足是在什么"实验"设定下出生的):
从国王的父母生孩子的策略的角度来看: a. 假设国王父母目的就是生两个孩子,不论男女,那么可以认为生男生女的概率都是 1/2, 这种情况相当于在问,两个孩子中,如果知道某个孩子是男孩,问另一个是女孩的概率,它等价于上文中提到的抛硬币例子里的 \( A\cup B \), 也就是事件"至少出现过一次正面",对应了三种情况:”正正“,”正反“,”反正“, 因此另一个是女孩(反面)的概率是 2/3 。
b. 然而,假设国王父母的目的是生一个男孩后就不再生,正好第二个生到了当前的国王,那么它另一个孩子是女孩概率是 1
c. 假设国王父母的目的是生两个男孩后就不再生,正好二个都生到了男孩,那么它另一个孩子是女孩概率是 0
- 从国王继承机制的不同: d. 国王已经确定是第一个孩子,那么第二个孩子是男是女的概率都是 1/2. (这和第一次跑硬币为正情况下再抛硬币为正的问题一样) e. 国王是年纪最大的儿子继承:那么要么国王是第一个儿子,要么是第二个,只有三种情况: "男男","男女","女男", 和情况 a 一样,另一个孩子是女孩的概率是 2/3. 这个假设表达的也是至少有一个男孩情况下,另一个是女孩的概率
可以看到,同样一个观测数据,但不同的数据生成机制(变量之间的因果关系),得到完全不同的结果,这是为什么我们不单单关注统计数据或者概率表,还要关心获得数据背后那个实验环境里的因果的原因。
以上几种情况,对应的有向图如下:
问题在于,这些图显然无法展现出文字描述里的那些故事,例如第二幅图虽然同时能表达 B,C, 但其故事很不一样(虽然能从概率分布中体现出差别)
人手一张 K 的概率:两种概型
在教材 1 第一章中给出了一个这样的问题: 将一副标准的包含 52 张牌的扑克,打乱后分发给 4 个人,问每个都拿到一个 K 的概率是多少?
作者给出了两种计算方法,分别对应了古典概型以及条件概型,这个例子可以比较好地展现出"模型" 是什么,以及模型的选择会导致怎样的不同地看待问题的视角和方法。
古典概型: 古典概型是离散均匀概率模型的浪漫说法,而"离散均匀"实际与独立密切相关,这类模型的样本空间往往是由多个独立事件组合起来的,比如多次掷色子得到的空间,以及本例中发牌结果,如果不看每个动作是独立的
根据 partion 划分公式,要把 52 张牌均分给 4 个人,有 \( \frac{52!}{13!13!13!13!} \) 种不同的划分方式,而每人一张 K 有多少种组合呢?首先不同花色的 K 有 \( 4! \) 种分配方式,而剩下的 48 张牌则继续进行 partion, 有 \( \frac{48!}{12!12!12!12!} \) 种划分。
因此每人分到一个 K 的概率是 \[ \frac{4!48!13!13!13!13!}{12!12!12!12!52!} = \frac{13^{3}3!}{51\cdot 50 \cdot 49} \]
条件概型: 可以从另外一种视角看待这个问题,在发牌的时候,先随机发四张 K 到 52 个槽(分成 4 组,每人对应一组)里, 记 Ki 分别表示事件"发第 i 张 K 后不会导致两张 K 在同一个人手中", 那么我们要求的就是 P(K4) 根据条件概率公式 \[ P(K_4) = P(K_4|K_3,K_2,K_1)P(K_3|K_1,K_2)P(K_2|K_1)P(K_1) \]
而以上分解后的每个条件概率都更容易获得:
- P(K1) 是第一次发牌不违背规则的概率,由于第一次发 K 不会导致任何冲突,因此为 1
- P(K2|K1) 是已经发了一张 K 后再发一张 K 而不导致冲突的概率,此时由于某人已经有一个 K, 因此只有 3 组即 39 个槽可以发,但总的空槽数是 51,因此概率是 39/51
- 同理, P(K3|K1,k2) 是已经有两个人有了 K, 在 50 个空余槽里有两组可以分配的概率,为 26/50
- P(K4|K1,k2,K3) 是已经有三个人有了 K, 在 49 个空余槽里有一组可以分配的概率,为 13/49
因此 \( P(K_4) = \frac{39\cdot 26 \cdot 13}{51\cdot 50 \cdot 49} \) ,这个结果和古典概型计算的结果是相等的。
对比两种概型,可以看到,古典概型的视角非常依赖组合数学里的计数手段,它把整个样本空间分地很碎(横向切分),每个样本都是均匀等概率的原子性的可能事件,而计算概率实际是在组合这些样本,求样本数量,如下图左侧中,统计黄色样本集合的数量。条件概型则是对样本空间按层次进行了划分(垂直切分),构造出有简洁关系的事件,通过条件概率公式计算出目标事件概率,如下图右侧,构建了事件之间的依赖关系。
概率是如何产生的?
当用 P(A), P(B), P(C) 表示事件的概率时,已经假定了某些事件是存在一个具体的概率值的,比如均匀硬币正面概率是 1/2,均匀色子每一面概率是 1/6, 或者明天南极发生暴风雪的概率是某个值 p.
现在的问题是,硬币正面概率是 1/2 是如何获得的? 或者如何确定南极发生暴风雪的概率?
这是自己建立概率模型来解决现实问题时需要考虑的问题,但这个问题很容易偏离出数学,可能和物理,认知科学,统计学或哲学是相关的,然而,本节的目的只是解答一些浅层的小问题,主要是为了在"理想的"概率论和现实的统计学/机器学习之间建立联系。
- 硬币正面概率 1/2: 这几乎脱口而出,可能是他人做过大量实验验证并且写入教材作为权威, 而我们记住了这个结论并且与自己的直觉契合。不过,假设某个硬币变得和南极一样大,无法依靠大量抛掷来验证,并且也不知道它的物理属性,那么确定巨大的硬币抛出去后出现正面的概率可能就和确定明天"南极发生暴风雪" 的概率类似。
- 明天南极暴风雪的概率为为 1/2: 假如南极时常会发生暴风雪,而人类已经对此记录了了几百年,那么以上概率的确认和抛了大量硬币得到的结论是类似的。 但假设我们没有这样的记录,那么我们只能用问题分解的思想,假设该概率是由更小的其他现象而决定的,比如南极以及周边的各类气象数据,把这些数据输入一个类似占卜的程序从而得到了 1/2。
同样如果硬币足够巨大,只要搜集了硬币各个角落的材料密度等数据,输入另外一个占卜函数也会得到概率的估计, 因此我们可以把暴风雪概率预测和巨大硬币正面的预测看作类似问题,后文以硬币为例:
假设小蓝在巨大的硬币的四个位置测试了材料的密度,值分别是 A,B,C,D(对应上左图四个点),那么一种粗糙的算法是,如果 A+C 的密度等于 B+D 的密度,那么正面概率就是 0.5, 或者更精确的 P(正面)=(A+C)/(A+C+B+D)
小红则对 A,B,C,D 四个位置做另外一种测量,他对几个点进行了某种透光检查,1 表示透光,0 表示不透光,于是得到 A=1,B=1,C=1, D=0, 透光意味着材料更轻,同时他还获得某种条件概率的先验信息,如果接近正面的地方不透光,那么正面向上的概率就会增加 1/8.
- 由于 A,C 都是 1 ,反面向上概率增加 2/8
- B 导致反面概率减少 1/8
- D 又导致反面概率增加 1/8
因此以 1/2 为初始概率的话,最终正面概率就是 1/2-1/4+1/8-1/8 = 1/4 。
这是一种把硬币拆分成内部子状态,而子状态又以明确的概率方式影响最终硬币正面的概率,可以认为是一种"推断"。而小蓝计算概率方式则是让特征经过任意其他函数(比如神经网络,能量,if-else 规则判断)得到一个概率的映射过程。
回到普通大小硬币的场景,通过大量抛硬币实验的方式,可以统计正面出现的频率,以此来表示硬币正面的概率,这可以看作是一种非常"全局"的方式,只要检查出现过的某个状态的比例就得到一个确切的结果。而对于巨大的硬币的正面(或南极暴风雪)概率的预测使用的是一种分解的思路,去观察硬币内的属性。把还原论推到极端,可以把硬币分解到原子级别,通过原子结构排布去预测硬币正反面的概率,不过由于打破的抽象层过多,往往会导致不切实际的计算量,甚至根本无法预测。类似通过查看寄存器读写规律来预测当前执行的某个高级语言的程序最终的结果。
小硬币和大硬币的两种不同概率估计方法,代表了频率主义的观点和贝叶斯主义观点,如上右图。
XYZ: 随机变量的数学世界
本章之前都是在讨论事件,如"出现正面" 、“抽到红桃 K” 等,但"事件"只是一种定性的描述,数学需要的定量分析。 如果能够将事件转换成数学对象,如整数、实数、向量甚至矩阵,那么整个概率谈论的对象就融入到广阔的数学世界之中,比如用一个数学表达式就可以指代某些复杂的事件,如 X%2=0 可以表示色子点数为偶数,X>4 表示“点数为大”。
随机变量就是这样一种将事件或者说随机实验结果转换成数值的函数,它可以看作是一种编码函数。
本章以及后文大部分情况下约定用 X,Y,Z 这些字母表靠后的词表示随机变量。
XYZ:随机变量是一个函数
随机变量是一个函数,它的输入是实验结果,输出是一个实数,但我们不关心它的导数,单调性或者是否有极值等。
上图中,将一条抛多次硬币的实验结果序列分别输入不同的随机变量(函数),得到不同的数值,写成代码如下
def bernoulli(result):
return 1 if "H" in result else 0
def uniform(result):
b = "".join(["1" if x == "H" else "0" for x in result])
return int(b, 2)
def binomial(result):
return result.count("H")
def geometric(result):
return result.find("H") + 1
result = "TTTHTHT"
print(bernoulli(result))
print(uniform(result))
print(binomial(result))
print(geometric(result))
1 10 2 4
说明:
- uniform 函数先把字符串序列转成二进制序列,然后把二进制转为整数,这样就变成离散均匀的分布了
- geometric 函数中,如果 result 里没有出现 H 则返回 0, 表明 result 不在几何随机变量所要求的样本空间内。
可以看到,随机变量作为一个函数,其输入往往是非数值对象(各种实验结果),它更容易通过程序来编写,而不是像 sin,log 这样的从数值到数值的函数。
从 P 到 p: 概率的抽象层级
当我们说 P(A) = 0.5 的时候,表示的是事件 A 的概率为 0.5, P 表示的是一个概率函数,它的输入是一个事件(集合),输出是一个 [0,1] 之间的实数;
由上一节可知,随机变量也是一个函数,它的输入是实验结果,注意实验结果之间是不相容的,也就是说,随机变量的输入的是原子事件。以掷一次六面色子的实验为例,假设 X 表示得到的结果的点数,把 X 写做函数的形式的话,我们有:
\[ X(\{1\}) = 1, X(\{2\}) = 2, X(\{3\}) = 3, X(\{4\}) = 4, X(\{5\}) = 5, X(\{6\}) = 6 \]
关于概率,以下是式子成立的:
\[ P(\{1\}) = \frac{1}{6}, P(\{4,5,6\}) = \frac{3}{6}, P(\{\}) = 0, P(\{1,2,3,4,5,6\}) = 1 \]
但以下写法是不符合语义的(类似在 python 中执行 abs("你好")
):
\[ P(1) = \frac{1}{6} \]
因为 1 不被看作集合,它应该修正为:
\[ P(X=1) = \frac{1}{6} \]
这意味着 X=1 实际是在求解一个方程, 例如 \(P(X>3) = P(\{4,5,6\}) = \frac{3}{6}\) 可以理解为,先求解 X(z)>3,得到一个解的集合 \( z \in A \),A={4,5,6} 再将 A 输入概率函数 P 得到实际概率。
因此,我们在随机变量的值域空间做任何一个论断时(例如 X=1, X>3),实际是在对随机变量函数做逆向的计算,获取值域某个区间对应的所有定义域里的原象,而上节讨论过,随机变量往往不是单纯的数值函数,它可能是字符串操作函数,因此这种逆向操作并不简单,更像是一个空间搜索算法,不过本节不讨论如何对 X 求逆,只是理清当我们写下 P(X>3) 时,要触发哪些计算。
概率论里更多关注的是数学对象的操作,而不是以上节例子中的字符串,因此为了能够让随机变量的值可以直接获取概率,引入 \( p_X \) 符号,叫做概率质量函数(本文主要以离散随机变量为例),它可以接受随机变量的值作为输入而获得概率值:
\[ p_{X}(1) = \frac{1}{6} = P(X=1) \]
如果 X 是连续的,那么用 \( f_{X} \) 表示其概率密度函数。
以上函数的输入是随机变量的某个值,它对应了一个事件(集合),本质还是在获得某个集合所映射的概率。
对于条件或联合概率,以下式子都是正确的,这里 A 表示一个事件(集合):
\[ p_{X|A}(1) = P(X=1|A) \]
\[ p_{X|X>1}(1) = P(X=1|X>1) =0 \]
\[ p_{X|Y}(1|2) = P(X=1|Y=2) \]
\[ p_{X,Y}(1,3) = P(X=1 \cap Y=3) \]
以下图片表达了连续独立地掷三次硬币的试验,在样本空间里,有八个可能结果,蓝色表示正面,红色表示反面,随机变量 X 把结果映射成了整数,它表示序列中出现正面的个数,函数 P(A) 直接从样本空间映射到了概率空间,而 \( p_{X} \) 把 X 的值域空间映射到了概率空间。在概率空间里,我们关注 X 的奇偶性,于是 \( X%2=0 \) 表示的是样本空间里正面出现 0 次和 2 次的事件集合,它的概率是 1/2 ,它等价于把随机变量 X 通过 Y=X%2
转换为随机变量 Y 后进行计算
也可以用 python 字典来表示 X 和 \( p_X \) 两个函数
X = { "反反反": 0, "反反正": 1, "正反反": 1, "反正反": 1,
"反正正": 2, "正反正": 2, "正正反": 2, "正正正": 3}
p_X = {0: 1/8, 1: 3/8, 2: 3/8, 3: 1/8}
不论离散还是连续,随机变量的值基本都是实数,但在更复杂的情况下也可以是其他类型的数学对象,譬如机器学习领域中经常把随机变量值看做向量。
总之有了随机变量,概率论进入到更广阔的空间。比如概率质量函数 \( p_{X}(x) \) 的输入输出可以交互,最典型的就是期望,离散随机变量的期望公式如下:
\( E(X) = \sum_{x} x[p_{X}(x)] \)
如果仍用事件来描述的话,事件 "出现正面" 与概率相乘是无意义的(语法错误的,或者类型不匹配)。如上图中右侧的注释,计算期望需要概率空间和 X 的值域空间共同交互
用 python 计算的话,它需要涉及 \( p_{X} \) 字典的 key 和 value
E_X = sum(k*v for k, v in p_X.items()); E_X
1.5
作为对比,熵的计算并不需要随机变量的值域,只要随机变量对应的概率的值:
\( H(X) = \sum_{x} -\log p_{X}(x)[p_{X}(x)] \)
这体现出熵并不太在乎随机变量的取值或性质,而只关心概率值的分布本身,如上图中右侧注释,熵的计算只涉及概率空间。
用 python 计算的话,H(X) 只涉及 \( p_{X} \) 字典的 value
import math
H_X = sum(-v*math.log2(v) for v in p_X.values()); H_X
1.811278124459133
随机变量到实数的函数:期望,方差,和熵
上一节引入了"随机变量"这一概念,并提到了与之相关的期望和熵。然而,这些讨论主要集中在语法层面以及这些概念在整个概率论抽象层级中的位置,没有说明它们具体的内涵或语义。本节旨在进一步梳理这些概念,但这些探讨仍然是相对浅层的。期望、熵和随机变量的意义在不同的场合和背景下会有所不同,因此理解它们需要在后文里结合场景进行更广泛和针对性的探讨。
期望是对随机变量的值进行加权求和,它的直觉来自于概率作为频率的例子,比如希望统计掷了 n 次色子后平均的点数,那么会把这些点数相加并且除以 n:
\[ ave = \frac{r_{1} + r_2 + \cdots + r_{n}}{n} \]
但由于色子只有 6 个值,因此可以先统计各个点书出现的次数,分别是 c1 到 c6, 那么以上公式就可以写成:
\[ ave = \frac{1 \cdot c_{1} + 2 \cdot c_{2} + \cdots + 6 \cdot c_{6}}{n} \]
当 n 非常大的时候 c1/n 也就变成出现点数为 1 的概率,变成:
\[ ave \simeq 1 \cdot p_{1} + 2 \cdot p_{2} + \cdots + 6 \cdot p_{6} \]
这就引出了期望期望公式:
\( E(X) = \sum_{x} x[p_{X}(x)] \)
方差也是一种期望,它是对原始随机变量进行变换后的随机变量的期望
\( Var(X) = \sum_{x} (x-E(x))^{2}[p_{X}(x)] = Var((X-E(x)))\)
注意以上方差的公式需要依赖导出变量期望规则 (the Expected Value Rule) ,它说的是,对于任何由 X 导出的随机变量 Y=f(X), 其期望可以写成 \( E(Y) = \sum_{x} p_{X}f(x) \)
然而,根据期望的定义,直接得到计算公式为: \[ E(Y) = \sum_{y} y[p_{Y}(y)] \]
根据以下几个前提性质可以得到导出变量期望规则:
- 函数是一对一或多对一的映射(不能一对多)
- 随机变量是对原子事件的函数,根据函数性质,随机变量 X=x 取值对应了一个由互斥的原子事件组成的集合。
- Y 是 X 的函数,因此 Y=y 对应了某些 x 值,而这些 x 值分别对应了不同的互斥事件。
- 于是根据概率可加性公理有: \( P_Y(y) = \sum_{f(x)=y}P_X(x) \)
- 继而得到:
\[ E(Y) = \sum_{y} y[\sum_{f(x)=y}P_X(x)] = \sum_{y} [\sum_{f(x)=y}f(x)P_X(x)] = \sum_{x} f(x)P_X(x) \]
熵也是一种期望: \[ H(X) = \sum_{x} -\log p_{X}(x)[p_{X}(x)] = E[\log(\frac{1}{p(X)})] \]
熵一般代表不确定性,也就是说,熵越大,那么不确定性就越大,信息也就越少。 类似条件概率定义的直觉来自离散均匀分布,熵的直觉也来自于此,假设随机变量 X=1 表示掷硬币正面结果为正,X=0 表示结果为反面,那么当不确定性最大,也就是硬币正面概率为 1/2 时, H(X) = 1, 并且达到最大。
另外,熵对概率的导数取了 log, 这意味着在概率中的乘法原则(条件概率的定义引出)很可能会转向加法。
统筹 PMF 和 PDF 积累分布函数(CDF)
这一节主要澄清几个相似的概念:
- PMF: 概率质量函数(probability mass function),表示离散随机变量中每个取值的概率值
- PDF: 概率密度函数(probability density function),表示连续随机变量中每个取值的概率密度值,该函数的值 不是 一个概率。
- CDF: 积累分布函数(cumulative distribution function),表示连续或离散随机变量中小于或等于某个取值的概率值,该函数的值是一个概率。
这里要说明:
- CDF 中的 D 是 distribution 的意思而不是 density.
- PMF 用 \( p_{X}(x) \) 表示,而其对应的 CDF 用 \( P(X\leq x) \) 表示;
- PDF 用 \( f_{X}(x) \) 表示,而其对应的 CDF 用 \( P(X\leq x) \) 或 \( F(x) \) 表示;
- distribution 意思是分配或者分布,它描述的就是概率值是如何分配,因此对于 PMF 或 PDF 我们也会说这是一个概率分布函数,甚至 PMF, PDF 和 CDF 都是可以叫做概率分布函数,因为是 Probability Distribution Functions, 缩写也是 PDF, 但为了避免混淆,本文 PDF 只是表示连续随机变量的概率密度函数。
- CDF 可以用于描述离散随机变量和连续随机变量的概率分配,它是更加通用,并且函数是非递减的,性质更规范,如果是离散的,通过在 CDF 计算差分就可以得到 PMF, 如果是连续的,对 CDF 求导就可以得到 PDF, 因此它统筹了 PMF 和 PDF, 我们可以用它来谈论各类随机变量甚至对这些随机变量进行转换,如后文会提到"逆采样变换" 就是用了 CDF 这种更通用的性质。
- 然而, CDF 不是我们通常说的"概率分布", 因为一般提到某个函数是概率分布,那么会潜在地认为该函数在定义域上所有取值的求和或积分应该是 1, 但 CDF 又不符合这个性质。
所以,一般来说,当我们谈到概率分布的时候,我们一般指的是 PMF 或 PDF, 但如果我们要说明 CDF, 我们会特别说明这是该随机变量的累积分布函数。
全期望公式的抽象之梯
全期望公式直接来源于全概率定理,但我们只在用事件谈论概率的时候表达过全概率公式: 如果 B1, B2 对 A 进行了划分, 那么 \[ P(A) = P(A, B1) + P(A, B2) = P(B1)P(A|B1) + P(B2)P(A|B2) \]
接下来,我们逐步用随机变量(XYZ)来替换事件(ABC),逐渐把公式从事件(集合)层完全进入到随机变量的函数层(在抽象之梯上往上爬)
先将 A 替换成 X=x 这个事件,那么 P(A) 就写成 \( p_{X}(x) \):
\[ p_{X}(x) = p_{X,B_1}(x, B_{1}) + p_{X,B_2}(x, B_{2}) = p(B_1)p_{X|B_1}(x) + p(B_2)p_{X|B_2}(x) \]
这个时候,等式最左边和最右边乘以 x 并对所有 x 求和:
\[ \sum_{x}xp_{X}(x) = \sum_{x}xP(B_1)p_{X|B_1}(x) + \sum_{x}xP(B_2)p_{X|B_2}(x) = P(B_1)\sum_{x}xp_{X|B_1}(x) + P(B_2)\sum_{x}xp_{X|B_2}(x) \]
这等价于:
\[ E(X) = P(B_1)E(X|B_1) + P(B_2)E(X|B_2) \]
以上就是带事件的全期望公式,注意我们只有在把 P(A|B1) 替换成了 \( \)\( p_{X|B_1}(x) \) 之后才能计算期望,因为这时候 x 才是一个数值。
而如果继续把 B1 B2 也替换成随机变量 Y 里的所有事件,那么继续写成:
\[ E(X) = \sum_{y}p_{Y}(y)E(X|y) \]
这里 Y 的所有取值对应的事件对 X 的每一个取值对应的事件进行了划分。
最后,把 E(X|y) 看作是随机变量 X 的函数 g(X), 那么右边等式就是对 g(X) 的期望,因此可以写成最高的抽象形式:
\[ E(X) = E(E(X|Y)) \]
注意右边等式的计算顺序,先对 X 求条件期望,再对 Y 求期望。
这种从事件到随机变量的简化的过程,就像写代码时不断把某个过程封装成更简洁的接口一样
另外,作为对比,由于 E(X) 是一个数,因此 \( E(X) = E(E(X)) \) 也成立。
全方差法则
\[ Var(X) = E[Var(X|Y)] + Var(E[X|Y]) \]
随机变量之间的交互
本节梳理两个随机变量之间的关系,其中包括独立性、条件独立性、相关性。衡量它们的指标包括:
- 是否独立:0/1 指标
- 协方差和相关系数:不独立的程度,并且只是线性关系的强度,也就是说,即便两个变量关系是 X=Y^2+1, 相关系数衡量的 是 X 和 Y 之间线性的关系,相当于要用一条直线去拟合以上非线性关系,然后体现出直线的斜率
- 互信息:衡量更一般的依赖关系,不仅包括线性关系,也包括任何形式的依赖关系。 如果两个变量独立,那么它们之间没有共享信息,因此互信息为 0。
独立性的抽象之梯
而当我们说随机变量 X 与事件 B 独立, 意味着 X 取任何值时所对应的事件都与 B 独立。
上节爬完了全期望公式的抽象之梯,本节爬独立性的抽象之梯
前文已经介绍了对事件独立性的定义: 事件 A 和 B 独立等价于 \( P(A\cap B) = P(A)P(B) \)
现在把其中的 A 替换成随机变量 X, 然而 \( X\cap B \) 或者 \( P(X) \) 都是错误的写法,我们只能谈论 \( \{X=x\}\cap B \) 和 P(X=x)
随机变量 X 要与事件 B 独立,需要要求所有 X=x 都与事件 B 独立,即 \(\forall x, p_{X|A}(x) = p_{X}(x) \), 这是一个很强的要求 但它和两个事件之间的独立性意义是一致的:
考虑事件 A 的补 \( A^{c} \) 与事件 B 的独立性,根据 \(P(B) = P(A\cap B) + P(A^{c}\cap B) = P(A)P(B) + P(A^{c}\cap B)\) 得到: \[P(B) -P(A)P(B) = P(A^{c}\cap B) \] 交换等式两边并化简后: \[P(A^{c}\cap B) = P(B)(1 -P(A)) = P(B)P(A^{c}) \] 这就说明 \( A^{c} \) 和 B 两个事件也是独立,如果用指示随机变量 \( I_a = 1\) 和 \( I_{a}= 0 \) 分别表示 A 的发生与否, 那么事件 A 和 B 独立就等价于随机变量 \( I_{a} \) 与事件 B 独立。
同理可以知道,如果 A 和 B 独立,那么 \( A, A^{c} \) 两个事件分别与 \( B, B^{c} \) 事件独立时,用 \( I_b \) 来表示 B 发生与否的话,则 A, B 独立等价于随机变量 \( I_{a} \) 与 \( I_{b} \) 独立。
以此推广的话,随机变量 X 和 Y 独立,则意味着: \[ \forall y,\forall x, P_{X|Y}(x|y) = P_{X}(x) \]
或者:
\[ \forall x,\forall y, P_{X,Y}(x,y) = P_{X}(x)P_{Y}(y) \]
变量之间独立性要求两组随机变量对应实验结果集合里都独立,这至少蕴含两点推论:
- 如果变量之间不独立,那么验证这个结果可能是相对简单的,只要找出一个 (x,y) 的点构造出反例即可
- 这种两组事件集合的独立更接近"实验活动"层面的独立,例如 X 可能来自一个掷色子实验的结果,而 Y 来自另一组实验的结果,这就是为什么,我们在谈论随机变量的时候,通常会强调不同的实验,而在谈论事件的时候,通常谈论的是同一个实验内的不同事件。
- 独立性是一种强关系
从事件层面上看: 尽管独立性的符号表达是 P(A|B)=P(A) 或者 P(A,B)=P(A)P(B), 它实际要求两个事件在概率空间里的面积乘积完全等于它们交集的概率,即便有任何微小的偏差, 它们之间就不独立了,这实际是非常苛刻的。
另外从变量层面上看, P(X|Y)=P(X) 中,如果 X Y 有大量取值,这意味着所有 X, Y 的具体取值下,等式都要成立, 因此 P(X=1|Y=1) = P(X=1), P(X=0|Y=1) = P(X=0), P(X|Y=1) = P(X|Y=0) 等等。
独立性意味着: \[ P(X|Y=1) = P(X|Y=0) = P(X) \] \[ E(X|Y=1) = E(X|Y=0) = E(X) \]
协方差和 Pearson 相关性
\[ Cov(X,Y) = E[ (X-E[X])(Y-E[Y]) ]=E[XY]-E[X]E[Y]\] 如果 X Y 期望都是 0, 那么它就等于 \( E[XY] \)
Pearson 相关性则是归一化的: \[ \rho (X,Y)= \frac{Cov(X,Y)}{\sqrt{Var(X)} \sqrt{Var(Y)}} \]
它类似标准差。
相关系数是衡量的是线性依赖程度。因此对于非线性的情况,可能会出现一些奇怪的结论,例如 Pearson 相关系数为 0 不意味着独立性,一个例子是 X 是 [-1,1] 上的均匀分布,而 \( Y = X^2 \)
通过相关性来判断是否独立有什么意义呢?很可能大部分情况下变量之间都是非线性的关系,相关性得到的是线性变化?对于非线性关系的判断基本都是错的吗
Mutual information 和 KL-divergence
KL 散度: \[ KL(P, Q) = \int_{x\in X} P(x)\log \frac{P(x)}{Q(x)}dx \]
这里的计算有时候是比较难的,需要积分,这些指标也都是双向的,不提供依赖方向
互信息: \[ I(X,Y) = KL(P_{XY}, P_{X}P_{Y}) \]
I(X, Y) = 0 等价于 X 和 Y 独立
互信息捕捉更广的依赖关系,以下 Y 和 X 是非线性关系:
import numpy as np
from sklearn.feature_selection import mutual_info_regression
from scipy.stats import pearsonr
np.random.seed(0)
X = norm.rvs(size=1000) # 从标准正态分布生成样本
Y = 2*X**3 + 3
# 计算相关系数
correlation, _ = pearsonr(X, Y)
# 互信息的估计(需要X和Y_independent作为2D数组传入)
X_reshaped = X.reshape(-1, 1)
Y_independent_reshaped = Y.reshape(-1, 1)
mutual_info = mutual_info_regression(X_reshaped, Y, discrete_features=False)
print(correlation, mutual_info)
0.8079539359284056 [4.14201563]
以下 X 和 Y 是独立的:
np.random.seed(0)
X = norm.rvs(size=1000)
Y_independent = norm.rvs(size=1000) # Y ~ N(0, 1),独立于X
# 计算相关系数
correlation_independent, _ = pearsonr(X, Y_independent)
# 互信息的估计(需要X和Y_independent作为2D数组传入)
X_reshaped = X.reshape(-1, 1)
Y_independent_reshaped = Y_independent.reshape(-1, 1)
mutual_info = mutual_info_regression(X_reshaped, Y_independent, discrete_features=False)
print(correlation_independent, mutual_info[0])
-0.03150827496091237 0
问题: 什么互信息能捕捉两个随机变量之间更复杂的关系,但概率统计中常用的还是协方差或者 pearson 系数?
答:互信息捕捉的是变量之间的整体依赖性,它没有什么假设,因此通用性更强,比如在机器/深度学习中,但它并不包含关于两个变量共同变动趋势的信息,它衡量的是,如果我们知道了 X 的信息,会对 Y 的不确定性减少多少(反之亦然),它的计算中都不需要涉及随机变量的值,而只需要随机变量的分布。
与之相对的是,协方差和 Pearson 相关系数专门用于衡量两个变量之间的线性关系强度。协方差直接反映了两个变量共同变动的方向和程度,而 Pearson 相关系数则是协方差的标准化形式,能够提供变量之间线性关系强度的无量纲度量。 线性是意味着解释起来更直观,就像微积分把所有曲线都看作无线小的直线段的组合一样。
E(X|Y) 和残差
E(X) 是一个数值,而 E(X|Y=1) 也是数值,它相当于 E(X|A), A 为事件 Y=1, 因此 E(X|Y) 是一个关于 Y 的函数,可以写成 E(X|Y=y) = f(y) 或者 E(X|Y)=f(Y), 但这个函数中用到了 X 随机变量的值以及分布。
接着理解 E(X|Y) 的意义,对任意取值 y, E(X|Y=y) 表示的是 Y=y 条件下 X 的期望,也就是说,虽然 E(X|Y) 是关于 Y 的函数,但它的值描述的更多是 X 的性质。 一种类比是, X 是一头大象,Y 是不同的盲人,E(X|Y=1) 就是盲人 1 对大象的描述。E(X|Y) 是一个盲人对大象描述的列表:
X = {"蛇", "马", "床", "柱子"} # 大象是不同概念的集合
P["X"] = {"蛇": 0.1, "马": 0.4, "床": 0.05, "柱子":0.1,...} # 大象这个概念与其他概念之间的距离
E["X"] = "大象"
E["X|Y"] = {1: "柱子", 2:"蛇", 3:"马",...}
P["X|Y"] = {1: {}, 2:"蛇", 3:"马",...}
E[X|Y] - X 是一个 X,Y 的联合随机变量, 可以被视为一个误差项或残差,它的期望是 0 。
P(X|Y=1) 和 P(X=1|Y)
P(X|Y=1) 是 Y=1 事件下的条件分布,可以把 X|Y=1 看作一个新的随机变量,它的 PMF 是符合概率公理的。
请用一个例子说明 P(X|Y=1) 和 P(X=1|Y) 的区别,最好画出表格,比如 X 和 Y 都取 0,1, 列出联合分布以及 P(X|Y=1) 和 P(X=1|Y) 两个子表格
当然,让我们通过一个具体的例子来说明 \( P(X|Y=1) \) 和 \( P(X=1|Y) \) 的区别。
假设 \( X \) 和 \( Y \) 是两个二元随机变量,可能取值为 0 或 1。我们将考虑一个具体的联合概率分布表。
联合概率分布表:
\begin{array}{ccc} Y \backslash X & 0 & 1 \\ 0 & 0.3 & 0.1 \\ 1 & 0.2 & 0.4 \\ \end{array}现在,我们可以计算 \( P(X|Y=1) \) 和 \( P(X=1|Y) \):
- \( P(X|Y=1) \): 给定 \( Y=1 \),我们可以得到 \( X \) 的条件概率分布:
这是符合概率公理的概率律。
- \( P(X=1|Y) \): 我们可以计算 \( X=1 \) 给定 \( Y \) 的值的条件概率:
这里并不是一个合格的概率。在因果推断中,P(X=1|Y) 会发挥作用。
独立随机变量之和
首先对于独立的变量 X 和 Y, 通过展开定义并进行求和顺序的交换,可以证明以下性质:
- \( E(aX+b) = aE(X) + b \) : 利用期望定义和导出变量期望规则
- \( E(X+Y) = E(X) + E(Y) \) :这可以直接通过联合随机变量的期望定义,对二维求和进行变换而得到
在数学中,线性往往是一种很好的性质,可以简化问题和计算,因此在遇到与期望有关的问题中,应该考虑到利用这种性质。
如果 X 和 Y 独立,那么
\[ E[XY]= E[X]E[Y] \]
该性质成立的原因在于, E[XY] 的底层展开里是对每一项 \( xyp_{XY}(x,y) \) 求和,而独立性使得 p(x,y) 可以被分解成 p(x)p(y), 因此就可以分离出 xp(x) 和 yp(y) 了。以上公式可以推广到:
\[ E[g(X)g(Y)]= E[g(X)]E[g(Y)] \]
继而又推出:
\[ Var(X + Y) = Var(X) + Var(Y) \]
这里要利用 X 和 X+b 的方差是一样的性质,这样无论 X,Y 是什么变量,都可以先将其平移到期望为 0 的位置,即转换成 X-E(X).
而对于具体的分布,则需要用卷积来计算, 卷积引入的新语法: \[ P_{X+Y}(s) = [P_{X}*P_{Y}](s) \]
对于离散的独立的两个变量,卷积的计算公式是: \[ [P_{X}*P_{Y}](s) = \sum_{x=1}^{N}P_{X}(x)\cdot P_{Y}(s-x) \]
注意这个形式和向量内积是一样的,这也是为什么卷积神经网络的卷积计算可以向量化后用矩阵相乘来实现。另外如果变量不独立,则需要需要引入条件概率。
由于 X, Y 的取值仍然是实数,所以他们相加的结果变量也是取实数,一个疑问是:为什么两个实数、虚数、矩阵甚至函数相加看上去都是很自然的,每个位置对应上后进行计算就可以了,而随机变量相加则要先计算乘法,然后积分或求和,给人一种很不自然的感觉?
这是因为卷积真正想要计算的不单单是 X + Y 的取值,而是所有取值所逆向映射在概率空间里的概率比重,这是一种选择某个值 z,然后考虑所有符合 x+y=z 的 x 和 y 的类型的计算。
接着区分 nX 和 \( \sum_{i}^{n}X_{i} \) ,其中 Xi 都是独立的相同随机变量
- nX 相当于对一次实验的结果放大 n 倍(比如将骰子结果乘以 n),它满足 \( E(nX)=nE(X), Var(nX)=n^{2}Var(X) \)
\( \sum_{i}^{n}X_{i} \) 则是对多次独立实验结果求和,它满足: \[ E(\sum_{i}^{n}X_{i}) = nE(X) \] \[ Var(\sum_{i}^{n}X_{i}) = nVar(X) \]
注意期望结果是一样的,但方差有很大区别。
一个例子是,如果 \( E(X)=\mu \), \( Var(X)=\sigma^{2} \) ,那么从 X 中随机采样 n 个样本 \( x_{i} \) 到 \( x_{n} \) 那么这些样本的平均值也可以作为随机变量 \( \bar{X} = \sum \frac{x_{i}}{n} \) ,其满足:
\[ E[\bar{X}]=\sum E[\frac{x_{i}}{n}]=n\frac{\mu }{n}=\mu \]
\[ Var[X]=\sum Var(\frac{x_{i}}{n}) = n \frac{Var(X)}{n^{2}} = \frac{Var(X)}{n} \]
当要估计 n 个随机变量和的概率分布时,卷积可能派不上用场,我们可以放宽条件,用不等式来获得近似结果,这是中心极限定理讨论的问题,不在本文的范围之中了。