「Python数据分析系列」6. 概率论基础介绍

来源 |  Data Science from Scratch, Second Edition

作者 | Joel Grus

译者 | cloverErna

校对 | gongyouliu

编辑 | auroral-L

全文共4458字,预计阅读时间30分钟。

第六章  概率论基础介绍

6.1  独立和不独立

6.2  条件概率

6.3  贝叶斯定理

6.4  随机变量

6.5  连续分布

6.6  正态分布

6.7  中心极限定理

6.8  延伸学习

概率法则大致上是真实的,但某些时候会很荒谬。

——爱德华 • 吉本

如果对概率论(probability )和相关的数学原理理解得不够多,从事数据科学工作就极其困难。类似于本书第 5 章《统计学基础介绍》讲解统计学的方式,我们在本章粗略地讲解一下概率论,基本上不对细节做深入探讨。

 

为了达到我们的目的,你得把概率论视为对从事件空间(universe )中抽取的事件的不确定性进行量化的一种方式。我们暂且不探究术语的技术内涵,而是用掷骰子的例子来理解它们。空间是指所有可能的结果的集合。这些结果的任何一部分就是一个事件,比如,“骰子掷出的点数为 1”“骰子掷出的点数是偶数”等都是事件。

 

我们用 P(E) 来标记“事件 E 的概率”。

 

我们接下来用概率理论构建模型,并用概率理论计算模型。概率理论无处不在。

只要你感兴趣,可以深入挖掘概率理论蕴含的哲学原理(边喝啤酒边研究就更好了)。但本书中我们不深入研究。

 

6.1 不独立和独立

泛泛地讲,如果 E 发生意味着 F 发生(或者 F 发生意味着 E 发生),我们就称事件 E 与事件 F 为不相互独立(dependent)。反之,E 与 F 就相互独立(independent)。 

 

举个例子,如果两次掷起一枚均匀的硬币,那么我们无法根据第一次掷硬币的结果是否是正面朝上来判断第二次的结果是否正面朝上。第一次掷硬币的结果和第二次掷硬币的结果,这两个事件就是独立的。相反,如果第一次掷硬币的结果是正面朝上,那么我们能很明显能判断出两次掷硬币是否都是反面朝上。(如果第一次掷硬币的结果是正面朝上,那么很明显两次掷硬币的结果不可能都是反面朝上。)因此,第一次结果正面朝上和两次结果不可能都是反面朝上,这两个事件就是不独立的。

 

从数学角度讲,事件 E 和事件 F 独立意味着两个事件同时发生的概率等于它们分别发生的概率的乘积:

 

在上例中,“第一次掷硬币正面朝上”的概率为 1/2,“两次掷硬币都是背面朝上”的概率为 1/4,但“第一次掷硬币正面朝上并且两次掷硬币都是背面朝上”的概率为 0。

 

6.2 条件概率

 

如果事件 E 与事件 F 独立,那么定义式如下:

 

如果两者不一定独立(并且 F 的概率不为零),那么 E 关于 F 的条件概率式如下:

 

条件概率可以理解为,已知 F 发生,E 会发生的概率。

 

更常用的公式是上式的变形:

 

如果 E 和 F 独立,则上式应该表示为:

 

这个数学公式意味着,F 是否发生并不会影响 E 是否发生的概率。

 

举一个常见的关于一个有两个孩子(性别未知)的家庭的有趣例子。

如果我们假设:

(1) 每个孩子是男孩和是女孩的概率相同

(2) 第二个孩子的性别概率与第一个孩子的性别概率独立

 

那么,事件“没有女孩”的概率是 1/4,事件“一个男孩,一个女孩”的概率为 1/2,事件“两个女孩”的概率为 1/4。

 

现在,我们的问题是,事件 B“两个孩子都是女孩”关于事件 G“大孩子是女孩”的条件概率是多少?用条件概率的定义式进行计算如下:

 

事件 B 与 G 的交集(“两个孩子都是女孩并且大孩子是女孩”)刚好是事件 B 本身。(一旦你知道两个孩子都是女孩,那大孩子必然是女孩。)

 

这个结果大致上符合你的直觉。

 

我们接着再问,事件“两个孩子都是女孩”关于事件“至少一个孩子是女孩”(L)的条件概率是多少?出乎意料的是,结果异于前问。

 

与前问相同的是,事件 B 和事件 L 的交集(“两个孩子都是女孩,并且至少一个孩子是女孩”)刚好是事件 B。这意味着:

 

为什么会有这样的结果?如果你已知至少一个孩子是女孩,那么这个家庭有一个男孩和一个女孩的概率是有两个女孩的两倍。 

 

我们可以通过“生成”许多家庭来验证这个结论:

 

 

6.3 贝叶斯定理

贝叶斯定理是数据科学家的最佳朋友之一,它是条件概率的某种逆运算。假设我们需要计算事件 E 基于已发生的事件 F 的条件概率,但我们已知的条件仅仅是事件 F 基于已发生的事件 E 的条件概率。两次利用条件概率的定义,可以得到下式:

 

事件 F 可以分割为两个互不重合的事件“F 和 E 同时发生”与“F 发生 E 不发生”。我们 用符号 JE 指代“非 E”(即“E 没有发生”),有下式:

 

因此:

 

上式为贝叶斯定理常用的表达方式。

贝叶斯定理常常用来证明为什么数据科学家比医生更聪明。假设有这样一种病,10 000 个人中会有一个得这个病。还假设有种针对该病的测试,具有 99% 的可能性能给出正确判断(如果患病,测试显示“有病”,如果健康,则显示“无病”)。

 

阳性的测试结果意味着什么呢?我们用 T 表示“测试结果阳性”,用 D 表示“你患有该病”。那么,根据贝叶斯定理,如果测试结果为阳性,那么你患有该病的概率是:

 

 

我们知道,P(T |D),即一个人测试结果为阳性并且本人实际患病的概率为 0.99。P(D),即

一个人实际患病的概率是 1/10 000=0.0001 。P(T |JD),即一个不患病的人检测结果呈阳性的概率是 0.01 。P(JD),即一个人实际上不患该病的概率为 0.9999 。如果将以上数据代入贝叶斯定理,可得:

人结果表示,测试结果为阳性的实际患病的概率不到 1%。

 

注意

我们实际上假设了人们接受测试的概率或多或少都是随机的。如果只有表现出特定症状的人才会去接受测试,我们应该将表达式重新表达为基于事件“测试结果正常,并且表现出症状”的条件概率,这样计算出的结果会增高很多。

 

一个更直观的计算方式是,首先假设总体包括 1 百万个人。你预期其中 100 个人患有该病,而这 100 个人中会有 99 个测试结果显示阳性。另一方面,你认为 999 900 个人不患有该病,其中 9999 个人测试结果呈阳性。这意味着在(99+9999)个测试结果呈阳性的人中,你认为仅有 99 个人实际上患有该病。

 

6.4 随机变量

随机变量指这样一种变量,其可能的取值服从某种概率分布。定义一个简单的随机变量:掷起一枚硬币,如果正面朝上,随机变量等于 1,如果背面朝上,随机变量等于 0。

可以再定义更复杂些的随机变量,如掷起一枚硬币 10 次,查看正面朝上的次数,或者从range(10) 取出的一个值,每个数值被取到的可能性都相等。 

 

概率分布对变量取每种可能值都赋予了概率。通过掷硬币得到的随机变量等于 0 的概率为 0.5,等于 1 的概率也为 0.5。从 range(10) 中生成随机变量的分布为从 0 到 9 之间的每个数值赋予 0.1 的概率。

 

我们有时会讨论一个随机变量的期望值,表示这个随机变量可能值的概率加权值。掷硬币随机变量的期望值为 1/2(=0 * 1/2 + 1 * 1/2),而 range(10) 随机变量的期望值为 4.5。

 

随机变量也可以基于某些条件事件产生,就像其他事件一样。回忆 6.2 节“条件概率”中提到的双生子例子:如果 X 是表示女孩个数的随机变量,那么 X 等于 0 的概率为 1/4 ,等于 1 的概率为 1/2 ,等于 2 的概率为 1/4。

 

在已知至少一个孩子是女孩后,接着再定义一个新的随机变量 Y,表示基于这个条件的女孩的个数。Y 等于 1 的概率为 2/3,等于 2 的概率为 1/3 。还定义另一个新的随机变量 Z,表示基于大孩子是女孩的条件之上的女孩的个数,Z 等于 1 的概率为 1/2 ,等于 2 的概率为 1/2。 

 

大部分情况下,我们会隐式使用随机变量的概念,即在使用时,并没有对此加以特别关注。如果仔细思考,可以看出其中的端倪。

 

6.5 连续分布

掷硬币对应的是离散分布(discrete distribution)——对离散的结果赋予正概率。我们常常希望对连续结果的分布进行建模。(对于我们的研究目的来说,这些结果最好都是实数,但实际中并不总是这样的)例如,均匀分布(uniform distribution)函数对 0 到 1 之间的所有值都赋予相同的权重(weight)。 

 

因为 0 和 1 之间有无数个数字,因而对每个点而言,赋予的权重几乎是零。因此,我们用概率密度函数(probability density function,pdf)来表示连续分布,一个变量位于某个区间的概率等于概率密度函数在这个区间上的积分。

 

注意

如果积分运算不直观,有一种更简单的理解方式:一个分布的密度函数为 f, 如果 h 很小,则变量的值落在 x 与 x + h 之间的概率接近 h* f(x)。

 

均匀分布的密度函数如下:

 

如你预期的,一个服从均匀分布的随机变量落在 0.2 和 0.3 之间的概率为 1/10。在 Python 中,random.random() 是按均匀分布生成的伪随机数的函数。 

 

我们还常常对累积分布函数(cumulative distribution function,cdf)感兴趣,这个函数给出了一个随机变量小于等于某一特定值的概率。生成均匀分布的累积分布函数不难(见图 6-1):

 

图 6-1:均匀分布的累积分布函数

6.6 正态分布

正态分布是分布之王!它是典型的钟型曲线形态分布函数,可以完全由两个参数决定:均值 μ(mu)和标准差 σ(sigma)。均值描述钟型曲线的中心,标准差描述曲线有多“宽”。

正态分布的分布函数如下:

 

 

我们可以这样实现:

 

在图6-2中,我们绘制了其中的一些PDF,以查看它们的外观:

 

 

 

图6-2 各种普通PDF

如果 μ=0 并且σ=1,这个分布称为标准正态分布。如果 Z 是服从标准正态分布的随机变量,则有如下转换式:

 

 

其中 X 也是正态分布,但均值是 μ,标准差是σ。相反,如果 X 是均值为 μ 标准差为σ 的

正态分布,那么:

 

 

是标准正态分布的随机变量。

 

标准正态分布的累积分布函数无法用“基本”的解析形式表示,但在 Python 中可以用函数math.erf 描述:

 

 

我们再绘出一系列正态分布的累积分布函数(如图 6-3):

 

 

图 6-3:多个正态分布的累积分布函数

 

我们有时会需要对 normal_cdf 取逆,从而可以求出特定的概率的相应值。不存在计算逆函数的简便方法,但由于 normal_cdf 连续且严格递增,因而我们可以使用二分查(https://en.wikipedia.org/wiki/Binary_search_algorithm)的方法:

 

 

 

这个函数反复分割区间,直到分割到一个足够接近于期望概率的精细的 Z 值。

 

6.7 中心极限定理

正态分布的运用如此广泛,很大程度上归功于中心极限定理(central limit theorem)。这个定理说,一个定义为大量独立同分布的随机变量的均值的随机变量本身就是接近于正态分布的。 

 

特别地,如果 x1,…,xn 都是均值为 μ、标准差为σ 的随机变量,且 n 很大,那么:

 

近似正态分布,且均值为 μ,标准差为。等价于(其实更常用):

 

上式近似正态分布,均值为 0 ,标准差为 1。

 

举一个易于理解的验证例子——带有 n 和 p 两个参数的二项式随机变量。一个二项式随机变量 Binonimal(n,p) 是 n 个独立伯努利随机变量 Bernoulli(p) 之和,每个伯努利随机变量等于 1 的概率是 p,等于 0 的概率是 1-p:

 

每个伯努利随机变量 Bernoulli(p) 的均值为 p,标准差为。根据中心极限定理,当 n 变得很大,一个二项式随机变量 Binonimal(n,p) 近似于一个正态分布的随机变量,其中均值为 μ=np,标准差为。如果把两个分布都在图上绘出来,很容易看出相似性:

 

比如,若调用函数 make_hist(0.75, 100, 10000),可以得到图 6-4 中的图。

 

 

图 6-4:make_hist 的结果

近似表达的意义在于,如果你想知道掷起一枚均匀的硬币 100 次中正面朝上超过 60 次的概率,那么可以用一个正态分布 Normal(50, 5) 的随机变量大于 60 的概率来估计。这比计算二项式分布 Binonimal(100, 0.5) 的累积分布函数更容易(尽管在大多数应用中,你可以借助统计软件方便地计算出任何你想要的概率)。

 

6.8 延伸学习

 

• scipy.stats包括绝大多数常见概率分布的概率密度函数和累积分布函数。

• 在第 5 章末我曾建议读者学习统计学教材,同样,这里我也建议读者学习概率论教材。我所知道的最好的在线教材是 Introduction to Probability,Charles M.Grinstead和J.Laurie Snell(美国数学学会)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据与智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值