本帖最后由 eew_gleddk 于 2024-12-29 15:38 编辑
# 《深度学习的数学——使用Python语言》概率论
# 概率论
## 基础概念
### 样本空间和事件
1. **样本空间(Sample Space)**
样本空间是指一个实验所有可能结果的集合。它包含了实验中所有的基本事件。
举例:
扔一枚硬币,样本空间为 S={正面,反面}。
扔两颗骰子,样本空间为 S = { (1,1), (1,2), . . ., (6,6) },包含了所有可能的结果。
2. **事件(Event)**
事件是样本空间中的一个子集,表示实验的某一特定结果或某些特定结果的组合。事件可以是基本事件(单一结果)或复合事件(多个结果的组合)。
举例:
扔一枚硬币,事件 A 可以表示硬币出现正面,即 A={正面}。
扔两颗骰子,事件 B 可以表示和为 7 的事件,即 B={(1,6),(2,5),(3,4),(4,3),(5,2),(6,1)}。
3. **关系与区分**
样本空间:包含所有可能的结果。
事件:样本空间的一个子集,可能是一个或多个结果的集合。
每次实验的结果属于某个事件,而这个事件的结果属于样本空间中的某个元素。
### 随机变量
1.**随机变量的定义**
随机变量 是一个从样本空间 S 到实数集合 R 的函数,通常用 X 或Y 表示。
给定一个实验,其结果 \omega \in S,随机变量 X 会根据某种规则将每个实验结果 \omega 映射到一个数值X(\omega) \in R
2.**举例**
扔两枚硬币,设随机变量 X 表示“正面朝上”的硬币数量。则 X 的可能取值是 {0, 1, 2},对应的概率分别是:
P(X = 0) = 1/4
P(X = 1) = 1/2
P(X = 2) = 1/4
### 人类不擅长处理概率问题
#### 蒙提-霍尔困境
蒙提-霍尔困境是一个著名的概率论问题,源自美国的电视游戏节目。在该节目中,参赛者面临三个封闭的门,背后有一个奖品和两个空的奖品。参赛者需要通过选择一个门来决定自己的奖励。
**问题描述**
1. 参赛者首先选择一个门。
2. 主持人知道各门后面的奖品,他会打开一个没有汽车的门。
3. 主持人给参赛者一个机会,让他们选择是否保持原来的选择,或换到另一个未打开的门。
4. 如果参赛者选择了汽车所在的门,就赢得汽车;如果选中了空门,就输掉奖品。
***在主持人揭示了一扇门后,参赛者是否要更改最初的选择?***
正确答案是应该选择另一扇门,因为换的话有2/3的概率获得汽车,而不换只有1/3的概率获得汽车。
是不是比较反直觉?直觉是不是觉得不应该换?
假设我们有三个门,分别标记为 A、B 和 C。假设汽车在其中一个门后,其他两个门后是山羊。
参赛者最初选择的门(假设是门 A)后有汽车的概率是 1/3,有山羊的概率是 2/3。
主持人会打开一个没有汽车的门。如果参赛者最初选择了门 A 并且门 A 后面是汽车(概率为 1/3),主持人会打开另外两扇门中的一扇,剩下的那个门是山羊。
如果参赛者最初选择了门 A 并且门 A 后面是山羊(概率为2/3),主持人将揭示另一个是山羊的门,剩下的那个门必定有汽车。
**分析**:
- **保持选择**:假设参赛者保持最初选择的门(门 A)。那么,赢得汽车的概率仍然是最初选择时的 1/3。
- **如果更换门**:如果参赛者更换门,那么在他们最初选择的是山羊的情况下,他们必定会选择到汽车。因为主持人已经排除了一个山羊门,所以换门后,参赛者赢得汽车的概率是 2/3。
如果我们第一次选错,在揭示另一个错误选项后,我们换门必定会获得汽车,我们第一次选错的概率是2/3,所以换门获胜的概率是2/3.
用python模拟一千次的结果,当次数逐渐增加,概率逐渐趋近1/3和2/3.
#### 是否患有癌症
**问题**:40岁女性在乳房X光检查中结果为阳性时患有乳腺癌概率。
我们知道以下三个事实:
(1)40岁女性患乳腺癌的概率为0.8%。
(2)当女性确实患有乳腺癌时,X光检查能够正确显示为阳性的概率为90%。
(3)当女性没有乳腺癌时,X光检查错误地显示为阳性的概率为7%。
假设有1000名女性
根据(1)可以知道大概有8个人患有乳腺癌。
根据(2)可知大概有7位患者检查为阳性。
根据(3)可知大概有69位正常人检查为阳性。
所以总共有7+69=76人会的到阳性结果,其中7个为真阳性。
所以在乳房X光检查中结果为阳性时患有乳腺癌概率为7/76=0.092约为9%。
但是让医生去估计概率时,他们所给出的答案的中位数是70%,并且有超过1/3的回答是90%。医生的错误回答是因为没有考虑40岁女性整体患病率不高这个因素。后面还会用贝叶斯理论证明。
**根据上面两个例子可以看出来,概率是很反直觉的一门学科。**
## 概率法则
### 事件的概率
事件的概率是一个衡量某个事件发生可能性的数值,通常用数学方法来表示。事件的概率值通常在0到1之间,0表示事件不可能发生,1表示事件一定会发生。
### 加法法则
如果两个事件是互斥的(这两个事件不能同时发生),那么它们的联合概率是各自概率的和。
如果事件A和事件B是互斥的,那么:
P(A∪B)=P(A)+P(B)
**例子:**
掷一个六面骰子,掷出“1”或“2”的概率是?
事件A表示掷出“1”,事件B表示掷出“2”。则概率为:
P(A∪B)=P(A)+P(B)=1/6 + 1/6 =1/3
### 乘法法则
如果两个事件A和B是独立的(一个事件的发生不影响另一个事件的发生),那么它们同时发生的概率是各自概率的乘积。公式为:
P(A∩B)=P(A)×P(B)
**例子**:
掷两次公平的六面骰子,第一次掷到“3”,第二次掷到“5”的概率是?
事件A表示第一次掷到“3”,事件B表示第二次掷到“5”。则概率为:
P(A∩B)=P(A)×P(B)=1/6*1/6=1/36
### 加法法则修正版
如果两个事件不是互斥的,则加法法则需要考虑到它们的交集部分(它们同时发生的概率),避免重复计算。公式为:
P(A∪B)=P(A)+P(B)−P(A∩B)
**例子**
假设从一副扑克牌中抽一张牌,这张牌是红色牌或者数字牌的概率:
事件A表示抽到红色牌,事件B表示抽到一张数字牌(2到10)。
P(A∪B)=P(A)+P(B)−P(A∩B)
如果有52张牌,其中26张是红色牌,9张是红色的数字牌,那么:
P(A) =26/52,P(B) =36/52,P(A∩B) = 9/52
因此,事件A或事件B发生的概率是:
P(A∪B)= 26/52 + 36/52 -9/52 = 11/13
### 生日难题
**问题**:一个房间里平均需要多少人,才能使他们中有两个人的生日在同一天的概率大于50%?
假设一年有365天(忽略闰年),每个人的生日是独立的,且均匀分布在365天之内。
第一人的生日可以是任意一天,因此没有限制。
第二人的生日与第一个人不同的概率是364/365
第三人的生日与前两个人都不同的概率是 363/365
以此类推,第n 个人的生日与前 n-1 个人都不同的概率是365-(n-1)/365
因此,所有n 个人的生日都不同的概率是:
P(所有人生日不同)= 365/365× 364/365× 363/365×⋯× 365−(n−1)/365
对于 n=23,我们计算:
P(所有人生日不同)≈0.4927
因此,至少两人生日相同的概率约为:
P(至少两人生日相同)=1−0.4927≈0.5073
这意味着在23个人的群体中,至少有两个人生日相同的概率大约为 50.73%。
用程序模拟同一天出生的概率与房间人数的关系。
### 条件概率
**条件概率**是指在已知某个事件已经发生的前提下,另一个事件发生的概率。它表示的是在一个事件发生的条件下,另一个事件发生的可能性。条件概率通常表示为 P(A∣B),在事件B已经发生的条件下,事件A发生的概率。
条件概率的公式定义为:
P(A|B) = P(A ∩ B)/P(B)
**例子:**
假设一个班级有10个学生,其中7个是男生,3个是女生。假设其中有4个男生和2个女生是学过编程的。计算在已知某个学生是男生的情况下,他学过编程的概率。
事件A:学生学过编程。事件B:学生是男生。
P(A∣B)=P(A∩B)/ P(B) =P(学过编程的男生人数)/P(男生人数)= 4/7
**注意:P(A∣B) != P(B∣A)**
### 全概率公式
假设事件 B_1, B_2, ..., B_n 是一个完整的事件分划B_1, B_2, ..., B_n 互不相交,且它们的并集为整个样本空间,并且对于每个 i ,事件B_i的概率P(B_i) > 0 。
那么,任何事件 A的概率可以表示为:
P(A) = P(A|B_1)P(B_1) + P(A|B_2)P(B_2) + ... + P(A|B_n)P(B_n)
或者更简洁地写作:
$$
P(A) = \sum_{i=1}^{n} P(A|B_i)P(B_i)
$$
**例子:**
假设有一个袋子,其中有三种颜色的球:红球、绿球和蓝球。我们定义以下事件:
- \( A \):从袋子中随机取出一个球是红色的。
- \( B_1 \):选择的是包含 50 个红球的袋子。
- \( B_2 \):选择的是包含 30 个绿球的袋子。
- \( B_3 \):选择的是包含 20 个蓝球的袋子。
假设选择袋子 B_1的概率是 \( P(B_1) = 0.4 \),选择袋子 \( B_2 \) 的概率是 \( P(B_2) = 0.3 \),选择袋子 \( B_3 \) 的概率是 \( P(B_3) = 0.3 \)。
现在我们要求事件计算事件 A 的概率,我们可以使用全概率公式:
P(A) = P(A|B_1)P(B_1) + P(A|B_2)P(B_2) + P(A|B_3)P(B_3)
P(A|B_1) = 1 (因为袋子 \( B_1 \) 只包含红球)。
P(A|B_2) = 0 (袋子 \( B_2 \) 没有红球)。
P(A|B_3) = 0 (袋子 \( B_3 \) 也没有红球)。
因此:
P(A) = 1 * 0.4 + 0 * 0.3 + 0 * 0.3 = 0.4
所以,取出一个红球的概率是 0.4。
## 联合概率和边缘概率
### 联合概率表
联合概率表是一个二维表格,通常用来表示两个或多个离散随机变量的联合分布。联合概率表的每个单元格都表示对应随机变量组合的概率。
**定义**:
对于两个离散随机变量X 和 Y,联合概率P(X=x,Y=y) 表示X 取值为x 且 Y 取值为 y 的事件发生的概率。
| X\Y| Y = 正面 | Y=反面 |
| ------------ | ------------ | ------------ |
| X=1 |1/12 |1/12 |
| X=2 |1/12 | 1/12 |
| X=3 | 1/12 |1/12 |
| X=4 | 1/12 |1/12 |
| X=5 | 1/12 | 1/12 |
| X=6 | 1/12 |1/12 |
联合概率表的计算过程:
掷骰子的概率 P(X = x) = 1/6,每个骰子结果出现的概率相等。
掷硬币的概率 P(Y = 正面) = 1/2和 P(Y = 反面) =1/2
因为掷骰子和掷硬币是独立事件,联合概率是各自概率的乘积:
P(X = x, Y = y) = P(X = x) * P(Y = y)
P(X=x,Y=y)=P(X=x)*P(Y=y)
例如, P(X = 1, Y = 正面) = 1/6 * 1/2 = 1/12
### 概率链式法则
**基本概念**
链式法则的核心思想是:
对于一组随机变量 \( X_1, X_2, ..., X_n \),联合概率 \( P(X_1, X_2,..., X_n \) 可以通过一系列的条件概率逐步分解成多个因子。
**链式法则的公式**
对于 \( n \) 个随机变量 \( X_1, X_2, ..., X_n \),其联合概率可以表示为:
$$
P(X_1, X_2, ..., X_n) = P(X_1) * P(X_2 | X_1) * P(X_3 | X_1, X_2) * ... * P(X_n | X_1, X_2, ..., X_{n-1})
$$
这条公式说明,联合概率可以从一个变量的边际概率开始,然后逐步条件化以涉及更多的变量。
**例子**
两个随机变量的链式法则
假设有两个随机变量 \( X \) 和 \( Y \),链式法则可以表示为:
P(X, Y) = P(X) * P(Y | X)
- \( P(X) \):是 \( X \) 的边际概率。
- \( P(Y | X) \):是在已知 \( X \) 的情况下 \( Y \) 的条件概率。
三个随机变量的链式法则
假设有三个随机变量 \( X_1, X_2, X_3 \),链式法则则为:
P(X_1, X_2, X_3) = P(X_1) * P(X_2 | X_1) * P(X_3 | X_1, X_2)
- \( P(X_1) \) 是 \( X_1 \) 的边际概率。
- \( P(X_2 | X_1) \) 是在已知 \( X_1 \) 的情况下 \( X_2 \) 的条件概率。
- \( P(X_3 | X_1, X_2) \) 是在已知 \( X_1 \) 和 \( X_2 \) 的情况下 \( X_3 \) 的条件概率。
通过这种分解,我们可以一步步计算复杂的联合概率。
# 概率论进阶
## 概率分布
### 直方图与概率
直方图是一种用来表示数据分布的图形。它将数据集分成若干个连续的区间,然后显示每个区间内数据的频数或频率。
横轴:代表数据的取值范围,通常分为若干个区间。
纵轴:表示每个区间内数据出现的频数或频率。
通过直方图,我们可以大致看到数据的集中趋势、分散程度以及分布形态。
我们用直方图来描述一张图片的像素分布特征,其中行人上楼梯的图片命名为ascent,小浣熊的图片命名为face。
这是上面两张图的概率直方图,可以看到两张图有明显差异。
### 离散性概率分布
离散概率分布用于描述离散型随机变量的概率分布。离散型随机变量的取值是可数的,通常是有限个或可列的无限个值。每个取值都有一个与之相关的概率,这些概率的总和为 1。
离散概率分布通过列出每个可能的结果及其对应的概率,来描述随机变量的行为。常见的离散概率分布包括伯努利分布、二项分布、泊松分布、几何分布等。
#### 二项分布
二项分布是一种离散概率分布,用于描述在固定次数的独立试验中,每次试验的结果只有两种可能(通常称为“成功”和“失败”)时,成功次数的概率分布。。
假设我们进行 n 次独立的试验,每次试验的成功概率为 p,则二项分布给出了k次成功的概率(0 ≤ k ≤ n)。该概率的公式为:
$$
P(X = k) = \binom{n}{k} p^k (1 - p)^{n-k}
$$
#### 伯努利分布
伯努利分布是最简单的离散概率分布之一,它描述了一个二项试验(只有两种可能结果:成功或失败)的单次试验结果。
伯努利分布用于描述一个随机变量 X,其值只有两种可能:0 或 1,表示“失败”或“成功”。具体来说,如果 X=1 表示成功,则 X = 0 表示失败。
成功的概率为 p(0≤p≤1)。
失败的概率为 1 - p。
#### 泊松分布
泊松分布是一种离散概率分布,用于描述在单位时间或单位面积等范围内,某个事件发生的次数,且这些事件发生的概率是独立且均匀分布的。
泊松分布广泛应用于描述随机事件发生的次数,特别是当这些事件发生的平均频率已知时,如交通事故、电话呼叫、系统故障等。
$$
P(X=k)=\frac{\lambda^{k} e^{-\lambda}}{k!}
$$
#### FLDR算法
FLDR(Fast Loaded Dice Roller)算法的核心思想是将离散概率分布转化为一个累积概率表,并通过此表进行有效的采样。其主要优势在于,算法能够在 O(1) 的时间复杂度内进行采样,从而比直接使用传统的方式(如重复的概率计算)更为高效。
FLDR算法使用分为两步:
首先定义采样的分布,这属于预处理,对任何分布只需要做一次即可,然后就是对分布进行采样。
我们使用之前的小浣熊图片检验FLDR算法。下图是小浣熊图片灰度值分布(实线),与FLDR算法生成的分布的对比(虚线)
### 连续性概率分布
连续性概率分布是用于描述连续型随机变量的概率分布。与离散型随机变量不同,连续型随机变量的取值可以是一个区间内的任意实数,因此其取值的可能性是无限的。
对于连续型随机变量,其概率并不是指某一个具体取值的概率,而是指该随机变量落在某个区间内的概率。概率密度函数(PDF)是描述连续型随机变量概率分布的工具。
**几种常见的连续性概率分布**
### 中心极限定理
中心极限定理描述了大样本下样本均值的分布特性。无论原始数据的分布形式如何,只要样本容量足够大,样本均值的分布趋近于正态分布。
对于任意分布,如果对其采样得到一个有N个样本构成的样本集,则可以计算这个样本集的均值,然后重复这个过程多次,得到多个大小为N的样本集,其中每个样本集都有自己的均值,这些均值的分布趋近于正态分布。
下图是B(5,2)分布采样后的结果。
### 大数法则
大数法则描述了当独立同分布的随机变量数量增加时,样本均值与总体均值之间的关系。当样本容量趋于无穷大时,样本均值会几乎确定地趋近于总体均值。
下图展示为对均值为1的正态分布采样后,样本的均值关于样本量的变换曲线。,随着样本量增大,样本均值趋于总体均值。
## 贝叶斯定理
贝叶斯定理的公式为:
$$
P(A | B) = \frac{P(B | A) P(A)}{P(B)}
$$
各个符号的含义:
P(A∣B) 是后验概率,即在事件 B 发生的条件下,事件 A 发生的概率。
P(B∣A) 是似然度,即在事件 A 发生的情况下,事件 B 发生的概率。
P(A) 是先验概率,即事件 A 发生的初始概率,通常是我们在没有新证据时对 A 的估计。
P(B)是边际概率,即事件 B 发生的总概率,它可以通过全概率公式计算,表示所有可能情况下 B 发生的概率。
### 乳腺癌的例子
在是否患有癌症章节我们通过具体的例子进行计算,现在我们通过贝叶斯定理计算。
我们要求解的条件概率是:在乳房X光检查结果为阳性的情况下,40岁女性患乳腺癌的概率,记为 P(bc+∣+) ,bc+为患乳腺癌,+为阳性。
根据贝叶斯定理:
$$
P(bc+∣+)=\frac{P(+ |bc+)P(bc+)}{P(+)}
$$
其中,P(+) 是检查结果为阳性的总概率,可以通过全概率公式计算:
P(+) = P(+ |bc+) P(bc+) + P(+ |bc-) P(bc-)
其中, P(bc-) = 1 - P(bc+) 是没有乳腺癌的概率。
P(bc+∣+)= (0.9 x 0.008)/(0.9 x 0.008 + 0.07 x 0.992) ≈ 0.094
所以在乳房X光检查结果为阳性的情况下,40岁女性患乳腺癌的概率大约是 9%。
### 更新先验
如果一位女士拿到阳性结果,再换一家医院再做一次X光检验,并重新找一位医生解读,此时他患有乳腺癌的概率是多少呢?
在贝叶斯看来,此时需要用到第一次计算的 P(bc+∣+)作为新的先验概率 P(bc+)。
P(bc+∣+) = (P(+ |bc+)P(bc+))/P(+) = (0.9 x 0.094)/(0.9 x 0.094 + 0.07 x 0.906) ≈ 0.572
此时更有理由相信这位女士患有乳腺癌。
### 机器学习中的贝叶斯定理
在机器学习中,贝叶斯定理主要用于通过数据来更新我们的信念。它允许我们基于先验知识(先验概率)和观察到的数据(似然函数)来调整和计算后验概率。
**朴素贝叶斯分类器(Naive Bayes)**是贝叶斯定理在机器学习中的一种经典应用。它用于基于条件概率对样本进行分类,假设特征之间是独立的(这就是“朴素”的原因)。
假设有一个分类问题,目标是根据特征 \( X = (x_1, x_2, ..., x_n) \) 来预测类别 \( C \)。根据贝叶斯定理,类别 \( C \) 的后验概率为:
P(C | X) = (P(X | C) P(C))/P(X)
- \( P(C | X) \) 是类别 \( C \) 给定特征 \( X \) 的后验概率,表示样本属于类别 \( C \) 的概率。
- \( P(X | C) \) 是似然概率,表示在类别 \( C \) 下,样本特征 \( X \) 出现的概率。
- \( P(C) \) 是类别 \( C \) 的先验概率,表示在没有观察到特征 \( X \) 时,样本属于类别 \( C \) 的概率。
- \( P(X) \) 是边际概率,表示样本特征 \( X \) 出现的总概率(通常可以忽略,因为它对于所有类别都是常数)。
**假设特征条件独立**
朴素贝叶斯的关键假设是“特征条件独立性假设”,即假设给定类别 \( C \) 后,特征 \( x_1, x_2, ..., x_n \) 之间相互独立。这样,似然 \( P(X | C) \) 可以简化为:
P(X | C) = P(x_1 | C) P(x_2 | C) * P(x_n | C)
因此,后验概率 \( P(C | X) \) 可以表示为:
$$
P(C | X) ∝ P(C) ∏_{i=1}^n P(x_i | C)
$$
这使得计算变得非常简单,因为我们只需要计算每个特征 \( x_i \) 在给定类别 \( C \) 下的条件概率,然后将它们相乘,最后选择使得后验概率最大的类别作为预测结果。
# 后记
本来这篇文章应该上个周末发布的,一直拖到现在才大概完成,28号先发布一个草稿版,争取在30号前把剩余内容补充完整。
中间有一次写好一大半,但是没有保存好,刷新之后只能从头开始X﹏X。这两周事情也有点多,慢慢就拖到现在。因为写的时候公式在预览模式下不正常,不知道正式发布后会怎么样,所以先发布一个草稿版,看看效果,还有一些插图,代码也没有补充。
感觉每次的写的内容有点多,可有有点脱离阅读分享这个主题了,下次更新还是着重谈谈感受和代码内容,对书籍的一些概念内容就不多做展述了,不然篇幅过长,而且花费时间也会过多。
目前书籍已经读到第六章,读后分享的进度差太多,下次更新做些调整,慢慢赶上进度。
文中所有代码在附件中可查看。