UCB-Prob140-面向数据科学的概率论-全-
UCB Prob140:面向数据科学的概率论(全)
一、基础
原文:prob140/textbook/notebooks/ch01
译者:飞龙
自豪地采用谷歌翻译
究竟是什么概率,一直是有争议的辩论主题。有些人认为概率是长期的频率,只适用于在相同条件下可能反复发生的事件。其他人则认为概率量化了个体对任何事件的不确定性的主观程度,并且可能因人而异。还有一些人并不严格属于这些分组。
概率含义的争论使伟大的概率论者吉米·萨维奇(Jimmie Savage,1917-1971)观察到“自从巴别塔以来很少有这种完全的分歧和争论。”
现在,频率论者和主观主义者之间的分歧,并不像以前那么广泛。在 Prob140 中,对于概率的含义,欢迎你自己做出决定。
无论哲学上的争论如何,概率的基本组合方式都可以通过考虑比例来理解。这就是我们将在前两章中探讨的内容。我们先来介绍一些概率论的标准术语。
结果空间和事件
任何涉及随机性的实验都会产生许多可能的结果之一。结果空间是所有这些结果的集合。
形式上,结果空间只是一个集合,通常用Ω表示。这是大写的希腊字母 Omega。
现在我们将假设Ω是有限的。从某种意义上说,这不是限制性的,因为即使是最大的数据集也是有限的,而且功能最强大的计算机每个任务都执行许多有限操作。但是,我们很快就会看到,允许无限的可能结果,不仅会产生丰富而优雅的理论,而且会让我们更深入地了解涉及有限结果空间的问题。因此,一旦我们理清了有限的情况,那么Ω是有限的假设将在后面的章节中被解除。
结果ω是结果空间Ω的一个元素。虽然ω看起来像字母w,但它是小写的希腊 omega,通常比w更圆润。
事件是Ω的一个子集。允许空集φ和整个空间Ω作为子集。按照惯例,像A和B这样的前面几个字母通常用作事件的符号。
示例一:排列
假设你正在对三张牌洗牌,分别是a,b和c。 那么所有可能的结果空间是:

事件{abc, acb}可以被描述为“首先出现a”。 通过将事件定义为子集,事件的这种口头描述变得正式。这是发展精确而一致的理论的第一步,同时也应用于自然语言中。
| 事件 | 口头描述 | 子集 |
|---|---|---|
A |
a首先出现 |
{abc, acb} |
B |
b和c不挨着 |
{bac, cab} |
C |
字母是字母表中的顺序 | {abc} |
D |
a首先出现,b其次,但是c不是第三个 |
ϕ |
E |
c是第一个,第二个或者第三个 |
Ω |
F |
字母来自于表示"taxi"的单词 |
{cab} |
“类型”的注解:结果ω = cab与事件F = {cab}不同。结果是结果空间的一部分,事件是结果空间的一个子集。 这个子集碰巧只包含一个结果,但它仍然是一个子集,而不是一个元素。 你可以把它看作类似 Python 中的不同类型:'cab'是一个字符串,而['cab']是一个列表。
该表包含六个事件,你可以想出更多。 对于每一个,看看你是否可以提供一个有趣的口头描述。
当你为游戏洗牌时,目标是使牌的顺序变得“随机”。 最好是,你希望任何排列与其他排列可能性相同。 那么让我们开始研究等可能的结果。
等可能结果
“如果投掷一枚硬币,那么它是正面的几率是多少呢?”提出这个问题,你会得到的最常见的答案是 1/2。如果你询问理由,没有意外会听到,“因为硬币有两面。”一枚硬币确实有两面,但是注意到一个隐藏在你所得到的“推理”中的假设:两面中的每一面都与另一面相同。
等可能的结果的假设是一种简单而古老的随机性模型。它将概率定义为比例。Ω是有限的假设,使得易于将比例识别为结果总数的一小部分。
对于一些n>1,令Ω包含n个结果。让A ⊆ Ω成为一个事件。将#(A)定义为子集A中结果的数量。因此,对于任何其他事件,#(Ω )= n,#(φ) = 0,并且0 < #(A) < n。
对于事件A,设P(A)表示 A发生的概率或几率。我们将同义地使用“probability”和“chance”两个词(翻译为“概率”或“几率”),并且我们通常会使用“happens”而不是更正式的“occurs”(都翻译为“发生”)。
等可能的结果空间中的概率
假设Ω中的所有n个结果是等可能的,则事件A发生的概率由下式定义:

这种概率是比例的想法是许多计算的核心。 你将会看到,比例的组合规则成为概率的组合规则,无论所有结果是否是等可能的。 但是现在我们将在结果可能性相同的自然假设下开展工作。
示例一:随机排列
设Ω是字母a,b和c的所有排列的空间。 那么Ω包含n = 6个结果:

如果我们假设所有六种排列是等可能的,我们着手于三个字母的随机排列。 在这个假设下,我们可以用一列几率来扩展我们的事件表。
| 事件 | 口头描述 | 子集 | 概率 |
|---|---|---|---|
A |
a首先出现 |
{abc, acb} |
2/6 = 1/3 |
B |
b和c不挨着 |
{bac, cab} |
1/3 |
C |
字母是字母表中的顺序 | {abc} |
1/6 |
D |
a首先出现,b其次,但是c不是第三个 |
ϕ |
0 |
E |
c是第一个,第二个或者第三个 |
Ω |
1 |
F |
字母来自于表示"taxi"的单词 |
{cab} |
1/6 |
要注意:

因此,所有排列等可能的假设,使得所有三个位置是等可能的。你应该检查b和c的位置也是如此。
示例二:随机数生成
假设一个随机数生成器从00,01,02,...,98,99的 100 个偶对 中返回一对数字,使得所有偶对等可能返回。
你会注意到这些偶对与 0 到 99 的 100 个整数相对应。在下面的内容中,乘法法则会很有用:
第一个数字有 10 个选项:0,1,2,3,4,5,6,7,8,9。
对应于第一位数字的每个选择,第二位数字有 10 个选择。
所以总共有10×10 = 100对数字。
这里“偶对”是两个数字的序列,一个接一个。偶对 27 与 72 不同。它们有时称为“有序对”。在本文中,所有序列都是有序的。
现在我们来计算一些事件的概率。通过假设,所有偶对都是等可能的。因此,每个答案将包括计算事件中的偶对数量,然后除以总数,即 100。
(1)偶对由两个不同的数字组成的概率是多少?
我们必须计算a ≠ b的偶对ab的数量。数字a可以按 10 种方式选择;对于每种方式,只有 9 种方法用于选择b,因为b必须与a不同。所以答案是:

(2)两个数字相同的几率是多少?
让我们尝试使用我们对(1)的回答。 在 100 对中的每一对中,两个数字相同或不同。 没有一对可以属于两个类别,所以按照我们的比例规则:

为了通过计数来检查这一点,你必须统计aa形式的偶对。 有 10 种方法可供选择,之后就没有更多的选择了。 所以答案是10/100 = 0.1,证实了以上我们的计算。
散列中的碰撞
在计算机科学中,散列函数将一个称为散列值的代码分配给一组个体中的每一个。为每个个体分配一个独特的值是很重要的。如果相同的值分配给了两个个体,则会发生碰撞,这会产生认证问题。然而,跟踪哪些散列值已分配或未分配是很麻烦的,因为散列值和个体的数量可能非常大。
如果散列值只是随机分配,而并不考虑哪些已经分配了呢?如果存在大量不同的值和相对较少的个体,那么认为碰撞的可能性很小,似乎是合理的。例如,如果有 1,000 个可用的散列值并且只有 5 个个体,那么如果你为这 5 个个体选择了 5 个值的随机序列,则似乎不太可能会发生冲突。
让我们对随机性做一些假设,找出没有碰撞的概率。假设有N个散列值和n个个体,并且假设你的散列函数是这样的,那么对个体的所有
个赋值都是等可能的。赋值是序列
,其中,对于每个i,将散列值
分配给个体i。
请注意,我们假定n个个体中的每一个,都可以被分配N个值中的任何一个,而不管分配给其他人的是什么。这包括了不幸的概率,所有n个个体被赋予相同值。
无碰撞
无碰撞的概率是什么?
如果个体数量n大于散列值N的数量,则答案为 0。如果个体数量多于个人数量,那么你将不得不重复使用某些值,因此无法避免碰撞。
但是我们对n很小的情况感兴趣,所以假设n ≤ N,我们没有问题。
如果回顾前一部分中,随机数生成器的例子中的第(1)部分,你会发现,在N = 10且n = 2的情况下,它与我们当前的问题相同。 我们可以按照相同的流程来获得我们的答案。
根据假设,所有
个可能的赋值都是等可能的。其中一些赋值不包含碰撞。我们的工作是统计它有多少。
你熟悉 Python 的从 0 开始的索引系统,它在这里派上用场。 我们必须计算序列
的数量,其中每个
是 N 个哈希值之一,并且所有
都彼此不同。
有N个选项。- 对于每一种选择,
都有N-1个选项,因为
必须与
不同。 - 因此,有
N(N-1)种方式填充位置 0 和 1 而避免碰撞。 - 对于这些选择
和
的N(N-1)种方法,
有N-2个选择。 这是因为
必须不同于彼此不同的
和
。 - 因此,有
N(N-1)(N-2)种填充位置 0, 1 和 2 的方式。 - 请注意,对于每个
i,与位置i对应的乘积中的项是N-i。这使序列容易延续到最后,即位置(n-1)。

“延续序列”是一个需要数学证明的非正式过程。 你可以通过归纳法来证明。
分子中的乘积有n项,分母中有n个因子。 这使我们可以用不同的方式编写公式,作为n个分数的乘积:

符号
表示求积,就像
表示求和。
现在是坏消息了:
至少一个碰撞
每个序列要么至少有一次碰撞,要么没有碰撞。 没有序列可以位于这两个类别中,所以按照我们的比例规则:

我们有了公式。这很棒!但是答案很大,还是很小?仅通过观察公式不容易分辨。那么让我们以不同的方式开始检验答案。
第一种方法是数字。为此,我们必须处理N和n的数值。我们在一个背景中会实现它,这个背景让这个计算变得著名。
生日问题
一个经典的概率问题是生日的“碰撞”。这个生日问题由理查德·冯·米塞斯和其他数学家提出 - 它的起源并不完善。主要问题是,“如果一个房间里有n个人,那么他们中的一些人有相同的生日的几率是多少?”
随机性假设
这个问题通常在每年 365 天的假设下得到解决,并且无论其他人的生日如何,每个人都有可能在 365 天中的任何一天出生。
你可以看到,这些假设忽略了闰年以及多胎(例如双胞胎)以及一年中出生分布不均匀的情况。这些假设使得计算更简单,但可能并不能反映人口中的生日的实际情况。数据科学家必须小心他们的假设 - 如果假设没有反映真相,那么结论也不会。
所以让我们注意,我们正在根据简化的假设进行工作,在对特定的群体做出结论之前我们应该检查一下。在任何情况下,忽略闰年和多胎都不应对结论产生重大影响。如果在一年中的某些时候,出生比其他时候更可能发生,那么就证明了生日相同的几率将大于我们在假设下得到的答案。
生日问题有很多变化,但我们会专注于经典问题。
匹配的概率
我们将简洁地陈述我们的假设,因为“所有
个生日序列是等可能的”。 你可以看到,这使得生日问题与上一节的碰撞问题相同,其中N = 365。 如前所述,唯一有趣的情况是当n ≤ N时,为此:

计算几率
当N固定在 365 时,函数p_no_match以n为参数并返回在n个生日之中不存在匹配的概率。
代码的其余部分在一个表中显示所有结果。该表还包含一列,包含存在碰撞的几率:

N = 365
def p_no_match(n):
individuals_array = np.arange(n)
return np.prod( (N - individuals_array)/N )
results = Table().with_column('Trials', np.arange(1, N+1, 1))
different = results.apply(p_no_match, 'Trials')
results = results.with_columns(
'P(all different)', different,
'P(at least one match)', 1 - different
)
results
| Trials | P(all different) | P(at least one match) |
|---|---|---|
| 1 | 1 | 0 |
| 2 | 0.99726 | 0.00273973 |
| 3 | 0.991796 | 0.00820417 |
| 4 | 0.983644 | 0.0163559 |
| 5 | 0.972864 | 0.0271356 |
| 6 | 0.959538 | 0.0404625 |
| 7 | 0.943764 | 0.0562357 |
| 8 | 0.925665 | 0.0743353 |
| 9 | 0.905376 | 0.0946238 |
| 10 | 0.883052 | 0.116948 |
... (355 rows omitted)
表中首先要注意的是,使用标签Trials来表示人。在概率中,通常将随机试验看作是试验序列,其中每个试验的结果取决于旅几率。 在生日问题中,每个人都被认为是一个试验,我们正在研究所有试验中是否至少有一对匹配的生日。
接下来,请注意,在只有一个人的无聊情况下,不能存在一对匹配的生日,因此P(no match)定义为 1。在许多问题中存在这样的“边界情况”,必须单独处理。
最后,请注意,当人数很少时,他们生日不同的几率很大。这与我们的直觉是一致的,即如果个体数量相对于可用散列值的数量较小,并且随机给个人赋值,那么碰撞的几率很小。
生日“悖论”
但是碰撞几率随人数增加而增加。实际上,它增加得很快。
results.scatter('Trials', 'P(at least one match)')
plt.xlim(0, N/3)
plt.ylim(0, 1);

你可以看到,如果有超过 50 人,那么生日相同的几率就接近 1。
为了使碰撞几率超过 50%,必须有多少人? 让我们看看我们能否找到这种情况发生的最少人数。
results.where('P(at least one match)', are.between(0.5, 0.51))
| Trials | P(all different) | P(at least one match) |
|---|---|---|
| 23 | 0.492703 | 0.507297 |
仅仅是 23 人,碰撞的可能性就大于不碰撞。 这让那些没有做计算的人感到惊讶,因此被称为生日悖论。 但事实上,它根本就没有任何矛盾或矛盾之处。 这与生日相同几率随着人数的增加而增长的方式有关。
我们已经完成了N = 365的计算,但如果 N 是其他数字,函数的增长有多快? 如果我们要在生日以外的案例中应用我们的结果,我们需要知道它。
为了解决这个问题,我们可以重新编写各种不同N值的代码,并查看输出告诉我们的这些值的结果。 但是使用数学更加高效和富有洞察力,这是我们将在下一节中做的事情。
指数近似
本节的目标是,了解当有N个散列值且N大于n时,至少有一次碰撞的几率,如何表现为个体数n的函数。
我们知道几率是:

虽然这给出了准确的几率公式,但它并不能让我们了解函数如何增长。让我们看看我们是否可以开发一个近似值,它的形式更简单,因此更容易学习。
近似中的主要步骤将在本课程中重复使用,因此我们将在这里详细介绍它们。
步骤 1:仅仅近似需要近似的项
虽然这看起来很明显,但值得注意的是,它可以节省大量不必要的操作。 我们正在尝试近似:

所以我们需要近似的所有东西,就是:

最后我们可以将 1 减去近似值。
换句话说,我们将近似P(no collision)。
步骤 2:使用对数将乘法变成加法
我们的公式是乘法,但使用加法要好得多。 对数函数可帮助我们将乘积变成和:

一旦我们有了log(P(no collision))的近似值,我们就可以使用指数将其转换为我们想要的近似值,即P(no collision)。
步骤 3:使用对数的性质
这通常是主要计算的步骤。 请记住对于较小的x,
,其中符号
表示当x变为 0 时,双方的比例变为 1。对于较大的x,近似值可能不是很好,但无论如何让我们尝试一下。

根据前n-1个正整数的和的公式。
步骤 4:按需转换来完成近似
艰苦的工作已经完成,现在我们只需要清理干净。 第 3 步给了我们:

对两边取指数,我们得到:

最后:

现在你可以看到,作为人数的函数,为什么P(at least one collision)迅速上升。 记住N是固定的,n在 1 和N之间变化。随着 n 增加,(n-1)n快速增加,基本上类似n^2。 所以-n2 / 2N快速下降,使得
迅速下降;这让
飞了起来。
值得注意的是,在整个计算中只有一个近似值:它在步骤 3 的中间,我们使用ln(1 + x) ~ x表示较小的x。我们会在课程中多次遇到这个近似值。
近似值有多好
为了查看指数近似值与确切概率的相比如何,让我们在生日的背景下开展工作;如果你更喜欢不同的配置,你可以在代码中更改N。
为了查看整个步骤序列,我们将重新进行精确计算并用一列近似值扩展它们。 我们将使用上述两者的更精细的近似。
N = 365
def p_no_match(n):
individuals_array = np.arange(n)
return np.prod((N - individuals_array)/N)
trials = np.arange(1, N+1, 1)
results = Table().with_column('Trials', trials)
different = results.apply(p_no_match, 'Trials')
results = results.with_columns(
'P(at least one match)', 1 - different,
'Exponential Approximation', 1 - np.e**( -(trials - 1)*trials/(2*N) )
)
results
| Trials | P(at least one match) | Exponential Approximation |
|---|---|---|
| 1 | 0 | 0 |
| 2 | 0.00273973 | 0.00273598 |
| 3 | 0.00820417 | 0.00818549 |
| 4 | 0.0163559 | 0.016304 |
| 5 | 0.0271356 | 0.0270254 |
| 6 | 0.0404625 | 0.0402629 |
| 7 | 0.0562357 | 0.0559104 |
| 8 | 0.0743353 | 0.0738438 |
| 9 | 0.0946238 | 0.0939222 |
| 10 | 0.116948 | 0.115991 |
... (355 rows omitted)
前 10 个近似值看起来不错。 让我们来看看更多。
results.scatter('Trials')
plt.xlim(0, N/3)
plt.ylim(0, 1);

在这张图的尺度上,蓝点(精确值)与金点(我们的指数近似值)几乎没有区别。 你可以再次运行代码,使用不精确的近似法,它将(n-1)n替换为n^2,并看到近似值仍然很好。
我们从近似的第二种形式中学到,n个指定值中至少有一次碰撞的几率,大致是
,其中c是正的常数。
当我们稍后在课程中研究瑞利(Rayleigh)分布时,我们将再次遇到函数
。
十、马尔科夫链
原文:prob140/textbook/notebooks/ch_10
译者:喵十八
自豪地采用谷歌翻译
术语说明
条件概率分布(Conditional Probability Distribution,或者条件分布,Conditional Distribution)是现代概率论中的概念:已知两个相关的随机变量 X 和 Y,随机变量 Y 在条件{X=x}下的条件概率分布是指当已知 X 的取值为某个特定值 x 之时,Y 的概率分布。 如果 Y 在条件{X=x}下的条件概率分布是连续分布,那么其密度函数称作 Y 在条件{X=x}下的条件概率密度函数(条件分布密度、条件密度函数)。与条件分布有关的概念,常常以“条件”作为前缀,如条件期望、条件方差等等。
转移 与转移概率:从状态 1 变为状态 2,称之为状态转移,其对应的概率称之为转移概率。
可数无穷:是指集合中的元素可以与自然数一一对应,也就是说可以用自然数来"数"它的数量,从而其数量为可数无穷.
本章所需 python 包
# 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 scipy import misc
# HIDDEN
s = np.arange(1, 6)
def refl_walk_probs(i, j):
# staying in the same state
if i-j == 0:
return 0.5
# moving left or right
elif 2 <= i <= 4:
if abs(i-j) == 1:
return 0.25
else:
return 0
# moving right from 1
elif i == 1:
if j == 2:
return 0.5
else:
return 0
# moving left from 5
elif i == 5:
if j == 4:
return 0.5
else:
return 0
reflecting_walk = MarkovChain.from_transition_function(s, refl_walk_probs)
马尔科夫链
一个 随机过程 是某一概率空间(这里的空间,理解为域更合适,是指一系列随机状态的合集。不是与时间相对的空间,后面的时间也类似)中一系列随机状态的集合。我们将研究一种在离散时间域内演化过程,即有如下随机状态 $X_0, X_1, X_2, \ldots $。想象一下,从时刻 0 的状态 \(X_0\) 开始,不断执行对应时间的操作,状态随之转移。以此类推,在时刻\(n\) 时,转移为状态 \(n\)。
我们已经见过这种过程的例子。例如伯努利实验中,一系列的抛硬币事件构成的独立同分布的序列,就形成这样的过程。每次事件在 0 和 1 两个值之间来回传递,每个值都独立于所有其他值。但在许多有趣的过程中,未来的事件的值依赖于当前事件的值,以及过去事件的值。我们可以使用过去和现在来预测未来。
马尔科夫链,是以安德烈·马尔科夫的名字命名的一类随机过程。一个非正式的描述如下,对于马尔科夫链而言,将来的状态的值只取决于当前状态的值,而与如何达到当前状态的值无关。这被称为马尔科夫性质。从形式上看
- 对于任一\(n \ge 1\), \(X_{n+1}\) 的条件分布,只取决于 \(X_0, X_1, \ldots , X_n\)中的\(X_n\)
- 也就是说,对于每一个可能值的序列\(i_0, i_1, \ldots, i_n, i_{n+1}\),
例如在一个随机漫步试验中,赌徒以 a 美元的财富开始,然后连续投掷一枚公平的硬币(正反面概率都为 50%)。如果硬币为正面,他就获得 1 美元,如果是反面,他就输掉 1 美元。
设\(X_{0} = a\),则\(n > 0\)令\(X_{n+1} = X_n + I_n\),其中$I_1, I_2, \ldots \(是伯努利实验中的独立同分布序列。马尔科夫性质适用于整个过程:给出赌徒在时刻\)n\(的财富数,那他在时刻\)n+1\(时的财富数的取值只与其在时刻\)n\(时的财富数有关,与\)n\(之前无关。所以该过程\)X_0, X_1, X_2, \ldots $是一个马尔科夫链,代表着赌徒的财富随时间的演变。
马尔可夫链的状态空间是链中状态可能值的集合。上述随机漫步的状态空间是所有整数的集合。在本课程中,我们将状态空间限制为离散且有限的。
条件独立
两个随机变量\(X\)和\(Y\)是相互独立是指,\(X\)处于条件\(Y\)的情况的条件分布和不处于\(Y\)的情况下的条件分布是一致的。
随机变量\(X\)和\(Y\)相对于\(Z\)条件独立 是指,\(X\)在条件\(Y\)和\(Z\)的情况下的条件分布和在条件\(Z\)的情况下的条件分布式一致。也就是说,\(Z\)这一关于\(Y\)的额外条件,不会影响\(X\)的值。
在马尔可夫链中,如果定义时刻\(n\)为现在,定义时刻\(n+1\)为未来,时刻序列\(0\)到\(n-1\)作为过去,马尔科夫性质意味着过去和未来是条件独立的。
转移
设$X_0, X_1, X_2, \ldots \(为状态空间\)S$中马尔科夫链。根据马尔科夫性质,有限长度的路径或轨迹的概率如下:
\begin{align}
& P(X_0 = i_0, X_1 = i_1, X_2 = i_2, \ldots, X_n = i_n) \
& = ~
P(X_0 = i_0)P(X_1 = i_1 \mid X_0 = i_0)P(X_2 = i_2 \mid X_1 = i_1) \cdots
P(X_n = i_n \mid X_{n-1} = i_{n-1})
\end{align}
上式中的条件概率,也被称为转移概率。对于状态\(i\)和\(j\),条件概率\(P(X_{n+1} = j \mid X_n = i)\)被称为时刻\(n\)时的一阶转移概率。
对于许多链,例如随机漫步,这些一阶转移概率仅仅由状态\(i\)和\(j\)决定,而与时刻\(n\)无关。
示例:
\begin{equation}
P(X_{n+1} = j \mid X_n = i) =
\begin{cases}
\frac{1}{2} & \text{if } j = i-1 \text{ or } j = i+1 \
0 & \text{ otherwise}
\end{cases}
\end{equation}
对所有的\(n\)都与时刻无关。
固定转移概率
当一阶转移概率与时刻\(n\)无关时,称之为固定或者时间同质的。我们将在本课程中学习的所有马尔可夫链都具有时间同质的转移概率。
对于这样的链,定义一阶转移概率如下:
Then
一阶转移概率可以表示为矩阵的元素。这不仅仅是为了符号的紧凑-它导致了一个强大的理论。
一阶转移矩阵
链的一阶转移矩阵描述如下,矩阵\(\mathbb{P}\),其中\((i, j)\)位置处的元素是\(P(i, j) = P(X_1 = j \mid X_0 = i)\)。
通常,\(\mathbb{P}\)简称为转移矩阵。注意两个重要属性:
- \(\mathbb{P}\)是一个正方形矩阵: 它的行和列都由状态空间索引构成。
- \(\mathbb{P}\)的每一行: 对任一状态\(i\), 和时刻\(n\), 行\(i\) 包含了在\(X_n = i\) 情况下,\(X_{n+1}\)的条件分布。 因为它的每一行的和都为 1, \(\mathbb{P}\) 也被称为 随机矩阵.
让我们看一下示例中转移矩阵的样子。
粘性反转随机漫步
通常,马尔可夫链的转移行为更容易在转移图而不是矩阵中描述。下面是状态 1,2,3,4 和 5 上的链的转移图。该图显示了一阶转移概率。
- 如果链条处于任何状态,它移动到原有状态的概率为 0.5。
- 如果链处于状态 2 到 4,则它移动到其两个相邻状态中的一个的概率为 0.25。
- 如果链处于状态 1 或 5,则它移动到其相邻状态的概率为 0.5。
![Reflecting Lazy Walkimg/10-1-trans_refl.png)
我们称其为反转是在状态 1 和 5 可以反转掉头进行转移。整个漫步过程有粘性是指其可能移动到原有状态。
转移图非常适合理解链移动的规则。但是,对于计算,转移矩阵更有帮助。
要开始构造矩阵,我们将数组s设置为状态集,并为转移函数refl_walk_probs 设置成入参为\(i\)和\(j\),返回值为\(P(i, j)\)的形式。
s = np.arange(1, 6)
def refl_walk_probs(i, j):
# staying in the same state
if i-j == 0:
return 0.5
# moving left or right
elif 2 <= i <= 4:
if abs(i-j) == 1:
return 0.25
else:
return 0
# moving right from 1
elif i == 1:
if j == 2:
return 0.5
else:
return 0
# moving left from 5
elif i == 5:
if j == 4:
return 0.5
else:
return 0
您可以使用prob140库来构造MarkovChain对象。from_transition_function方法有两个参数:
- 状态构成的数组
- 转移函数
并显示MarkovChain对象的一阶转移矩阵。
reflecting_walk = MarkovChain.from_transition_function(s, refl_walk_probs)
reflecting_walk
| 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|
| 1 | 0.50 | 0.50 | 0.00 | 0.00 | 0.00 |
| 2 | 0.25 | 0.50 | 0.25 | 0.00 | 0.00 |
| 3 | 0.00 | 0.25 | 0.50 | 0.25 | 0.00 |
| 4 | 0.00 | 0.00 | 0.25 | 0.50 | 0.25 |
| 5 | 0.00 | 0.00 | 0.00 | 0.50 | 0.50 |
比较转移矩阵\(\mathbb{P}\)和转移图,并确认它们包含的有关转移概率的信息一致。
为了找到从状态\(i\)转移到\(j\)的概率,只需找矩阵\(i\)行\(j\)列的值即可。
如果您知道起始状态,则可以使用\(\mathbb{P}\)找到任何有限路径的概率。例如,假设从 1 开始,那么它具有路径[2,2,3,4,3]的概率是
0.5 * 0.5 * 0.25 * 0.25 * 0.25
0.00390625
MarkovChain对象的prob_of_path方法可以省去写乘法的麻烦。它将起始状态和路径的其余部分(在列表或数组中)作为其参数,并返回路径的概率。
reflecting_walk.prob_of_path(1, [2, 2, 3, 4, 3])
0.00390625
reflecting_walk.prob_of_path(1, [2, 2, 3, 4, 3, 5])
0.0
您可以使用simulate_path方法模拟链的路径。它有两个参数:起始状态和路径的步数。默认情况下,它返回一个由路径中的状态序列组成的数组。可选参数plot_path=True绘制模拟路径。运行几次下面的单元格,看看输出如何变化。
reflecting_walk.simulate_path(1, 7)
array([1, 2, 1, 2, 2, 2, 3, 2])
reflecting_walk.simulate_path(1, 10, plot_path=True)
![pngimg/10-2-output.png)
\(n\)-阶转移矩阵
对于状态\(i\)和\(j\), 耗费\(n\)步,从状态\(i\)转移为状态\(j\)的可能性,称为从\(i\)到\(j\)的\(n\)-阶转移概率。 形式上定义为:
在这种表示方法中,一阶转移概率\(P(i, j)\)也可以写作\(P_1(i, j)\)。
\(n\)-阶转移概率\(P_n(i, j)\)可以使用\(n\)-阶转移矩阵\((i, j)\)位置处的元素表示。对于任意状态\(i\),\(n\)-阶转移矩阵的第\(i\)行包含了从状态\(i\)开始的链的条件分布\(X_n\)
MarkovChain的transition_matrix方法,使用\(n\)作为入参,并返回一个\(n\)-阶转移矩阵。以下是本节前面定义的粘性反转随机漫步的两阶转移矩阵。
reflecting_walk.transition_matrix(2)
| 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|
| 1 | 0.3750 | 0.5000 | 0.125 | 0.0000 | 0.0000 |
| 2 | 0.2500 | 0.4375 | 0.250 | 0.0625 | 0.0000 |
| 3 | 0.0625 | 0.2500 | 0.375 | 0.2500 | 0.0625 |
| 4 | 0.0000 | 0.0625 | 0.250 | 0.4375 | 0.2500 |
| 5 | 0.0000 | 0.0000 | 0.125 | 0.5000 | 0.3750 |
你可以轻松地手动计算各个条目。例如,\((1, 1)\)是分两步从状态 1 进入状态 1 的可能性。有两种方法可以实现这一目标:
- [1, 1, 1]
- [1, 2, 1]
假设 1 是起始状态,则两条路径的总概率为\((0.5 \times 0.5) + (0.5 \times 0.25) = 0.375\).
由于马尔科夫性质,基于一阶转移概率,就能得到二阶转移概率。
一般而言,我们可以通过调节链条在时刻 1 时的位置,来计算\(P_2(i, j)\)
\begin{align}
P_2(i, j) ~ &= ~ P(X_2 = j \mid X_0 = i) \
&= ~ \sum_k P(X_1 = k, X_2 = j \mid X_0 = i) \
&= ~ \sum_k P(X_1 = k \mid X_0 = i)P(X_2 = j \mid X_1 = k) \
&= ~ \sum_k P(i, k)P(k, j)
\end{align}
如上结果为\(\mathbb{P} \times \mathbb{P} = \mathbb{P}^2\)矩阵的\((i, j)\)位置处元素。因此,二阶转移矩阵为\(\mathbb{P}^2\)。
通过归纳证明,能总结出,\(n\)-阶转移矩阵为\(\mathbb{P}^n\)。
这是粘性反转随机漫步的 5 步转移矩阵。
reflecting_walk.transition_matrix(5)
| 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|
| 1 | 0.246094 | 0.410156 | 0.234375 | 0.089844 | 0.019531 |
| 2 | 0.205078 | 0.363281 | 0.250000 | 0.136719 | 0.044922 |
| 3 | 0.117188 | 0.250000 | 0.265625 | 0.250000 | 0.117188 |
| 4 | 0.044922 | 0.136719 | 0.250000 | 0.363281 | 0.205078 |
| 5 | 0.019531 | 0.089844 | 0.234375 | 0.410156 | 0.246094 |
这是一个表示方法,但要使用矩阵,我们必须以 Python 识别为矩阵的形式表示它。方法get_transition_matrix为我们做到了这一点。需要步数\(n\)作为入参,并以 numpy 矩阵的格式返回\(n\)-阶转移矩阵。
对于粘性反转随机漫步,我们将从提取\(\mathbb{P}\)开始 P 作为矩阵refl_walk_P。
refl_walk_P = reflecting_walk.get_transition_matrix(1)
refl_walk_P
array([[ 0.5 , 0.5 , 0. , 0. , 0. ],
[ 0.25, 0.5 , 0.25, 0. , 0. ],
[ 0. , 0.25, 0.5 , 0.25, 0. ],
[ 0. , 0. , 0.25, 0.5 , 0.25],
[ 0. , 0. , 0. , 0.5 , 0.5 ]])
让我们检查前面显示的 5-阶转移矩阵是否与\(\mathbb{P}^5\)相同。您可以使用np.linalg.matrix_power将计算矩阵的非负整数次幂。第一个参数是矩阵,第二个参数是幂。
np.linalg.matrix_power(refl_walk_P, 5)
array([[ 0.24609375, 0.41015625, 0.234375 , 0.08984375, 0.01953125],
[ 0.20507812, 0.36328125, 0.25 , 0.13671875, 0.04492188],
[ 0.1171875 , 0.25 , 0.265625 , 0.25 , 0.1171875 ],
[ 0.04492188, 0.13671875, 0.25 , 0.36328125, 0.20507812],
[ 0.01953125, 0.08984375, 0.234375 , 0.41015625, 0.24609375]])
这确实与transition_matrix显示的矩阵相同,但难以阅读。
当我们想要在计算中使用\(\mathbb{P}\),我们将使用此矩阵表示。对于显示和阅读,transition_matrix 则更好。
长期运行
要理解马尔科夫链的长跑行为,令\(n\)变大,并检查对于开始状态的每个\(X_n\)值。这些都包含在\(n\)-阶转移矩阵\(\mathbb{P}^n\)中。
如下展示了随机漫步中,\(n = 25, 50\), 和 \(100\)情况下的\(\mathbb{P}^n\) 。
reflecting_walk.transition_matrix(25)
| 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|
| 1 | 0.129772 | 0.256749 | 0.25 | 0.243251 | 0.120228 |
| 2 | 0.128374 | 0.254772 | 0.25 | 0.245228 | 0.121626 |
| 3 | 0.125000 | 0.250000 | 0.25 | 0.250000 | 0.125000 |
| 4 | 0.121626 | 0.245228 | 0.25 | 0.254772 | 0.128374 |
| 5 | 0.120228 | 0.243251 | 0.25 | 0.256749 | 0.129772 |
reflecting_walk.transition_matrix(50)
| 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|
| 1 | 0.125091 | 0.250129 | 0.25 | 0.249871 | 0.124909 |
| 2 | 0.125064 | 0.250091 | 0.25 | 0.249909 | 0.124936 |
| 3 | 0.125000 | 0.250000 | 0.25 | 0.250000 | 0.125000 |
| 4 | 0.124936 | 0.249909 | 0.25 | 0.250091 | 0.125064 |
| 5 | 0.124909 | 0.249871 | 0.25 | 0.250129 | 0.125091 |
reflecting_walk.transition_matrix(100)
| 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|
| 1 | 0.125 | 0.25 | 0.25 | 0.25 | 0.125 |
| 2 | 0.125 | 0.25 | 0.25 | 0.25 | 0.125 |
| 3 | 0.125 | 0.25 | 0.25 | 0.25 | 0.125 |
| 4 | 0.125 | 0.25 | 0.25 | 0.25 | 0.125 |
| 5 | 0.125 | 0.25 | 0.25 | 0.25 | 0.125 |
\(\mathbb{P}^{100}\)中每一行都一样!这意味着,对于随机漫步而言,在时刻 100 时的条件分布不依赖于其起始状态。链忘了他的起始点
你可以增加\(n\),并且会看到\(n\)-阶转移矩阵保持一致。说明链已经达到稳定
稳定性是许多马尔可夫链的显着特性,也是本章的主题。
析构链
设\(S\)为一个有限状态或者可数无穷状态组成的集合。任一由集合\(S\)来索引行、列的随机矩阵,都是状态空间\(S\)下的某一马尔科夫链的转移矩阵。马尔可夫链的转移行为与矩阵变化保持一致。设置术语以讨论其中一些行为很有帮助。
连通
如果链可以从状态\(i\)转移到状态\(j\),称之为\(i\)可达\(j\),记作\(i \rightarrow j\)。通常,你能通过检查链的转移图来判定\(i\) 是否可达\(j\)。一个\(i \rightarrow j\)正式的定义为:
- 存在一条转移路径,从\(i\)开始,到\(j\)结束。
- 等价的, 存在 \(n > 0\) 使得 \(P_n(i, j) > 0\)。
当\(i \rightarrow j\) 并且 \(j \rightarrow i\)时,称\(i\)连通\(j\) 记作\(i \leftrightarrow j\)。
如果链的所有状态彼此连通,则该链被称为不可约。
上一节的粘性反转随机漫步是不可约的,因为链条可能从每个状态相互之间都是连通的。
周期
在离散时间工作存在缺陷。其中一点就是周期性。让我们从随机漫步的例子开始,其中每个步骤是基于公平硬币的投掷。假设从状态 0 开始。然后定义只能在如下时刻返回状态 0:正面和反面出现的数量完全相等,因此投掷的数量必须是偶数。我们说状态 0 有周期 2
当链从状态\(i\)开始,并且经过\(d\)的倍数次数后能回到状态\(i\),则称状态\(i\) 有周期 \(d\)。\(d\)是所有能使 \(P_n(i, i) > 0\)的 \(n\) 的最大公约数。
在上述描述的随机漫步中,所有的状态有周期 2。
周期会导致长期行为的描述出现问题。例如:当状态\(i\)有周期 3,序列\(P_n(i, i)\)可能看起来像"0, 0, positive, 0, 0, positive, \(\ldots\)",因此限制声明可能会变得复杂。
在本课程中,我们将研究链条的长期行为,其中所有状态都是非周期性的,即它们具有周期 1.换句话说,链条上无环。
你如何检查所有状态是否具有周期性?如果链是不可约的,那所有状态必须具有相同的周期。这个的证据并不困难,但我们不会这样做。因为这意味着如果一个链是不可约的,你就要找出其中每一个状态的周期,然后保证所有他状态都必须有相同的周期。
有些状态是很容易识别为非周期性的。如果 1-阶转移概率\(P(i, i)\) 为正,那么状态\(i\)是非周期性的。因为链可以保持在状态\(i\)任意长时间,其返回的结果是不成环的。
样例:析构链
考虑具有转移矩阵的链
| a | b | c | d | e | |
|---|---|---|---|---|---|
| a | 0 | 1 | 0 | 0 | 0 |
| b | 1 | 0 | 0 | 0 | 0 |
| c | 0 | 1/3 | 1/3 | 1/3 | 0 |
| d | 0 | 0 | 0 | 1/3 | 2/3 |
| e | 0 | 0 | 0 | 4/5 | 1/5 |
- 状态\(a\)和\(b\)相互连通,并且不和其他状态可达。因此称为连通类。小矩阵
| a | b | |
|---|---|---|
| a | 0 | 1 |
| b | 1 | 0 |
本身就是一个转移矩阵。尽管描述的是一个无聊的链,在状态\(a\) 和\(b\)之间循环。\(a\)和\(b\)都有周期 2。
- 状态\(d\)和\(e\)构成连通类,并且是非周期性的。
| d | e | |
|---|---|---|
| d | 1/3 | 2/3 |
| e | 4/5 | 1/5 |
- 状态\(c\)与自己连通,一旦转移为状态\(b\)或\(d\), 就无法再返回。
在本课程中,我们将只使用有限状态空间上的不可约的非周期马尔可夫链。我们所说的大部分内容也适用于周期链,以及具有可数无限状态空间的链。
长期运行行为
每个具有有限状态空间的不可约和非周期性的马尔可夫链在状态转移一段时间后会表现出惊人的规律性。以下收敛定理的证明超出了本课程的范围,但您已经通过计算看到了结果。对于某些类别无限多个状态的马氏链,所有结果都更为正确。
收敛性
设\(X_0, X_1, \ldots\) 是有限状态空间\(S\)上的不可约,非周期性的马尔科夫链。那么对于所有的状态\(i\)和\(j\)有
换言之,对于\(S\)中任意的\(i\)和\(j\),从\(i\)到\(j\)的\(n\)-阶转移概率会逼近一个极限,并且不依赖于\(i\)。
此外
-
对所有的状态\(j\)都有\(\pi(j) > 0\) ,和
-
\(\sum_{j \in S} \pi(j) = 1\)
也就是说,当\(n \to \infty\), \(n\)-阶转移矩阵\(\mathbb{P}^n\)的中每一行的值都会等于同一个向量\(\pi\),其中每一项都为正值。
限制特性
(i) 向量\(\pi\)是平衡方程 \(\pi \mathbb{P} = \pi\)的唯一解。
(ii) 如果对某些\(n\),\(X_n\)的分布为\(\pi\),那么,对于\(m > n\),其分布 \(X_m\) 也同样是\(\pi\)。因此,称\(\pi\)为链的静态或稳态分布。
(iii) 对于每一个状态\(j\), 向量\(\pi\)的第\(j\)th 元素\(\pi(j)\)是链的长期值在\(j\)的预期。
我们假设收敛定理是正确的; 然后其他相关的特性推断起来就相对容易了。在本节的其余部分,我们将建立这些特性并查看它们的使用方式。
平衡方程
另\(n \ge 0\),\(i\)和\(j\)是两个状态。然后
因此
\begin{align}
\lim_{n \to \infty} P_{n+1}(i, j) &= \lim_{n \to \infty} \sum_{k \in S} P_n(i, k)P(k, j) \ \
&= \sum_{k \in S} \big{(} \lim_{n \to \infty} P_n(i, k) \big{)} P(k, j)
\end{align}
因为\(S\)是有限的,我们可以交换极限与和。现在将收敛定理应用于平稳性:
这被称为平衡方程。
在矩阵表示方法中,如果你把\(\pi\)当做行向量,方程可以写为
这有助于计算\(\pi\)时没有限制。
注意: 稳态不是状态空间\(S\)的元素。这是链条运行很长一段时间后的状况。让我们进一步研究这个问题。
平衡态和稳态
要想看看这些方程中的“平衡”是什么,就需要想象一下这个链的大量独立复制。例如,根据粘性反转随机漫步的转移概率,想象大量的粒子在状态 1 到 5 之间移动,并假设所有粒子在时刻 1,2,3,......... 都彼此独立。
然后在任何时刻和任何状态\(j\),有一些比例的粒子离开\(j\),和另一些比例的粒子进入\(j\)。平衡方程表明这两个比例是相等的。
让我们通过再次查看方程来检查:对于任何状态\(j\),
对于每一个\(k \in S\) (包括 \(k=j\)),以\(\pi(k)\) 作为链运行很长一段时间后离开状态\(k\)的粒子的比例。等式左边是离开状态\(j\)的粒子的比例。等式右边求和的每一项都是离开状态\(k\)并转向状态\(j\)的粒子比例。求和之后,就是所有进入状态\(j\)的粒子。等式成立时,链是平衡的。
收敛于平稳性的定理表明,当\(n\)变大时,链趋于平衡。当链确实达到平衡时,对于\(n\),其分布\(X_n\)为\(\pi\),然后它保持平衡。原因:
通过平衡方程。现在使用归纳法。
特别是,如果链以其静止分布\(\pi\)开始,那么之后每一个\(n\)的分布\(X_n\)都是\(\pi\)。
唯一性
不难表明,如果平衡方程有解,那么它必须是\(\pi\),\(X_n\)的边际分布的极限。我们不会做证明; 它基本上重复了我们用来推导平衡方程的步骤。你应该意识到,一个不可约的,非周期的,有限状态马尔可夫链只有一个稳态分布。
如果您碰巧猜测到平衡方程的解,这将特别有用。如果您猜到了一个概率分布解,那么您已经找到了链的稳态分布。
长期运行时各个状态占比
有状态\(j\) ,令\(I_m(j)\)代表事件\(\{X_m = j\}\)。链花费在状态\(j\)处转移次数比例,当转移次数从 1 至\(n\),表述如下:
因此,当链从状态\(i\)开始,链花费在状态\(j\)处转移次数比例预期为
现在回想一下实数序列的收敛性质:当\(n \to \infty\)时,\(x_n \to x\),那么序列的均值也会收敛于\(x\)
令\(x_n = P_n(i, j)\)。通过收敛性可得
因此平均值也会收敛:
因此,长期过程的链花费在状态\(j\)处转移次数比例预期为\(\pi(j)\),其中\(\pi\)链的固定分布。
粘性反转漫步的稳态分布
我们在前面的部分对此进行了研究。转移图是
![image.pngimg/10-1-trans_refl.png)
这是转移矩阵\(\mathbb{P}\)。
reflecting_walk
| 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|
| 1 | 0.50 | 0.50 | 0.00 | 0.00 | 0.00 |
| 2 | 0.25 | 0.50 | 0.25 | 0.00 | 0.00 |
| 3 | 0.00 | 0.25 | 0.50 | 0.25 | 0.00 |
| 4 | 0.00 | 0.00 | 0.25 | 0.50 | 0.25 |
| 5 | 0.00 | 0.00 | 0.00 | 0.50 | 0.50 |
MarkovChain的方法steady_state返回一个稳态分布\(\pi\)。 之前看到过这是\(\mathbb{P}\)行的极限。
reflecting_walk.steady_state()
| Value | Probability |
|---|---|
| 1 | 0.125 |
| 2 | 0.25 |
| 3 | 0.25 |
| 4 | 0.25 |
| 5 | 0.125 |
我们也可是使用平衡方程求解\(\pi\)。当然,这看起来有些多余,因为 Python 已经给出了\(\pi\)。当转移矩阵很大,且是分数的情况,使用 Python 是不错的操作。
根据平衡方程:
也就是说,使用\(\pi\)乘以\(\mathbb{P}\)中的1列
按照相同的过程获得所有五个平衡方程:
\begin{align}
\pi(1) &= 0.5\pi(1) + 0.25\pi(2) \
\pi(2) &= 0.5\pi(1) + 0.5\pi(2) + 0.25\pi(3) \
\pi(3) &= 0.25\pi(2) + 0.5\pi(3) + 0.25\pi(4) \
\pi(4) &= 0.25\pi(3) + 0.5\pi(4) + 0.5\pi(5) \
\pi(5) &= 0.25\pi(4) + 0.5\pi(5)
\end{align}
一些观察结果使系统易于解决。
- 通过重新排列第一个等式,我们得到 \(\pi(2) = 2\pi(1)\)。
- 通过对称性, \(\pi(1) = \pi(5)\) 和 \(\pi(2) = \pi (4)\)。
- 因为 \(\pi(2) = \pi(4)\), 等式\(\pi(3)\) 表明 \(\pi(3) = \pi(2) = \pi(4)\)。
所以\(\pi\)的分布为
因为\(\pi\)是一个条件分布概率,其和为 1。即 \(8\pi(1)\)的值为 1,可以得到
这和我们用distribution计算\(n=100\)的结果一致。事实上,我们可以使用该方法steady_state来获得\(\pi\):
这意味着从长远来看,这一部分的随机漫步预计将花费大约 12.5%的时间在状态 1,25%的时间用于状态 2,3 和 4,其余 12.5%的时间在状态 5。
懒惰的随机循环漫步
现在让状态空间在圆上排列五个点。假设该过程从点 1 开始,并且在每个步骤中保持在概率为 0.5 的位置(因此是粘性的),或者移动到两个相邻点中的一个,每个概率为 0.25,而不管其他移动。
换言之,除了\(1 \rightarrow 5\) 和 \(5 \rightarrow 1\)这个漫步的转移和上面的随机漫步是相同的。 可以在转移图中总结此转移行为,请注意,所有状态的转移行为都是相同的。
![Lazy Circle Walkimg/10-3-trans_circle.png)
在每一步中,下一步的动作都是通过从三个选项中随机选择和链的当前位置来确定的,而不是从它到达该位置的方式。所以这个过程就是马尔可夫链。我们称之为 $X_0, X_1, X_2, \ldots $ 并定义其转移矩阵。
s = np.arange(1, 6)
def circle_walk_probs(i, j):
if i-j == 0:
return 0.5
elif abs(i-j) == 1:
return 0.25
elif abs(i-j) == 4:
return 0.25
else:
return 0
circle_walk = MarkovChain.from_transition_function(s, circle_walk_probs)
circle_walk
| 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|
| 1 | 0.50 | 0.25 | 0.00 | 0.00 | 0.25 |
| 2 | 0.25 | 0.50 | 0.25 | 0.00 | 0.00 |
| 3 | 0.00 | 0.25 | 0.50 | 0.25 | 0.00 |
| 4 | 0.00 | 0.00 | 0.25 | 0.50 | 0.25 |
| 5 | 0.25 | 0.00 | 0.00 | 0.25 | 0.50 |
由于转移行为的对称性,任何状态出现的概率,都不应该大于任何其他状态,因此\(\pi(j)\)的值是相同的。这可以用steady_state验证。
circle_walk.steady_state()
| Value | Probability |
|---|---|
| 1 | 0.2 |
| 2 | 0.2 |
| 3 | 0.2 |
| 4 | 0.2 |
| 5 | 0.2 |
样例
这里有两个例子来说明如何找到稳态分布以及如何使用它。
Ehrenfest 的扩散模型
Paul Ehrenfest 提出了许多气体粒子扩散模型,其中一个我们将在这里研究。
该模型说有两个容器总共含有\(N\)个粒子。在每个瞬间,随机选择容器,并且独立于容器随机选择颗粒。然后将所选粒子放入所选容器中; 如果它已经在那个容器中,那就留在那里。
令\(X_n\)表示时刻\(n\)时容器 1 中的粒子数。那么\(X_0, X_1, \ldots\)是一个马尔科夫链,其转移概率描述如下:
\begin{equation}
P(i, j) =
\begin{cases}
\frac{N-i}{2N} & \text{if } j = i+1 \
\frac{1}{2} & \text{if } j = i \
\frac{i}{2N} & \text{if } j = i-1 \
0 & \text{otherwise}
\end{cases}
\end{equation}
这条链显然是不可约的。它是非周期性的,因为 \(P(i, i) > 0\).
问题. 链的稳态分布是什么?
回答. 使用电脑, 所以,先找到\(N=100\)时的稳态分布,然后检查对于一般的\(N\)是否一致。
N = 100
states = np.arange(N+1)
def transition_probs(i, j):
if j == i:
return 1/2
elif j == i+1:
return (N-i)/(2*N)
elif j == i-1:
return i/(2*N)
else:
return 0
ehrenfest = MarkovChain.from_transition_function(states, transition_probs)
Plot(ehrenfest.steady_state(), edges=True)
![pngimg/10-4-output.png)
这看起来很像二项式(100,1 / 2)分布。实际上它就是二项式(100,1 / 2)分布。既然你已经猜到了,你所要做的就是将它插入到平衡方程中并检查它们是否有效。
平衡方程是:
\begin{align}
\pi(0) &= \frac{1}{2}\pi(0) + \frac{1}{2N}\pi(1) \
\pi(j) &= \frac{N-(j-1)}{2N}\pi(j-1) + \frac{1}{2}\pi(j) + \frac{j+1}{2N}\pi(j+1), ~~~ 1 \le j \le N-1 \
\pi(N) &= \frac{1}{2N}\pi(N-1) + \frac{1}{2}\pi(N)
\end{align}
您已经通过查看\(N=100\)的结果猜测了答案。但是如果你想从头开始,你必须简化平衡方程并尝试用\(\pi(0)\)表示\(\pi\)的所有元素。你会得到:
\begin{align}
\pi(1) &= N\pi(0) \ \
\pi(2) &= \frac{N(N-1)}{2} \pi0 = \binom{N}{2} \pi(0)
\end{align}
可以归纳推导如下:
换句话说,稳态分布分布与二项式系数成比例。所以当 \(\pi(0) = 1/2^N\)可以使所有元素的和为 1,分布为二项分布 \((N, 1/2)\)。
预期奖励
假设我长时间运行上一节中的懒惰反转随机漫步。如下,这是它的稳态分布。
stationary = reflecting_walk.steady_state()
stationary
| Value | Probability |
|---|---|
| 1 | 0.125 |
| 2 | 0.25 |
| 3 | 0.25 |
| 4 | 0.25 |
| 5 | 0.125 |
问题 1. 假设每次链条处于状态 4 时, 我赢得\(\$4\); 每次进入状态 5, 我赢得\(\$5\); 否则我赢不到钱. 我奖励的期望是多少?
回答 1. 从长远来看,链条处于稳定状态。所以,有 62.5%的概率,我赢不到钱,有 25%的概率我赢\(\$4\),12.5%的概率,我赢\(\$5\)。综上,计算可得奖励的期望为\(\$1.625\)。
0*0.625 + 4*0.25 + 5*.125
1.625
问题 2. 假设每次链条处于状态\(i\), 我抛\(i\)枚硬币,并记录正面次数。从长期来看,我每次得到正面个数的期望是多少?
回答 2. 每次链条处于状态\(i\),期望得到\(i/2\)个正面。 当链处于稳态, 投掷硬币的期望数是 3。所以,从长期来看,正面个数的期望是 1.5。
stationary.ev()/2
1.5
这看上去是人为的,请考虑一下:假设我在上面玩游戏,并且在每一个动作中我告诉你我得到的头数,但我不告诉你链在哪个状态。我隐藏了潜在的马尔可夫链。如果您尝试重新创建马尔可夫链所采用的步骤序列,那么您正在使用隐马尔可夫模型。它们广泛用于模式识别,生物信息学和其他领域。
十一、反转马尔科夫链
原文:prob140/textbook/notebooks/ch_11
译者:喵十八
自豪地采用谷歌翻译
本章所需 python 包
# 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 scipy import misc
# 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 scipy import misc
from itertools import permutations
# HIDDEN
# The alphabet
alph = make_array('a', 'd', 't')
# HIDDEN
# Decode atdt using all possible decoders
x1 = [['a', 't', 'd', 't'], ['a','d','t','d'], ['d','t','a','t']]
x2 = [['d','a','t','a'], ['t','d','a','d'], ['t','a','d','a']]
decoded = x1+x2
# HIDDEN
decoding = Table().with_columns(
'Decoder', list(permutations(alph)),
'atdt Decoded', decoded
)
# HIDDEN
# Make bigram transition matrix
# Data from Peter Norvig's bigram table
aa = 1913489177
dd = 6513992572
tt = 19222971337
ad = 23202347740
da = 23279747379
at = 80609883139
ta = 42344542093
dt = 10976756096
td = 3231292348
row1 = make_array(aa, ad, at)/sum([aa, ad, at])
row2 = make_array(da, dd, dt)/sum([da, dd, dt])
row3 = make_array(ta, td, tt)/sum([ta, td, tt])
rows = np.append(np.append(row1, row2), row3)
# HIDDEN
bigrams = MarkovChain.from_table(Table().states(alph).transition_probability(rows))
反转马尔科夫链
股票市场,变异病毒和计算机搜索引擎有什么共同之处?他们都使用马尔可夫链模型进行了分析。了解马尔可夫链的长期行为有助于我们理解许多不同的随机现象。
在数据科学中,马尔可夫链也用于完全不同的目的。马尔科夫链帮助数据科学家从对于标准采样方法来说太复杂的分布中抽取随机样本。马尔可夫链也可用于分布非常复杂或使用标准方法难以估计的未知量的近似值预估。这可以通过创建马尔可夫链来实现,该马尔可夫链具有作为其稳态分布的原型分布,然后长时间运行链直到它接近稳态。该方法称为马尔科夫链-蒙特卡洛法(Markov Chain Monte Carlo),缩写为 MCMC。令人惊讶的是,它涉及了解马尔可夫链反向运行时会发生什么,也就是说当它们被反转时会发生什么。
要理解和实现 MCMC 算法,您必须研究马尔可夫链的可逆性并进行计算。在本章和随附的实验中,我们将简要介绍这一领域。
详细的平衡
我们一直在研究的马尔可夫链具有稳态分布,其中包含有关链的行为的大量信息。链的稳态分布是平衡方程的解。对于某些链,很容易得到平衡方程的解。但对于其他链条,求解过程可能很复杂或乏味。让我们看看我们是否能找到一种简单的方法来求解平衡方程。
回想一下我们早先关于方程中平衡态的描述。想象一下链的大量独立复制。例如,假设根据链的转移概率,大量粒子在状态间转移,所有粒子在时刻 1, 2, 3, \(\ldots\)的转移都是相对独立的。
假设链处于稳态。正如我们之前所说,设\(\pi(k)\)为任意时刻离开状态\(k\)的粒子,那么平衡方程为
当离开状态\(j\)和进入它的粒子相同时,称链为平衡的。
请注意,左侧只是离开\(j\)的粒子的比例; 没有关于粒子去向的信息。
现在假设有详细的平衡,由下式给出
这些被称为详细平衡方程。表示对于每一对状态\(i\)和\(j\),离开状态 \(i\)进入状态\(j\)的粒子数量和离开状态\(j\)进入状态\(i\)的粒子数量一致。在状态\(i = j\)的情况下,方程无意义,因此被排除在外。
结果证明这是一个比平衡方程更强的条件。
详细平衡意味着平衡
假设存在概率分布 \(\pi\) 是详细平衡方程的解,那么\(\pi\)必然也是平衡方程的解。
\begin{align}
\sum_{k \in S} \pi(k)P(k, j) &= \sum_{k \in S} \pi(j)P(j, k) ~~~ \text{(详细平衡方程)} \
&= \pi(j) \sum_{k \in S} P(j, k) \
&= \pi(j) \cdot 1 ~~~~~~~~~~~~~~ \text{(转移矩阵}j\text{th 行的和)} \
&= \pi(j)
\end{align}
我们从中学到的是,如果我们能够求解详细平衡方程,那么我们也能求解平衡方程。
这有两个原因:
- 详细的平衡方程很简单。
- 详细平衡方程的数量很多,如果有\(s\)个状态,那么有\(\binom{s}{2}\) 个详细平衡方程,包含\(s\)个未知变量。这为我们提供了许多尝试解决它们的方法。
当然,所有这些\(\binom{s}{2}\)方程不是必须保持一致的,在这种情况下,这些平衡方程无解。在这种情况下,我们只能直接求解平衡方程。这里有一个例子表明,如果详细的平衡方程确实有解,我们就可以轻松地得到链的稳态分布。
爱伦菲斯特链
我们需要回到这个例子,因为它可以通过一些操作来求解平衡方程。我们将展示对于这个链和其他类似的链中,如何简便的求解详细的平衡方程,这为我们提供了一个快速求的稳态分布的途径。
状态空间是整数 0 到\(N\)。回想一下转移是如何进行的:在每一步,链条向前转移 1 个状态,保持不变,或者向后转移 1 个状态。这些链称为生死链,用于模拟许多随机模型,如赌徒的命运或人口规模。在我们的例子中,模拟了容器中气体粒子的数量。
对于这样的链,1-阶转移矩阵中,大多数转移概率是 0,因为在一个步骤中链只能移动到两个相邻状态。所以大多数详细的平衡方程都是正确的。对于那些 1-阶转移概率为正的两个状态\(i\)和\(j\),两者之间的间隔必为 1。(注意,详细平衡方程指定\(i \ne j\))。在那种情况下,由于链不可约,\(P(i, j)\)和\(P(j, i)\)都为正。
这允许我们从最低状态开始向上移动来求解详细平衡方程。记住转移规则:
- 在每个步骤中,从\(N\)中随机选取一个粒子,随意放入两个容器中的一个; 链计算容器 1 中的粒子数。
详细的平衡方程式可以顺序求解:
\begin{align}
\pi(0)\frac{1}{2} &= \pi(1)\frac{1}{2N} ~~ \implies ~~ \pi(1) = N\pi(0)
= \binom{N}{1}\pi(0) \ \
\pi(1)\frac{N-1}{2N} &= \pi(2)\frac{2}{2N} ~~ \implies ~~ \pi(2) = \frac{N-1}{2}\pi(1) = \frac{N(N-1)}{2}\pi(0) = \binom{N}{2}\pi(0) \ \
\pi(2)\frac{N-2}{2N} &= \pi(3)\frac{3}{2N} ~~ \implies ~~ \pi(3) = \frac{N-2}{3}\pi(2) = \frac{N(N-1)(N-2)}{3\cdot 2} \pi(0) = \binom{N}{3}\pi(0)
\end{align}
等,从而对于\(1 \le k \le N\),有
通过比,归纳比求解平衡方程更容易。各项总和为
由二项式定理。所以\(\pi(0) = 2^{-N}\)并且稳态分布为二项分布\((N, 1/2)\).
在这一点上,值得记住的是对于数值 \(N\),你可以使用steady_state来找到稳态分布。依靠 Python 来为你做所有的工作。这有一些明显的优点,但也有一些缺点:
- 当\(N\)非常大时,Python 无法处理计算。
- 你会看到分布是二项分布,但不知道是怎么得来的。
这就是为什么即使在强大的个人计算机时代,找到使用数学解决问题的好方法仍然很重要。
环形粘性随机漫步
假设一个链在圆上顺时针顺序排列状态 0,1,2,3,4。假设在每个步骤中保持在原位的概率为\(s\),移动到逆时针邻居的概率为\(p\),移动到顺时针邻居的概率为\(r\)。这里,\(s\), \(p\)和 \(r\)都为正,且总和为 1。
很明显,链的行为在五个状态中是对称的,因此从长远来看,预计在每个状态中花费的时间占比相同。状态上的稳态分布是均匀的。您也可以通过求解平衡方程来校验这一点。
让我们看看上述链是否满足详细的平衡方程。与上面的 Ehrenfest 链不同,这条链可以“环回”。所以不清楚是否满足详细的平衡方程。
详细的平衡方程是:
\begin{align}
\pi(0)r = \pi(1)p ~~~~ \implies \pi(1) = \frac{r}{p}\pi(0) \
\pi(1)r = \pi(2)p ~~~~ \implies \pi(2) = \frac{r2}{p2}\pi(0) \
\pi(2)r = \pi(3)p ~~~~ \implies \pi(3) = \frac{r3}{p3}\pi(0) \
\pi(3)r = \pi(4)p ~~~~ \implies \pi(4) = \frac{r4}{p4}\pi(0)
\end{align}
到目前为止一切都那么好,现在到了求解真相的关键:
对于这个方程组,有解的前提是\(\pi(4)\)的两个表达式必须相等,也就是
这只有在\(r = p\)时才会发生,在这种情况下,详细的平衡方程表示\(\pi\) 的所有条目都是相等的,而这是已知的。
总结一下:
- 在所有状态下,链的稳态分布是均匀的。均匀分布满足平衡方程。
- 当\(r = p\), 详细的平衡方程有一个正解,即稳态分布。
- 当\(r \ne p\)详细的平衡方程没有概率分布作为解。
显然,\(r = p\) 有特殊的地位。这究竟对这个链的行为意味着什么?这是下一节的主题。目前,这里用于模拟链路径的两组参数:
circle_walk_1: \(s = 0.1\), \(r = 0.6\), \(p = 0.3\)circle_walk_2: \(s = 0.1\), \(r = 0.3\), \(p = 0.6\)
保持原位的机会对于两者都是相同的,但顺时针和逆时针移动的机会已经切换。这是两条链的模拟路径。在图中,“顺时针”显示为向上移动,“逆时针”显示为向下移动。
查看路径(如果您愿意,可以模拟更多路径)并回答以下问题:
- 哪一个有“向上”转移而不是“向下”?
- 如果有人向您展示了这两个流程之一的路径,但没有说明这两个流程中的哪一个,您能否确定是哪一个?
states = np.arange(5)
s = 0.1
r = 0.6
p = 0.3
def transition_prob(i, j):
if i == j:
return s
elif j == (i+1) % 5:
return r
elif j == (i-1) % 5:
return p
else:
return 0
circle_walk_1 = MarkovChain.from_transition_function(states, transition_prob)
circle_walk_1
| 0 | 1 | 2 | 3 | 4 | |
|---|---|---|---|---|---|
| 0 | 0.1 | 0.6 | 0.0 | 0.0 | 0.3 |
| 1 | 0.3 | 0.1 | 0.6 | 0.0 | 0.0 |
| 2 | 0.0 | 0.3 | 0.1 | 0.6 | 0.0 |
| 3 | 0.0 | 0.0 | 0.3 | 0.1 | 0.6 |
| 4 | 0.6 | 0.0 | 0.0 | 0.3 | 0.1 |
circle_walk_1.simulate_path(0, 50, plot_path=True)
![pngimg/11-1-output_8_0.png)
s = 0.1
r = 0.3
p = 0.6
circle_walk_2 = MarkovChain.from_transition_function(states, transition_prob)
circle_walk_2
| 0 | 1 | 2 | 3 | 4 | |
|---|---|---|---|---|---|
| 0 | 0.1 | 0.3 | 0.0 | 0.0 | 0.6 |
| 1 | 0.6 | 0.1 | 0.3 | 0.0 | 0.0 |
| 2 | 0.0 | 0.6 | 0.1 | 0.3 | 0.0 |
| 3 | 0.0 | 0.0 | 0.6 | 0.1 | 0.3 |
| 4 | 0.3 | 0.0 | 0.0 | 0.6 | 0.1 |
circle_walk_2.simulate_path(0, 50, plot_path=True)
![pngimg/11-2-output_11_0.png)
可逆性
前一部分的随机漫步在环上顺时针顺序排列的状态 0,1,2,3,4。在每个步骤中保持在原位的概率为\(s\),移动到逆时针邻居的概率为\(p\),移动到顺时针邻居的概率为\(r\)。链的稳态分布为每个状态的概率为 0.2。
若\(r > p\), 那么链更可能顺时针方向而不是逆时针方向移动。例如,在稳态下,路径\(0, 1, 2, 3\)的概率为:
所述路径的反转路径 \(3, 2, 1, 0\) 的概率为
若 \(r > p\),那么原始路径的概率更高。
但如果\(r = p\),那么原始路径与反向路径的概率相同; 在稳定状态下,链条可能朝任何一个方向上运行。如果某人在稳定状态下模拟链并向您显示原始路径以及反向路径,您将无法分辨哪个是哪个。
在本节中,我们将定义马尔科夫链以这种方式可逆的意义。
反转过程
设$X_0, X_1, \ldots \(是一个定义在有限状态空间下,具有稳态分布\)\pi\(的不可约马尔可夫链。以这种稳态分布启动该链,也就是说,让\)X_0\(具有分布\)\pi\(。然后对于所有的\)n \ge 1\(,\)X_n\(的分布也是\)\pi$。
修正,令\(n > 0\),并考虑反向序列\(Y_0, Y_1, \ldots, Y_n\),其中\(Y_k = X_{n-k}\), \(k = 0, 1, \ldots, n\)。称\(X_0, X_1, \ldots, X_n\)为正向序列。
反向序列是时间同质马尔可夫链的一个很好实例。为了了解原因,我们将检查马尔科夫性质是否成立。
在我们证明一般事实之前,让我们进行一些探索性的计算。从\(n = 1\)开始,此时有\(Y_0 = X_1\) 和\(Y_1 = X_0\)。对于状态\(i\)和\(j\)。
\begin{align}
P(Y_1 = j \mid Y_0 = i) ~ &= ~ \frac{P(Y_1 = j, Y_0 = i)}{P(Y_0 = i)} \
&= ~ \frac{P(X_0 = j, X_1 = i)}{P(X_1 = i)} \
&= ~ \frac{\pi(j)P(j, i)}{\pi(i)}
\end{align}
因为正向序列处于稳定状态。我们已经使用转移矩阵和前向序列的稳态分布找到了反向序列的转移概率。
对于\(n = 2\),我们有\(Y_0 = X_2\),\(Y_1 = X_1\), 和 \(Y_2 = X_0\)。对于状态\(k\),\(i\),和\(j\)
\begin{align}
P(Y_2 = j \mid Y_0 = k, Y_1 = i) ~ &= ~ \frac{P(Y_2 = j, Y_1 = i, Y_0 = k)}{P(Y_1 = i, Y_0 = k)} \
&= ~ \frac{P(X_0 = j, X_1 = i, X_2 = k)}{P(X_1 = i, X_2 = k)} \
&= ~ \frac{\pi(j)P(j, i)P(i, k)}{\pi(i)P(i, k)} \
&= ~ \frac{\pi(j)P(j, i)}{\pi(i)}
\end{align}
解不依赖于\(k\)。这与马尔科夫性质保持一致。另外结合我们刚刚证明的两个事实,可以发现,转移概率是时间同质的。
对于更一般的\(n\),修正状态\(i\)和\(j\)以及 0 到\(n-1\)之间的整数\(m\)有
\begin{align}
& P(Y_{m+1} = j \mid Y_0 = i_0, Y_1 = i_1, \ldots, Y_{m-1} = i_{m-1}, Y_m = i) \ \
&=
\frac{P(Y_0 = i_0, Y_1 = i_1 \ldots, Y_{m-1} = i_{m-1}, Y_m = i, Y_{m+1} = j)}
{P(Y_0 = i_0, Y_1 = i_1 \ldots, Y_{m-1} = i_{m-1}, Y_m = i)} \ \
&= \frac{P(X_n = i_0, X_{n-1} = i_1, \ldots, X_{n-m+1} = i_{m-1}, X_{n-m} = i, X_{n-m-1} = j)}
{P(X_n = i_0, X_{n-1} = i_1, \ldots, X_{n-m+1)} = i_{m-1}, X_{n-m} = i)} \ \
&= \frac{\pi(j)P(j, i)P(i, i_{m-1}) \cdots P(i_1, i_0)}
{\pi(i)P(i, i_{m-1}) \cdots P(i_1, i_0)} \ \
&= \frac{\pi(j)P(j, i)}{\pi(i)}
\end{align}
这只涉及状态\(i\)和\(j\),而和\(i_0, i_1, \ldots, i_{m-1}\)以及\(m\)无关。因此满足马尔可夫性质,转移概率是时间同质的。反向序列"状态\(i\)到状态\(j\)"的 1-阶转移概率为
可逆链
当原来的正向马尔科夫链$X_0, X_1, \ldots \(中,对于每个\)n\(,其反向序列\)Y_0, Y_1, \ldots Y_n$的 1-阶转移概率和原始序列一样的情况,被称作是可逆的。也就是说
如果链可逆,则有
换言之:
如果详细的平衡方程具有正解,则链是可逆的。 这与我们在稳状下根据该链想象粒子的移动情况一致:在每个时刻,对于每一对状态\(i\)和\(j\),粒子从\(i\)移动到\(j\)的比例与从\(j\)移动到\(i\)的比例完全相同。
在本节开始时,我们查看了一个环上的随机漫步。让我们看看可逆性的定义对于这个链是什么意思。
-
在上一节中,我们展示了当 \(p \ne r\)时,详细的平衡方程没有正解。因此,当 \(p \ne r\)时,链条是不可逆的。这与我们之前的分析一致。
-
当\(p = r\)时,我们找到了详细平衡方程的解,因此链是可逆的。这形式化了我们的猜想,即如果\(p = r\),那么在稳态下,链条“正向或者反向运行是一样的”。
生死链的可逆性
回想一下,生死链是定义在整数上的马尔可夫链,其每一步的转移限制为增加 1,减少 1 或者保持不变。不难校验具有有限状态空间的不可约的生死链是否可逆。您可以像我们在上一节中对 Ehrenfest 链所做的那样,通过求解详细的平衡方程来校验。
返回并查看文本和练习中的示例。切换链,反射随机漫步(包括懒惰和非懒惰的),Ehrenfest 链和伯努利 - 拉普拉斯链都是不可简约的生死链,因此都是可逆的。
让我们在乍一看似乎不可逆转的生死链的情况下证实这一点。这是马尔可夫链 $X_0, X_1, \ldots $的转移图。
![B&Dimg/11-3-trans_b_and_d.png)
这条链以较高的概率向右移动(即生有孩子),所以看起来好像我们应该知道它是正向还是反向移动。但请记住,时间逆转发生在稳态。在稳态下,链条可能在状态 3 和 4 之间穿梭。您可以通过求解详细的平衡方程式来看到这一点。
\begin{align}
\pi(1)\cdot 1 &= \pi(2) \cdot 0.1 ~~~~ \implies \pi(2) = 10\pi(1) \
\pi(2) \cdot 0.9 &= \pi(3) \cdot 0.1 ~~~~ \implies \pi(3) = 90\pi(1) \
\pi(3) \cdot 0.9 &= \pi(4) \cdot 1 ~~~~~~~ \implies \pi(4) = 81\pi(1)
\end{align}
它也将访问状态 2 和 1,但很少,状态 1 特别罕见。这些访问将散布 3 和 4 中,并且这些路径将无法区分正向和反向移动。
让我们模拟这个过程的路径。首先,我们构造转移矩阵并确认我们\(\pi\)的计算。
s = np.arange(1, 5)
def trans(i, j):
if i == 1:
if j == 2:
return 1
else:
return 0
elif i == 4:
if j == 3:
return 1
else:
return 0
elif j == i+1:
return 0.9
elif j == i-1:
return 0.1
else:
return 0
bnd = MarkovChain.from_transition_function(s, trans)
pi = bnd.steady_state()
pi
| Value | Probability |
|---|---|
| 1 | 0.00549451 |
| 2 | 0.0549451 |
| 3 | 0.494505 |
| 4 | 0.445055 |
我们可以使用simulate_path来绘制链的路径。请注意,与我们以前使用此方法不同,我们现在将初始分布作为第一个参数传递,而不是特定状态。第二个参数是步骤数,如前所述。
下图显示了一条长度为 200 的路径。运行单元格几次,并向前和向后查看每条路径。你不会发现两者之间的系统差异。
plt.figure(figsize=(10,5))
n = 200 # the number of steps
x = np.arange(n+1) # the steps
y = bnd.simulate_path(pi, n, plot_path=True) # the simulated state at each step
# Axis labels and title
plt.xlabel('$n$')
plt.ylabel('$X_n$', rotation=0)
plt.title('Reversibility: Path of Birth and Death Chain in Steady State');
![pngimg/11-4-output_11_0.png)
密码破解
有趣的是,虽然许多马尔可夫链是可逆的,但到目前为止我们看到的例子并没有解释我们通过反转链条得到的结果。毕竟,如果它看起来像正向一样向前运行,为什么不向前运行呢?为什么要担心可逆性呢?
事实证明,逆转马尔可夫链可以帮助解决其他方法难以处理的一类问题。在本节中,我们将介绍如何出现此类问题的示例。在下一节中,我们将讨论一个解决方案。
假设
在网络安全成为我们生活的一部分之前,人们就已经对加密和解密非常感兴趣了。解码加密信息可能是复杂且计算密集的。逆转马尔可夫链可以帮助我们完成这项任务。
为了了解解决此类问题的方法以及问题的涉及范围,让我们尝试解码使用称为替代代码的简单代码加密的一小段文本。文本以字母表写,您可以将其视为一组字母和标点符号。在替换代码中,字母表中的每个字母简单地被另一个字母替换,使得代码只是字母表的排列。
要解码由替换代码加密的消息,您必须反转使用的排列。换句话说,您必须对编码消息应用置换以恢复原始文本。我们将这个置换称为解码器。
要解码文本消息,我们必须做出一些假设。例如,了解编写消息的语言,以及该语言中常见的字母组合。具体而言,就假设我们尝试解码用英语编写然后加密的消息。如果我们的解码过程以 zzxtf 和 tbgdgaa 之类的“单词”结束,我们可能想尝试不同的方式。
所以我们需要关于哪些字母序列是常见的数据。这些数据现在越来越容易收集; 例如由 Peter Norvig, 一个谷歌的研究总监负责的网页
解码信息
让我们看看我们如何使用这种方法来解码消息。为简单起见,假设我们的字母表只包含三个字母 a,d 和 t。现在假设我们得到编码消息 atdt。我们相信这是一个英文单词。我们怎么能以一种可以被计算机重复的方式来解码呢?
作为第一步,我们将记下所有 3!= 6 个字母表中字母的可能排列,并使用每个字母对消息进行解码。该表decoding包含所有结果。Decoder中的每个条目都是一个排列,我们将应用于我们的编码文本 atdt。确定我们将在解码过程中对哪些字母置换。
要了解如何执行此操作,请首先将字母“按字母顺序”的排序:'a','d','t'。现在看一下表格的行。
- 第一行中的解码器是['a','d','t']。这个解码器简单地保持字母不变; atdt 被解码为 atdt。
- 第二行中的解码器是['a','t','d']。这使得字母'a'的第一个字母保持不变,但将第二个字母'd'替换为't',将第三个字母't'替换为'd'。
所以 atdt 被解码为 adtd。
您可以以相同的方式阅读表格的其余部分。.
请注意,在每个已解码的消息中,在索引 1 和 3 处出现相同字母。这是用于解码 atdt 中的 t 的字母。替换代码的一个特征是每个字母原件都用相同的字母进行置换,因而字母原件出现在文本中的位置都会替换为相同的替换字母。解码器必须具有相同的功能。
decoding
| Decoder | atdt Decoded |
|---|---|
| ['a' 'd' 't'] | ['a' 't' 'd' 't'] |
| ['a' 't' 'd'] | ['a' 'd' 't' 'd'] |
| ['d' 'a' 't'] | ['d' 't' 'a' 't'] |
| ['d' 't' 'a'] | ['d' 'a' 't' 'a'] |
| ['t' 'a' 'd'] | ['t' 'd' 'a' 'd'] |
| ['t' 'd' 'a'] | ['t' 'a' 'd' 'a'] |
我们应该使用哪一个解码器?为了做出这个决定,我们必须了解英语中单词中,字母串转移的频率。我们的目标是根据解码结果中字母串的转移频率选择解码器。
我们用汇总了英语中,一些双字母或两个字母组合频率的数据。这是一个被称为bigrams的转移矩阵,用于对英语中双字母的可用信息进行粗略简化; 我们使用了 Peter Norvig 的双字母表,并将其限制在我们的三个字母的字母表中。对应于字母'a'的行假定以'a'开头的大约 2%的双字母是'aa',大约 22%是'ad',剩下的 76%是'at'。
“aa”组合是罕见的,这是有道理的; 我们不经常使用像 aardvark 这样的词。甚至 2%看起来很大,直到你记得它只是'aa','ad'和'at'中'aa'的比例,因为我们限制了字母表。如果你看它在所有 \(26\times26\) 中的比例,会低得多。
bigrams
| a | d | t | |
|---|---|---|---|
| a | 0.018099 | 0.219458 | 0.762443 |
| d | 0.570995 | 0.159772 | 0.269233 |
| t | 0.653477 | 0.049867 | 0.296656 |
现在将真实文本视为具有此转移矩阵的马尔可夫链的路径。一个有趣的历史是,这就是马尔科夫第一次提出马尔科夫过程时所做的事情 - 他分析了亚历山大普希金的韵文小说,Eugene Onegin 中元音和辅音之间的转移。
如果真实的文本是 tada,那么我们可以将序列 tada 视为马尔可夫链的路径。其概率可以由\(P(t)P(t, a)P(a, d)P(d, a)\)计算。我们将根据这个概率给每个解码器一个分数。较高的分数对应于更好的解码器。
为了分配分数,我们假设所有三个字母都以相同的概率开始路径。对于字母表中的三个字母,这与事实并不相符(每个字母出现的概率并不相同,我们可以忽略这一因素)。这意味着每条路径的概率将以 1/3 的系数开始,我们所要做的就是对所有概率进行排名。我们将只计算\(P(t, a)P(a, d)P(d, a)\),值约为 8%。
根据我们上面decoding的表格,tada 是我们通过将解码器['t','d','a']应用到我们的数据 atdt 得到的结果。现在,我们可以说这个解码器在给定数据上的得分是 8%。稍后我们将介绍更正式的计算和术语。
# score of decoder ['t', 'd', 'a']
0.653477 * 0.219458 * 0.570995
0.08188682431730866
为了自动化这种计算,我们可以使用prob_of_path方法。请记住,它的第一个参数是初始状态,第二个参数是由序列中剩余状态组成的列表或数组。
bigrams.prob_of_path('t', ['a', 'd', 'a'])
0.081886816291942444
我们是否应该决定将我们的消息 atdt 解码为 tada?如果我们认为 8%的可能性很高,那么答案为是。但,如果其他的解码器具有更高的可能性呢?在那种情况下,当然选择得分高的。
因此,我们需要全部六个“解码器”路径中的概率。
让我们定义一个函数score,它将获取一个列表或一组字符,并使用bigrams转移矩阵返回相应路径的概率。在我们的示例中,这与返回相应解码器的分数相同。
def score(x):
return bigrams.prob_of_path(x[0], x[1:])
以下是按分数降序排列的结果。有一个明显的赢家:对应于消息'data'的解码器['d','t','a']的分数是任何其他解码器的两倍以上。
decoding = decoding.with_column('Score of Decoder', decoding.apply(score, 1))
decoding.sort('Score of Decoder', descending=True)
| Decoder | atdt Decoded | Score of Decoder |
|---|---|---|
| ['d' 't' 'a'] | ['d' 'a' 't' 'a'] | 0.284492 |
| ['d' 'a' 't'] | ['d' 't' 'a' 't'] | 0.134142 |
| ['t' 'd' 'a'] | ['t' 'a' 'd' 'a'] | 0.0818868 |
| ['a' 'd' 't'] | ['a' 't' 'd' 't'] | 0.0102363 |
| ['t' 'a' 'd'] | ['t' 'd' 'a' 'd'] | 0.00624874 |
| ['a' 't' 'd'] | ['a' 'd' 't' 'd'] | 0.00294638 |
问题的规模
当字母表较大时,我们在三个字符的字母表上做的工作,将会变得非常可怕。52 个小写字母和大写字母,以及空格字符和所有标点,形成一个大约 70 个字符的字母表。这给了我们 70!不同的解码器需要考虑。理论上,我们必须找到这 70!个中每一个的可能性和并将他们排序。
这是 70!个解码器。我们的计算系统无法处理那么多,其他系统也会遇到同样的问题。
下面计算了 70!的值
math.factorial(70)
11978571669969891796072783721689098736458938142546425857555362864628009582789845319680000000000000000
一个可能的解决方案是从这 70!个可能的解码器中随机采样,然后只从采样的排序中进行挑选。但是我们如何从 70!中进行采样?根据字母表,均匀随机采样并不是一个好主意,因为那不太可能让我们快速获得理想解决方案。
我们希望的采样程序,能够选择具有高概率的良好解码器。好的解码器生成的文本几乎比所有其他解码器生成的文本具有更高概率。换句话说,给定数据,良好的解码器比其他解码器具有更高的可能性。
您可以使用贝叶斯规则记下这种可能性。让 \(S\)代表所有可能排列的空间; 如果字母表有 \(N\)字符,然后\(S\)有\(N!\)个元素。对于任何随机挑选的排列\(j\),给出数据的解码器的概率是:
\begin{align}
\text{Likelihood of } j \text{ given the encoded text}
&= \frac{\frac{1}{N!} P(\text{encoded text} \mid \text{decoder = }j)}
{ {\sum_{i \in S} } \frac{1}{N!} P(\text{encoded text} \mid \text{decoder = }i)} \ \
&=\frac{P(\text{encoded text} \mid \text{decoder = }j)}
{ {\sum_{i \in S} } P(\text{encoded text} \mid \text{decoder = }i)}
\end{align}
对于给定的编码文本,分母是使所有似然性总和为 1 的归一化常数项。它出现在每个解码器的可能性中。在我们使用三个字母字母表的示例中,我们忽略了它,因为我们可以找出所有六个解码器的分子并且只是比较它们。分子就是我们称之为解码器的分数。
即使字母表很大,对于任何特定的解码器 \(j\)我们可以通过转移概率顺序相乘计算得到分子,就像我们在我们的例子中所做的那样。但是对于所有可能的解码器,我们无法对全量解码器执行此操作,因此我们无法列出所有可能的分数,我们无法对他们求和。因此,我们不知道可能性的分母,甚至找不到合适的近似值。
我们现在需要的是一种方法,即使我们不知道归一化常数,也可以从概率分布中得出一个近似解。这就是 Markov Chain Monte Carlo 帮助我们做的事情。
马尔可夫链蒙特卡罗法
马尔可夫链蒙特卡罗(MCMC)的目标是从复杂的高维分布中生成随机样本,这种情况下,我们的信息不完整。例如,我们可能不知道分布的归一化常量,正如我们在上一节的示例中看到的那样。
比如我们想根据分布\(\pi\)生成样本。我们就假设\(\pi\)是一个非常巨大有限集上的概率分布。MCMC 依赖于较少的采样值。
-
设$X_0, X_1, \ldots \(是一个定义在有限空间上的不可约非周期性马尔科夫链。那么,当\)n\(变大时,\)X_n\(的分布趋向于稳态。如果我们可以创建一个稳态分布为\)\pi$ 的马尔科夫链\(\{X_n\}\) ,那么我们使用对于一个较大值\(n\)的 \(X_n\),来长期运行链条,从而模拟\(\pi\)(或其近似值)。
-
构建一个使得最终稳态分布为\(\pi\)的转移矩阵的最简单的方式是保证详细平衡方程有解。换言之,最简单的方法是尝试创建一个可逆链。
-
如果链是可逆的,那么详细平衡方程可以改写为:
右侧只涉及我们想要创建的链的转移概率。左侧仅涉及\(\pi\)中的项的比率。因此,即使我们不知道使\(\pi\)归一化的常数,也可以得到校验。
Metropolis 算法
究竟是谁第一个提出了相关算法来创建这样的马尔可夫链存在一定争议。黑斯廷斯提出了一般版本。在这里,我们将描述于 1953 年由 Metropolis 和共同作者提出的早期版本。
目标是创建一个转移矩阵 \(\mathbb{P}\),使得\(\pi\)和\(\mathbb{P}\)能一起求解详细平衡方程。
该算法基于任意的对称转移矩阵\(Q\),该矩阵会在状态空间上创建一个不可约的非周期性链。例如,如果状态空间是数值,你可以用“无论链条,它选择三个最接近的值(包括自身,每个的概率都是\(1/3\))中的一个”开始链。对于一对状态\(i\)和\(j\),转移概率\(Q(i, j)\)被称为提议概率。
以下是确定新链转移的步骤。
-
假设连载时刻\(n\)时为状态\(i\),即\(X_n = i\)。根据提议概率\(Q(i, j)\)选择一个状态\(j\)。这个\(j\)是链可能的目的状态。
-
定义接受概率如下
-
如果 \(r(i, j) \ge 1\), 则 \(X_{n+1} = j\).
-
如果 \(r(i, j) < 1\), 通过抛硬币的方式,随机选择\(r(i, j)\)。
- 如果硬币正面向上,则 \(X_{n+1} = j\).
- 如果硬币反面向上,则 \(X_{n+1} = i\).
-
以 \(X_{n+1}\)为起始值,重复所有步骤。
因此,新链要么移动到\(Q\),要么保持原样。我们说它基于\(Q\)和\(r\)接受移动到新状态,否则它不动。
因为提案链是不可约的,新的链条也是不可约的。因为它可以保持原位,所以它是非周期性的。因此它具有稳态分布。算法表示这种稳态分布与\(\pi\)相同,即我们定义的\(r(i, j)\)。
算法的相关思考
在我们证明算法有效之前,让我们先来看看它在解码器环境中的作用。
首先注意\(Q\)是对称的,也是不可约的。对称性要求是有意义的,因为每个详细的平衡方程涉及转移\(i \to j\)和\(j \to i\)。
修正启动的解码器并将其命名为\(i\)。现在你必须决定链接下一步的位置,即下一个解码器是什么。由该程序启动的算法,在根据\(Q\)选择了一个\(j\)之后会关闭。我们称之为\(Q\) 建议移动到\(j\)。
分布\(\pi\)包含所有解码器的可能性,决定链是否应移至\(j\)的根本因素是希望最终得到具有高可能性的解码器,因此需要比较\(\pi(i)\)和\(\pi(j)\)。
该算法通过比较接受比率 \(r(i, j) = \pi(j)/\pi(i)\) 和 1 之间的大小。
-
如果\(r(i, j) \ge 1\),那么\(j\)的概率至少和\(i\)一样大,所以你接受提议并且移动到\(j\)。
-
如果\(r(i, j) < 1\),那么建议的解码器\(j\)的可能性比当前的\(i\)要小,所以暂时先保持在\(i\)。但这可能会使链条陷入局部最大值。该算法通过抛硬币(随机选择)提供了避免这种情况的机会。如果硬币为反面,即使\(j\)比当前具有更低的可能性,链条移动到\(j\)。我们的想法是,从这个新位置开始,可能存在解码器的路径,这些解码器具有最高的可能性。
算法实践
我们现在将表明由 Metropolis 算法创建的链的详细平衡方程,是如何通过期望\(\pi\)和转移矩阵\(\mathbb{P}\)求解的。
选择任意两个状态\(i\)和\(j\)
案例 1: \(\pi(i) = \pi(j)\)
当\(r(i, j) = 1\)。通过算法和\(Q\)的对称性,有\(P(i, j) = Q(i, j)\)和\(P(j, i) = Q(j, i) = Q(i, j)\)。
因此,\(P(i, j) = P(j, i)\),满足详细平衡方程\(\pi(i)P(i, j) = \pi(j)P(j, i)\)。
案例 2: \(\pi(j) < \pi(i)\)
当 \(r(i, j) < 1\),有
此时 \(r(j, i) > 1\),则根据算法有 \(P(j, i) = Q(j, i)\)。
因此
这与下面是一样的
案例 3: \(\pi(j) > \pi(i)\)
交换案例 2 中\(i\)和\(j\)的角色。
以上就是!一个简单而出色的想法,为困难问题提供解决方案。在实验中,当您实现解码文本的算法时,您将看到它的实际效果。
十二、标准差
译者:cn-Wziv
随机变量X的期望值\(\mu_{X}\)是X的分布中心的度量,但是我们知道X不必等于\(\mu_{X}\); 实际上,\(\mu_{X}\)甚至不需要是X的可能值。
\(\mu_{X}\)距离\(X\)能有多远呢?本章将回答这个问题。
作为一个起点,很自然地看出与平均值的偏差。$$X-\mu_{X}$$
并试着了解我们的期望。 通过线性函数规则,$$E(X-\mu_{X}) = E(X)-\mu_{X} = \mu_{X}-\mu_{X}$$
对于每个随机变量,与均值的预期偏差为 0.正偏差完全抵消了负偏差。
这种取消使我们无法了解偏差的大小,无论其符号如何。但是,如果我们想要测量随机变量之间的距离,那就是我们需要测量的\(X\)及其期望值\(\mu_{X}\)。
我们必须以某种方式摆脱偏差的迹象。摆脱数字符号的一种历史悠久的方法是取绝对值。另一个是对数字进行平方。这是我们将使用的方法。正如您将看到的,它会导致一定程度的传播,这对于理解大样本的总和和平均值至关重要。
12.1 定义
测量平方偏差的粗略大小具有避免正误差和负误差之间的抵消的优点。缺点是平方偏差具有难以理解的单位。我们即将定义的传播指标可以解决这个问题。
均方根平均偏差
设X为期望\(\mu_{X}\)的随机变量。X的标准偏差,表示为SD(X)或\(\sigma _{X}\),是与平均值的偏差的均方根。
SD(X)具有与X和E(X)相同的单位。在本章中,我们将精确地确定标准偏差测量X围绕中心\(\mu_{X}\)的分布的传播。
平方根内的数量称为X的方差,并且具有比\(SD\)更好的计算属性。这与毕达哥拉斯定理的事实密切相关,距离的平方以有用的方式结合在一起。
几乎无一例外,我们会先寻找差异,然后采取平方根计算标准偏差。
让我们在具有以下定义的分布的随机变量X上尝试\(SD\)的定义。
x = make_array(3, 4, 5)
probs = make_array(0.2, 0.5, 0.3)
dist_X = Table().values(x).probability(probs)
dist_X
| value | Probability |
|---|---|
| 3 | 0.2 |
| 4 | 0.5 |
| 5 | 0.3 |
dist_X.ev()
4.0999999999999996
下面是预期的偏差平方E(X)=4.1.
sd_table = Table().with_columns(
'x', dist_X.column(0),
'(x - 4.1)**2', (dist_X.column(0)-4.1)**2,
'P(X = x)', dist_X.column(1)
)
sd_table
| x | (x-4.1)**2 | P(X=x) |
|---|---|---|
| 3 | 1.21 | 0.2 |
| 4 | 0.01 | 0.5 |
| 5 | 0.81 | 0.3 |
X 的标准偏差是均方偏差的平方根。下面的计算表明它的数值是SD(X)=0.7
sd_X = np.sqrt(sum(sd_table.column(1)*sd_table.column(2)))
sd_X
0.69999999999999996
应用于分布对象的prob140方法sd返回标准偏差,从而节省上述计算。
我们现在知道如何计算SD。但我们还没有很好地理解它的作用。让我们开始开发它应该拥有的一些属性。然后我们可以检查它是否有它们。
首先,常量的SD应为 0.您应该检查这确实是定义所暗示的。
移动和缩放
SD 是衡量传播的标准。如果我们只是将概率直方图向左或向右移动,那么希望传播度量保持不变是很自然的。当我们向随机变量添加常量时会发生这种转变。下图显示了与上述相同的X的分布以及X+5的分布。很明显,X+5应该与X具有相同的SD。
dist2 = Table().values(x+5).probability(probs)
Plots('X', dist_X, 'X+5', dist2)

另一方面,将X乘以常数会导致应该具有不同点差的分布。这是X的分布以及4X的分布。4X分布的扩散似乎是X的四倍。
dist3 = Table().values(4*x).probability(probs)
Plots('X', dist_X, '4X', dist3 )
plt.xlim(0, 40);

乘以-4 应该与乘以 4 对扩散产生相同的影响,如下图所示。一个直方图就是另一个直方图关于垂直轴的镜像为 0,传播没有变化。

上图帮助我们可视化随机变量线性变换时 SD 会发生什么,让Y=aX+b,然后

请注意,当乘以a和-a时,得到相同的答案。 这就是两个“镜像”直方图所显示的内容。
特别是,记住它是非常方便的SD(X)=SD(-X).
方差的“计算”公式
方差公式的代数简化证明是非常有用的。

因此,方差是“平方的平均值减去平均值的平方”。
虽然这通常被称为方差的“计算”公式,但如果 X 的可能值很大且很多,则它在数值上可能是不准确的。然而,对于代数计算,它非常有用。以下是几个例子。
指示符
指标随机变量的值是 0 和 1.这两个数中的每一个都等于其平方。所以,如果我是一个指标,那么 I2 = I,因此

当p=0.5时,您应检查此方差是否最大。用平方根得到

标准化
让U在1,2,3,4...,n上统一。

在上面的最后一步中,我们使用公式表示前 n 个方块的总和。
我们知道E(U)=(n+1)/2,所以

并且

通过移位,这与任何 n 个连续整数上的均匀分布的 SD 相同。
泊松
让X拥有泊松u分布。在前一章中我们展示了这一点

我们也知道E(X)=μ,所以

并且

因此,例如,如果X具有泊松(5)分布,则E(X)=5并且SD(X)=√5≈2.24。在本章的其余部分,我们将尝试弄清楚这意味着什么。
12.2 预测和估计
考虑SD的一种方法是预测误差。 假设我要生成随机变量的值X,我要求你预测我将获得的值。你应该用什么作为预测器?
一个自然的选择是μX,X的期望。 但你可以选择任何数字c。您将犯的错误是X-c。那有多大?对于c的最合理选择,误差有时是正的,有时是负的。要找到此错误的粗略大小,我们将避免像以前一样取消,并从计算均方误差开始\(E[(X-c)^2]\).
因为我们已经猜到μX可能是一个不错的选择,我们将围绕该值组织代数。使用c作为预测器的均方误差是

当且仅当c=μX时相等。
均值作为最小二乘预测器
我们所展示的是预测器μX在所有选择中具有最小的均方误差c。最小均方误差是 X 的方差,因此最小均方根误差是SDσX。
这就是为什么一种常见的预测方法是“我的猜测是平均值,而且我将会关闭SD。”
比较估算
如果我们有一个参数的两个竞争估计器,我们可以使用期望值和SD来比较它们。
作为一个例子,回想一下数据 8 的德国战机示例。模型是我们观察X1,X2,...,Xn,这是随机抽取的 n 个抽签,替换为1,2,...,N。目标是估算战斗机总数 N.
一个自然估计是M = max(X1,X2,...,Xn)。在本文前面比在数据 8 中更仔细地开发的另一个是2A-1,其中A =(X1 + X2 + ... + Xn)/n是样本平均值。
这是我们在数据 8 中进行的模拟,使用大小为 30 的样本来估计我们已经采用的N为 300。
N = 300
n = 30
serial_nos = np.arange(1, N+1)
repetitions = 10000
maxes = make_array()
double_means = make_array()
for i in range(repetitions):
sample = np.random.choice(serial_nos, size=n)
maxes = np.append(maxes, np.max(sample))
double_means = np.append(double_means, 2*np.mean(sample)-1)
results = Table().with_columns(
'M', maxes,
'2A - 1', double_means
)
every_ten = np.arange(1, N+101, 10)
results.hist(bins=every_ten)

我们将估计器2A-1构造成无偏的,并且其经验分布实际上围绕参数300对称。估计器MM明显偏向:它永远不会大于NN但是它可以更小。如果我们只是比较期望,那么E(2A-1)=300而E(M)≠300,所以似乎2A-1是更好的估计。
但该图表说明了一个不同的故事,因为该图表还显示了两个分布中的每一个的分布。2A-1的分布比MM的分布更加分散。两个经验的SD相差 3.5 左右:
np.std(maxes)
9.6906610383399538
np.std(double_means)
31.574078469134559
这告诉我们虽然MM通常会低于 300,但它不会低于 300,而2A-1可能远远低于 300,低估了它的高估频率。
也许现在你更喜欢使用MM而不是2A-1。
这是估计中常见的偏差 - 方差权衡的一个例子。在选择一个估算器而不是另一个估算器时,期望和SD都很重要。 如在此示例中,选择并不总是清楚的。但是如果SD较低的估算器也恰好是无偏见的,那么你可以宣布它是胜利者。
12.3 尾界
如果你知道E(X)和SD(X),你就可以知道 X 分布的尾部有多少概率。
在本节中,我们将获得概率的上限,例如下图中的黄金区域。对于随机变量X,它是P(X≥20),其分布显示在直方图中。

单调性
为此,我们将首先观察 X 的功能期望。
假设gg和 h 是g(X)≥h(X)的函数,即P(g(X)≥h(X))=1。然后E(g(X))≥E(h(X))。当你注意到结果空间中的所有ωω时,这个结果很明显,(g∘X)(ω)≥(h∘X)(ω),因此(g∘X)(ω)P(ω)≥(h ∘X)(ω)因此

现在假设 XX 是非负随机变量,并且cc是正数。考虑下面的两个函数gg和hh。

对于所有 xx,函数 gg 是标识g(x)= xg(x)= x。它使 xx 保持不变。所以E(g(X))= E(X)E(g(X))= E(X)。
函数 hh 在 cc 处截断 xx 如下:如果x<cx<c则h(x)=0h(x)=0,并且如果x≥cx≥c则h(x)= ch(x)= c。所以

显然 g>=h,所以

马尔可夫不等式
设 X 为非负随机变量。 然后对于任何c > 0

这个结果被称为“尾部绑定”,因为它对 cc 的右尾部的大小设置了一个上限。 值得注意的是,马氏波的P(X> c)≤P(X≥c)≤E(X)/c。
在下图中,E(X)= 6.5,c = 20。马尔科夫的不平等表明黄金面积最

你可以看到界限非常粗糙。 黄金面积显然略低于 0.325。

另一种思考马尔科夫界限的方法是,如果 X 是非负随机变量那么

即P(X≥2μX)≤1/2,P(X≥5μX)≤1/5,依此类推。非负随机变量至少是平均值的 k 倍的概率最多为 1/k。
注释:
•k 不必是整数。例如,非负随机变量至少为平均值的 3.8 倍的概率最多为 1/3.8。
•如果 k≤1,则不等式不会告诉您任何您不知道的事情。如果 k≤1 则 Markov 的界限为 1 或更大。所有概率都高于 1,因此不等式是正确的,但对于 k≤1 则无用。
•当 k 很大时,边界会告诉你一些事情。你正在观察分布尾部相当远的概率,马尔可夫的界限是 1/k,这是小的。
切比雪夫不等式
马尔可夫的约束只使用E(X),而不是SD(X)。为了获得尾部的界限,如果可以的话,最好使用SD(X)。切比雪夫的不平等就是这样。 它在一个与E(X)对称的区间外的两条尾部提供一个边界,如下图所示。

红色箭头像往常一样标记μX,现在两个蓝色箭头位于平均值两侧的SD(X)距离处。将E(X)视为“原点”并以任何一方的SD为单位测量距离通常会很方便。
因此,对于某些正z,我们可以将黄金区域视为XX与μX至少相差±SD的概率。现在

切比雪夫的不等式没有假设分布的形状。 这意味着无论 X 的分布如何

也就是说,无论分布的形状如何,概率的大部分都在“预期值加上或减去几个 SD”的区间内。
这是SD是衡量传播的一个很好的衡量标准的一个原因。无论分布如何,如果您知道期望值和SD,那么您就可以很好地了解概率的大部分位置。
如果你碰巧了解更多关于分布的信息,那么你当然可以做得比切比雪夫更好。但总的来说,切比雪夫的界限和你能做的一样,没有做出进一步的假设。
标准单位
为了形成“将μX设置为原点并以σX为单位测量距离”的概念,我们将标准单位中称为“X的随机变量Z”定义如下:

Z测量相对于其SD,X高于其平均值的距离。换句话说,X是平均值以上的ZSD:

重要的是要学会在这两种测量尺度之间来回切换,因为我们将经常使用标准单位。注意,通过线性函数规则,

无论 X 的分布是什么。
切比雪夫不等式表示:

同时:

因此,如果您已将随机变量转换为标准单位,则标准化变量的绝大多数值应在-5 到 5 的范围内。有可能存在该范围之外的值,但不太可能。
切比雪夫不等式的另一种写法
切比雪夫不等式通常写成如下:
对所有 c>0,

这与我们的陈述相同,但用 c 代替zσX。我们将使用在给定设置中方便的任何形式。
12.4 尾重
这个简短的部分展示了一个例子,说明期望和标准差虽然在许多情况下非常有用,但在分布冗长乏味时却不够充分。 这是一个这样的分布。
N = 1000
n = np.arange(1, N+1, 1)
probs = (1/n)*(1/np.sum(1/n))
dist = Table().values(n).probability(probs)
Plot(dist)
plt.xlim(0, N/10);

你可以看到尾巴伸展得很远。 如果我们独立于该群体进行抽样,样本平均值如何表现?平均值受尾部值的影响。
让我们模拟这个分布中 500 大小的随机样本的平均值的分布。我们将做 10,000 次重复以试图让经验分布稳定下来。
means = make_array()
for i in range(10000):
means = np.append(means, np.mean(dist.sample_from_dist(500)))
Table().with_column('Sample Means', means).hist(bins=20)

这是一个令人喜爱的的发行版,但看看它的中心位置。 中心位于 130 以上,而原始分布看起来好像在 100 左右:
Plot(dist)
plt.xlim(0, N/10);

这是我们必须记住的原始分配实际上是 1000.尽管在我们的图表的规模上尾部几乎不可见 100,它就在那里,它正在影响期望。 预期值约为 133.6,这解释了样本平均值的经验分布的中心。
dist.ev()
认识到上述直方图的平衡点在图表上甚至不可见是令人清醒的。尾部有足够的质量可以将平衡点拉向右侧。
我们如何将这与 Chebyshev 的不等式相协调,告诉我们大部分概率在平均值的几个 SD 内?找出的唯一方法是计算分布的 SD。
133.59213049244224
认识到上述直方图的平衡点在图表上甚至不可见是令人清醒的。尾部有足够的质量可以将平衡点拉向右侧。
我们如何将这与 Chebyshev 的不等式相协调,告诉我们大部分概率在平均值的几个 SD 内?找出的唯一方法是计算分布的 SD。
dist.sd()
221.39558257101038
我们终于得到它了。SD 很大,甚至比平均值还要大。长尾使 SD 非常大 - 即使间隔“预期值加上或减去一个 SD”也非常宽,并且几乎包含所有数据。
要分析像这样的重尾分布,预期值和 SD 不是最佳使用量。有关应该使用什么的大量且不断增长的文献。您可能会在更高级的课程中遇到它。
Zipf 定律
如果你学习自然语言处理,语言学,经济学,甚至城市人口,你几乎肯定会遇到像这样的分布。本节中使用的示例是在这些字段中出现的 Zipf 分布之一。
Zipf 定律是一种经验观察的定律,它表示在大量单词中,单词的频率与频率表中的排名成反比。也就是说,第二个最常出现的单词的频率是最频繁出现的频率的一半。第三个最常出现的单词的频率是最常见单词频率的三分之一。等等。
根据维基百科的说法,“...在美国英语文本的布朗语料库中,”the“这个词是最常出现的单词,并且自身占所有单词出现次数的近 7%(略超过 100 万的 69,971)根据 Zipf 定律,第二位词“of”占据了超过 3.5%的单词(36,411 次出现),其次是“and”(28,852)。只需要 135 个词汇项来占布朗语料库的一半。 “
现在再看看我们的示例中的底层分布是如何定义的:
N = 1000
n = np.arange(1, N+1, 1)
probs = (1/n)*(1/np.sum(1/n))
我们假装我们有一个按排名顺序排列的 N = 1000 个单词的语料库,其中 Rank1 被授予最常出现的单词。 概率与秩成反比。 请注意,1 / np.sum(1 / n)只是比例常数,使概率加起来为 1.如果调用常数 c,则概率为:

请注意\(E(X)=cN\) and \(E(X^2)=c\cdot \frac{N(N+1)}{2}\),所以\(Var(X)=(\frac{c}{2}-c^2)^2N^2+(\frac{c}{2})N\)
当 N 变大时,E(X)和 SD(X)都会以无法获得有用结果的速率进入无穷大。
十三、方差和协方差
译者:cn-Wziv
在本章中,我们回到随机抽样并研究随机样本总和的可变性。值得花一些时间来理解样本总和的行为,因为许多有趣的随机变量(如成功计数)可以写成总和。二项式和超几何随机变量就是这样的总和。此外,随机样本的均值是样本和的直接函数。
设 X 是随机变量。 我们将使用一些熟悉的速记:

令DX = X-μX表示 X 与其平均值的偏差。然后

总和的方差
设 X 和 Y 是同一空间上的两个随机变量,设S = X + Y. 那么E(S)=μX+μY,S 的偏差是 X 和 Y 的偏差之和:

这让我们对总和 S 的方差有了一些了解。

首先要注意的是,虽然和的期望是期望的总和,但上面的计算表明,总和的方差通常不是方差的总和。还有一个额外的术语。
要计算总和的方差,我们必须理解额外的术语。
协方差
X 和 Y 的协方差,表示为Cov(X,Y),是 X 和 Y 偏差的预期乘积:

在本章中,我们将学习如何利用协方差来找出总和的方差。 基本计算是我们上面做的那个; 这是使用协方差语言的结果。

13.1 协方差的性质
让我们来看看协方差的行为方式。在接下来的两节中,我们将使用我们的观察来计算样本总和的方差。
建立协方差的性质涉及简单的观察和常规代数。我们在下面做了一些,我们希望你可以填写其余部分。
回想一下 X 的协方差和 Y.是

这个头衔具有“duh”品质。 但是仍然值得注意的是,任何常数c,

方差是协方差
协方差是方差概念的延伸,因为

X 的方差是 X 与其自身的协方差。
协方差是对称的
显然\(Cov(Y,X)=Cov(X,Y)\),它遵循:

这种思考和的方差的方法将在以后有用。
协方差和预期产品
协方差是预期的产品:它是偏差的预期产品。它也可以用 X 的预期产品来编写 和 Y,如下

所以协方差是产品的平均值减去均值的乘积。取X = Y得到一个熟悉的事实,即方差是平方的平均值减去平均值的平方。
这个结果简化了协方差事实的证明,如下所示。但作为一种计算工具,它仅在 X 和 Y 的分布非常简单时才有用 - 例如,当每个分布只有几个可能的值时。在协方差的其他计算中,尝试使用此结果很少是个好主意。相反,我们将使用下面的属性。
加法法则
上述属性的常规应用表明,对于任何随机变量 X,Y 和 Z,

只需写入Cov(X + Y,Z)= E [(X + Y)Z] -E(X + Y)E(Z),展开两个结果,并收集术语。
主属性:双线性
这是使用协方差的关键。首先,简单代数表明对于常数 a 和 b,

将此与加法规则放在一起得到

您可以看到协方差的行为与产品相似。通过归纳,

这可能看起来令人生畏,但实际上这个属性大大简化了计算。 它说你可以扩展协方差,就像两个总和的乘积一样。 例如,

你可以用\(Var(Y)\)代替\(Cov(Y,Y)\).
这些属性简化了计算。但他们并不了解协方差的含义。实际上理解协方差并不容易,因为它具有令人讨厌的单位:例如,如果 X 是以千克为单位的重量而 Y 是以厘米为单位的高度,那么协方差的单位是千克厘米。在本课程的后面,我们将看到如何规范化协方差以获得您在数据 8 中经常使用的相关系数。现在,这是一个属性,开始向您展示协方差可以有助于量化依赖性和独立性。
独立意味着不相关
设 X 和 Y 是独立的。然后

因此,如果 X 和 Y 是独立的,则\(Cov(X,Y)=0\)。 我们说 X 和 Y 是不相关的。
我们已经证明独立随机变量是不相关的。但是,不相关的随机变量必须是独立的。你将在练习中展示这一点。
13.2 IID 样本的总和
在对前一节进行干燥的代数讨论之后,最终能够计算出一些差异。
设X1,X2......Xn,用总和是随机变量

总和的方差是

我们说总和的方差是所有方差和所有协方差的总和。
如果X1,X2 ...,Xn是独立的,那么上面公式中的所有协方差项都是 0。
因此,如果X1,X2,...,Xn是独立的那么

因此,对于独立的随机变量X1,X2,...,Xn,期望值和方差都很好地相加:

当随机变量是 i.i.d.时,这进一步简化了。
IDD 样本的总和
令X1,X2,...,Xn为 i.i.d.,各自具有平均μ和SDSDσ。您可以将X1,X2,...,Xn视为随机抽取,从群体中替换,或者相同实验的独立复制的结果。
设 Sn 为样本和,如上所述。然后

这意味着随着样本大小 n 的增加,和 S 的分布向右移动并且更加分散。
这是这些结果中最重要的应用之一。
二项式的方差
设 X 具有二项式(n,p)分布。 我们知道

其中I1,I2,...,In是 i.i.d. 指标,每个指标以概率 p 取值 1。这些指标中的每一个都具有期望值 pp 和方差 pq = p(1-p)。因此

例如,如果 X 是 100 投掷硬币的头数,那么

这是 X 的分布。你可以看到在E(X)±3SD(X)范围之外几乎没有概率。
k = np.arange(25, 75, 1)
binom_probs = stats.binom.pmf(k, 100, 0.5)
binom_dist = Table().values(k).probability(binom_probs)
Plot(binom_dist, show_ev=True, show_sd=True)

13.3 简单随机样本的和
正在添加的随机变量不是独立的时,找到总和的方差确实涉及找到协方差。和以前一样,让X1,X2,...... Xn是和的随机变量

总和的方差是

在我们应用这个公式之前,让我们从找到一个简单的协方差开始。
指标
假设 A 和 B 是两个事件。设 IA 为 A 的指标,设 IB 为 b 的指标,这将是我们使用期望乘积求协方差的罕见例子之一。这是因为我们知道指标的乘积本身就是指标。

如果 A 和 B 是独立的,你可以看到协方差是 0,这与上一节更一般的结果是一致的。当 A 和 BB 不独立时,协方差帮助我们理解依赖的本质。例如,如果\(Cov(IA,IB)\)为正,则

也就是说,假设 A 发生了,B 发生的概率比总体高。这叫做 A 和 B 的正相关。
超几何方差
假设你有一个 NN 元素的总体 G 是好的。设 X 为从总体中抽取的 n 个元素的简单随机样本中好的元素个数。记住,简单的随机样本是没有替换的。
我们知道

其中\(I_j\)是绘制 j 的指示器,它产生了一个良好的元素。
通过对称性,我们知道\(E(J_i)=\frac{G}{N}\)对每个 j,这就是为什么

这和二项式的公式是一样的。
我们也知道,Var(I_{j})=\frac{G}{N}*\frac{B}{N}当 B=N-G 是不良人群中元素的数量。
也通过对称,Cov(Ij,Ik)是相同的每一对 j,k 当 j≠k。上面的例子告诉我们如何计算这个公共值。

因此,

当\(P=\frac{G}_{N}\)且 q=1-q 时
请注意,除了因子之外,公式与二项式的方差的公式相同\(\frac{N-n}{n-1}\)
我们可以将这个结果推广到人口不是二元的情况。
简单随机样本和的方差
假设我们有一个 N 个数的总体它不需要只有 0 和 1。假设人口意味着μ和标准差σ。从总体中抽取一个大小为 n 的简单随机样本。对于从 1 到 n 的 j,设 Xj 为第 j 个值。
让Sn=X1+X2+⋯+Xn,然后E(Sn)=nμ,并且

通过对称

如何找到Cov(X1,X2)尝试将两个变量相乘不是一个好主意,因为它们是相互依赖的,它们的分布可能不太好。预期的产品很难找到。
我们可以使用的是观察到我们在上面推导的Var(Sn)方程对于任何样本大小都是有效的。特别地,它在人口普查中是有效的,也就是说,当我们对人口的所有元素进行抽样时。在这种情况下 n=N 方程是

为什么有用?为了回答这个问题,考虑一下 SN 的变异。我们对整个种群进行了抽样,没有进行替换。因此 SN 就是整个种群的总数。SN 中没有抽样变异性,因为只有一个可能的 N 大小的样本。
这意味着 Var(SN)= 0。我们可以用这个解出 Cov(X1,X2)

现在把这个代入 Var(Sn)的公式对于任何较小的样本容量 n。

回想一下,样本的方差和样本时 nσ2 绘制与更换。当样本不重复,除系数外,公式是一样的$\frac{N-n}{N-1}。
这正是我们在二元总体的特殊情况中看到的。在本章的最后一节中,我们将研究有替换和没有替换的抽样之间的关系。
13.4 有限总体修正
数据科学家经常不得不使用来自庞大人口的相对较小的样本。 因此,假设我们从大小为 N 的群体中随机抽取 n 次,其中 NN 较大且 n 相对于 N 较小。现在请顺其自然 - 随着本节的发展,所有这些都将变得更加精确。
假设总体均值为μ且总体 SD 为σ。 设 Sn 是样本和。 然后,无论是否更换样品,

两种情况下样本总和的方差不同。

“无替换”列与“替换”列相同,除了所谓的校正因子。SD 的一个称为有限总体校正或 fpc。

这个名称的产生是因为替换的抽样可以被认为是抽样而无需从无限的人口中取代。每次画画时,你都会将人口中的比例与画之前的比例完全相同。
该图像的更真实的版本是绘制而无需从庞大的有限人口中取代。每次画画时,你在人群中的比例几乎与画之前完全相同。
我们之前使用过这个想法,当我们说没有替换的采样与替换采样几乎相同,只要您从非常大的人口中抽取相对较小的样本。
fpc 为我们提供了量化这个想法的方法。

FPC 的大小
首先要注意的是,当 N 甚至中等大时,

这是采样后留下的人口比例。
如果 N 大并且 n 相对于 N 小,那么

这也意味着

因此,无论您是使用替换还是不进行采样,样本总和的方差都可以取为 nσ2。在采样替换的情况下,该公式是精确的,并且当样本大小相对于种群大小较小时,在没有从大群体替换的情况下采样的情况下具有极好的近似。
下表给出了各种人口和样本量的 fpc。
pop = make_array(1000, 10000, 50000, 100000, 500000, 1000000)
def fpc(pct):
samp = np.round(pop*pct/100, 0)
return np.round(((pop-samp)/(pop-1))**0.5, 6)
Table().with_columns(
'Population Size', pop,
'1% Sample', fpc(1),
'5% Sample', fpc(5),
'10% Sample', fpc(10),
'20% Sample', fpc(20)
)

每列中的值基本上是不变的,因为每个列基本上是未采样的分数的平方根:
sample_pct = make_array(1, 5, 10, 20)
(1 - sample_pct/100)**0.5
array([ 0.99498744, 0.97467943, 0.9486833 , 0.89442719])
所有这些 fpc 值都非常接近 1,特别是在 1%的列中,它们基本上都是 0.995。 这就是为什么 fpc 经常从方差计算中删除的原因。
人口规模的(非)效应
简单随机样本和的 SD 仅取决于样本大小和总体 SD,前提是种群大小足以使 fpc 接近 1。
从公式中可以清楚地看出这一点。如果 fpc 接近 1,那么就像往常一样

其中仅涉及样本大小 n 和总体 SDσ。
为了直观地理解这一点,假设您正在尝试根据试管中的量确定液体的成分。 如果液体充分混合,试管中的量是从碗中还是从浴缸中取出是否重要? 它没有,因为碗和浴缸都比试管大得多,它们也可能是无限的。
十四、 中心极限定律
原文:prob140/textbook/notebooks/ch_14
译者:喵十八
自豪地采用谷歌翻译
本章依赖的 python
# HIDDEN
from datascience import *
from prob140 import *
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
%matplotlib inline
from scipy import stats
# HIDDEN
def dist_sum(n, probs_0_through_N):
"""Return the distribution of S_n,
the sum of n i.i.d. copies
of a random variable with distribution probs_0_through_N
on the integers 0, 1, 2, ..., N"""
# Find the possible values of S_n
N = len(probs_0_through_N) - 1
values_Sn = np.arange(n*N + 1)
# Find the probailities of those values
coeffs_X1 = np.flipud(probs_0_through_N)
pgf_X1 = np.poly1d(coeffs_X1)
pgf_Sn = pgf_X1**n
coeffs_Sn = pgf_Sn.c
probs_Sn = np.flipud(coeffs_Sn)
t = Table().with_columns(
'Value', values_Sn,
'Probability', probs_Sn
)
return t
中心极限定理
标准差是广为流传的衡量标准之一,此外,还有很多其他的衡量标准。为什么使用标准差?主要的原因是标准差和正态曲线之间的联系。为何正态曲线如此重要?本章将回答该问题。
我们将从分析一个独立同分布的概率和开始。并已知其均值和标准差。在本章中,我们将研究分布的形状:当我们可以计算它的精确形状时,我们计算它,当数据量过大时,我们计算一个其近似值。
精确分布
我们已经知道如何找到任意两个离散随机变量之和的分布。
如果\(X\)和\(Y\)是独立的,这简化为成为离散卷积公式:
通过归纳,我们可以将其扩展到任何有限数量的自变量的和。
所以原则上讲,我们知道如何找到\(n\)个(\(n > 1\))独立随机变量的概率分布之和。但是,对于很大的\(n\),这种方式很难实现。
在本节中,我们将研究另一种分布求和的方法。正如您将看到的,它更容易实现自动化,但最终也会遇到计算障碍。
概率生成函数
设\(X\)是一个随机变量,对于给定的\(N\),其可能取值为\(0, 1, 2, \ldots, N\)。
为简洁起见,令\(p_k = P(X = k)\),其中\(k\)的取值范围为 0 到\(N\)。
定义\(X\)的概率生成函数(pgf)为
对于具有无限多个非负整数随机变量的扩展,请参阅本节末尾的技术说明。
上面的定义表明对任何\(s\),有
你可以看到\(G_X\)是一个\(N\)次多项式,并且\(s^k\)的系数是\(p_k = P(X=k)\)。
因此,如果给你一个随机变量的 pgf,你可以通过简单地列出所有的权重和相应的系数来计算出随机变量的分布。
要了解这如何帮助我们找到总和的分布,请观察每一个\(s\),\(G_X(s)\)的期望为
因此,如果\(X\)和\(Y\)是独立的非负整数随机变量,那么对于每个\(s\)有
我们已经使用了这样的事实:对于独立的随机变量,其相乘的期望是期望的相乘。
结果表明两个独立随机变量之和的 pgf 是两个 pgf 的乘积。这很容易扩展到两个以上的随机变量,并为独立同分布变量之和的 pgf 产生一个简单的公式。
一个独立同分布样本分布之和的 PGF
设\(X_1, X_2, \ldots, X_n\)是分布在\(0, 1, 2, \ldots, N\)上的独立同分布事件。令\(S_n = X_1 + X_2 + \cdots + X_n\),那么\(S_n\)的 pgf 为:
因为\(G_{X_1}\)是一个\(N\)次多项式,\(G_{S_n}\)也是一个\(nN\)次多项式。与任何 pgf 一样,\(s^k\)的系数是\(k\)的概率。也就是说,对于每一个在 0 到\(nN\)范围内的\(k\)有
我们现在有一个查找\(S_n\)分布的算法。
- 从\(X_1\)的 pgf 开始。
- 增加幂至\(n\)。也就是\(S_n\)的 pgf。
- 读取\(S_n\)的 pgf.
精彩!我们完成了!除了实际上这样做涉及将多项式升幂。当数很大时,这是一项艰巨的任务。
幸运的是,正如您将在下一节中看到的那样,NumPy使用一组多项式方法来解决问题。
技术说明。我们已经为具有有限多个非负整数值的随机变量定义了概率生成函数。该定义可以扩展到具有无限多个非负整数值的随机变量。但在这种情况下,pgf 是一个无限系列,我们必须小心收敛。通常,pdf 是的值域 \(|s| \le 1\),这样它就会收敛。
NumPy 中的 PGF
回忆一下,我们找到\(S_n\)分布的算法。
- 从\(X_1\)的 pgf 开始。
- 增加幂至\(n\)。也就是\(S_n\)的 pgf。
- 读取\(S_n\)的 pgf.
在本节中,我们将使用NumPy实践此算法。
假设\(X_1\)的分布为\(p_0 = 0.1\),\(p_1 = 0.5\),\(p_2 = 0.4\)。令数组probs_X1包含了 0,1,2 的概率。
probs_X1 = make_array(0.1, 0.5, 0.4)
dist_X1 = Table().values(np.arange(3)).probability(probs_X1)
Plot(dist_X1)
![pngimg/14_02_output_5_0.png)
\(X_1\)的 pgf 是:
NumPy 以标准的数学方式表示这个多项式,以最高次项开始:
方法np.flipud将概率数组反转为与该系数的顺序一致。ud代表“up down”。NumPy 正在考虑将数组作为一个列。NumPy考虑将该数组转为一列。
coeffs_X1 = np.flipud(probs_X1)
coeffs_X1
array([ 0.4, 0.5, 0.1])
方法np.poly1d以系数数组为参数,构造多项式。方法名中的1d代表"一维"。
pgf_X1 = np.poly1d(coeffs_X1)
print(pgf_X1)
2
0.4 x + 0.5 x + 0.1
调用print方法,打印出该多项式。在\(s\)的位置,用\(x\)代替表示。请记住,最后一项是\(x^0\)的系数。
现在假设\(S_3\)是三个\(X_1\)副本的和。\(S_3\)的 pgf 是\(X_1\)pgf 的三次方,并且可以按照您的希望计算。
pgf_S3 = pgf_X1**3
print(pgf_S3)
6 5 4 3 2
0.064 x + 0.24 x + 0.348 x + 0.245 x + 0.087 x + 0.015 x + 0.001
\(S_3\)中多项式的幂为从 0 到 6,因为\(S_3\)是三个幂从 0 到 2 的值的副本的和。系数是\(S_3\)分布的概率。
你可以使用属性c输出其“系数”。
coeffs_S3 = pgf_S3.c
coeffs_S3
array([ 0.064, 0.24 , 0.348, 0.245, 0.087, 0.015, 0.001])
这些是从 6 次到 0 次项的系数。在概率中,更习惯从低到高的顺序来看,所以再使用一次np.flipud:
probs_S3 = np.flipud(coeffs_S3)
probs_S3
array([ 0.001, 0.015, 0.087, 0.245, 0.348, 0.24 , 0.064])
您现在拥有绘制\(S_3\)的概率直方图所需的输入了
dist_S3 = Table().values(np.arange(7)).probability(probs_S3)
Plot(dist_S3)
![pngimg/14_02_output_17_0.png)
计算分布\(S_n\)的函数
我们将结合上面的步骤来创建一个函数dist_sum,入参为副本个数\(n\)和\(X_1\)的分布,返回值为\(n\)个\(X_1\)的副本的和的分布。
def dist_sum(n, probs_0_through_N):
"""Return the distribution of S_n,
the sum of n i.i.d. copies
of a random variable with distribution probs_0_through_N
on the integers 0, 1, 2, ..., N"""
# Find the possible values of S_n
N = len(probs_0_through_N) - 1
values_Sn = np.arange(n*N + 1)
# Find the probailities of those values
coeffs_X1 = np.flipud(probs_0_through_N)
pgf_X1 = np.poly1d(coeffs_X1)
pgf_Sn = pgf_X1**n
coeffs_Sn = pgf_Sn.c
probs_Sn = np.flipud(coeffs_Sn)
t = Table().with_columns(
'Value', values_Sn,
'Probability', probs_Sn
)
return t
\(n\)次掷骰子游戏的和
在第 3 章中,我们通过列出所有的\(6^5\)种可能情况,并计算他们从而找到了 5 次掷骰子游戏的和的分布。这种方法难以处理大数据量的情况。让我们看看我们的新方法是否可以找到 10 个骰子总和的分布。
我们必须从单个筛子的分布开始,为此重要的是要记住包含 0 作为 0 个点的概率。否则 pgf 将是错误的,因为NumPy不知道它不应该包括 0 次项。
die = np.append(0, (1/6)*np.ones(6))
die
array([ 0. , 0.16666667, 0.16666667, 0.16666667, 0.16666667,
0.16666667, 0.16666667])
Plot(dist_sum(1, die))
![pngimg/14_02_output_22_0.png)
Plot(dist_sum(10, die))
![pngimg/14_02_output_23_0.png)
制作波
10 个筛子和的分布,看上去很符合正态分布。是所有的和都这样么?
要探索这个问题,让\(X_1\)的分布为\(p_1 = p_2 = p_9 = 1/3\)
probs_X1 = make_array(0, 1/3, 1/3, 0, 0, 0, 0, 0, 0, 1/3)
这是\(X_1\)的分布。
Plot(dist_sum(1, probs_X1))
![pngimg/14_02_output_27_0.png)
\(S_{10}\)的概率直方图表明“和”并不总是具有平滑的分布。
Plot(dist_sum(10, probs_X1))
![pngimg/14_02_output_29_0.png)
\(S_{30}\)的分布看上去头发乱糟糟的剑龙。
Plot(dist_sum(30, probs_X1))
![pngimg/14_02_output_31_0.png)
\(S_{100}\)的分布是:
Plot(dist_sum(100, probs_X1))
![pngimg/14_02_output_33_0.png)
... 非常正态分布了.
这看起来好像这里有什么定理。在本章的其余部分,我们将研究该定理,该定理是关于大量独立同分布样本之和的近似分布。
请记住,只要NumPy能够处理计算,我们的 pgf 方法就能求出有限多个非负整数上的独立同分布样本分布总和的精确分布。在上面的例子中, \(S_{100}\)的 pgf 是一个最高次项为 900 的多项式。NumPy处理得很好。
中心极限定理
顾名思义,这个定理是概率,统计和数据科学领域的核心。它解释了上一节中出现的正态曲线。
在我们得到定理之前,让我们回顾一下数据 8 和本课程前面的一些事实。
标准单位
正如我们之前看到的,随机变量 \(X\)转换为标准单位如下
\(Z\)以标准差为单位,衡量了\(X\)离开均值的距离(如,均值 4,标准差 1,5 就离开均值 1 个标准差的距离)。换句话说\(Z\)表示了\(X\)高于均值的标准差的数。
按线性函数规则,无论\(X\)的分布是什么,都有
标准正态曲线
回顾数据 8,标准正常曲线由通常用小写希腊字母 phi,\(\phi\)表示的函数定义,。
# HIDDEN
Plot_norm(x_limits=(-4, 4), mu=0, sigma=1)
plt.xlabel('$z$')
plt.ylabel('$\phi(z)$', rotation=0)
plt.title('Standard Normal Curve');
![pngimg/14_03_output_5_0.png)
该曲线关于 0 对称。其拐点在\(z=-1\)和\(z=1\)。您在 Data 8 中观察到了这一点并且可以通过微积分证明它。
术语 我们将说曲线具有位置参数 0 和比例 参数 1。我们还将使用术语平均值来表示位置和标准差来表示比例,类似于标准单位中随机变量的均值和标准差。在本课程的后面,我们将证明这与具有连续值的随机变量的均值和标准差的定义一致。
曲线下的总面积为 1。这需要一些工作来证明。您可能已经在微积分课中看到过它。我们将在课程的后期使用概率方法证明它。
如果是随机变量\(X\)的分布大致是钟形,那么标准化变量\(Z\)的分布大致遵循上面的标准正态曲线。
请注意,几乎没有概率落在范围$(-3, 3)之外。回顾一下数据 8 中的一下数据:
- 介于-1 和 1 之间的面积:约 68%
- 介于-2 和 2 之间的面积:约 95%
- 介于-3 和 3 之间的面积:约 99.73%
正态曲线
标准正态曲线是这样一类正态曲线,由其位置和比例参数参数,及均值和标准差确定。
均值为\(\mu\),方差为\(\sigma\)的正态曲线定义如下:
# HIDDEN
Plot_norm(x_limits=(-4, 4), mu=0, sigma=1)
plt.xlabel('$x$')
plt.ylabel('$f(x)$', rotation=0)
plt.yticks(np.arange(0, 0.401, 0.05), np.array(7*['']))
plt.xticks(np.arange(-4, 4.1), ['','','$\mu-2\sigma$', '$\mu - \sigma$', '$\mu$', '$\mu+\sigma$','$\mu+2\sigma$',''])
plt.title('Normal Curve, mean $\mu$, SD $\sigma$');
![pngimg/14_03_output_8_0.png)
形状看起来与标准正常曲线完全相同。唯一的区别在于轴上的测量尺度。中心现在是\(\mu\)而不是 0,并且拐点远离中心距离是以\(\sigma\)为单位而不是 1。
现在给出正态曲线的重要性:
中心极限定理
设 \(X_1, X_2, \ldots\) 是 i.i.d., 每一个都有均值\(\mu\)和标准差\(\sigma\)。令\(S_n = X_1 + X_2 + \cdots + X_n\),则有
我们还不知道\(S_n\)的分布的形状。中心极限定理(CLT)告诉我们,当\(n\)很大时,曲线会很平滑。
定理
当\(n\)很大时,标准分布的和为
无论\(X_i\)的分布如何,最终将大致遵循标准正态分布。
换言之,当\(n\)很大时,无论\(X_i\)的分布如何,\(S_n\)的分布与均值\(n\mu\)和标准差\(\sqrt{n}\sigma\)有关
中心极限定理是使用标准差对分布进行衡量的主要原因。
究竟当\(n\)多大时,估计值能够有一个较好的结果?这取决于\(X_i\)的分布。我们稍后会详细说明。现在,假设我们使用的样本大小足够大,以使正态估计合理。
该定理的证明超出了本课程的范围。但是你已经在数据 8 中进行的模拟以及前一节中计算的总和的精确分布中看到了大量的证据。
示例
假设一个样本为 100 人的重量,是独立同分布的,其均值为 150 磅,标准差为 15 磅。然后所采样的人的总重量的均值为\(100 \times 150 = 15,000\),标准差为\(\sqrt{100} \times 15 = 150\)。
谁在乎一群随机人的总重量?询问那些建造体育馆,电梯和飞机的人。
您可以使用prob140方法绘制此分布Plot_norm。参数是您希望绘制曲线的间隔,平均值和标准差。
n = 100
mu = 150
sigma = 15
mean = n*mu
sd = (n**0.5)*sigma
plot_interval = make_array(mean-4*sd, mean+4*sd)
Plot_norm(plot_interval, mean, sd)
![pngimg/14_03_output_12_0.png)
正态曲线下的概率
假设我们想要找到抽样人员的总重量小于 15,100 磅的概率。这大约是下面的黄金区域。这是使用正态曲线的一个估计。
请注意参数right_end=15100。这告诉Plot_norm其右边界。如果没有指定左端,则最左端视为其左边界。
Plot_norm(plot_interval, mean, sd, right_end=15100)
![pngimg/14_03_output_14_0.png)
和以前一样,返回点左边所有概率的函数称为分布的累积分布函数(cdf)。stats.norm.cdf使用适当的参数,概率不到 75%。
stats.norm.cdf(15100, mean, sd)
0.74750746245307709
为了估计总重量在 14,800 磅到 15,100 磅之间的概率率是多少?现在我们指定两个参数left_end和right_end:
Plot_norm(plot_interval, mean, sd, left_end=14800, right_end=15100)
![pngimg/14_03_output_18_0.png)
阴影面积约为 65.6%.
stats.norm.cdf(15100, mean, sd) - stats.norm.cdf(14800, mean, sd)
0.65629624272720921
标准正态 CDF \(\Phi\)
实际上只有一条正常曲线很重要 - 标准正态曲线。所有其他的都是标准正态曲线通过水平轴的线性变换获得的。因此,通过标准化,可以根据标准正态 cdf 完成上述所有计算,如下所述。
要找到总重量小于 15,100 磅的大概几率,首先将重量标准化,然后使用标准正态 cdf。
z_right = (15100 - mean)/sd
stats.norm.cdf(z_right) # The standard curve is the default
0.74750746245307709
要找到总重量在 14,800 磅到 15,100 磅之间的概率:
z_left = (14800 - mean)/sd
stats.norm.cdf(z_right) - stats.norm.cdf(z_left)
0.65629624272720921
标准正态 cdf 的常用符号是大写字母\(\Phi\),因为它是\(\phi\)的积分:
这个积分虽然是有限的,但没有封闭形式的公式,可以用算术运算,幂,三角函数,指数和对数函数以及组合来改写。它必须通过数值积分来求近似值。这就是为什么每个统计系统都有内置功能,例如stats.norm.cdf提供出色的近似值功能。
标准化标准正态累积分布函数\(\Phi\)为所有正态曲线下的面积值提供了紧凑的表示法。我们不必对不同的参数使用不同的函数。
在 CLT 的假设下,对于大的值\(n\)我们有近似值
正如您在数据 8 中看到的那样,近似值通常在分布的尾部中表现不佳。如果使用 CLT 来逼近尾部区域的概率,请注意近似值可能非常粗糙。
二项分布 \((n, p)\) 的估计
一个二项随机分布\((n, p)\) 是\(n\)个 i.i.d.分布的和。CLT 表明,如果\(n\)足够大,无论\(p\)是什么,分布是大致成正态分布的。但我们在第 6 章中说过,如果\(n\)很大,\(p\)很小,那么二项分布大致是泊松分布。
那么它到底是正态分布还是泊松分布?这是两个二项式直方图,两者都有大的\(n\)但有不同的形状。
k1 = np.arange(25, 76)
probs1 = stats.binom.pmf(k1, 100, 0.5)
binom_fair = Table().values(k1).probability(probs1)
Plot(binom_fair)
plt.title('Binomial (100, 0.5)');
![pngimg/14_03_output_27_0.png)
k2 = np.arange(0, 11)
probs2 = stats.binom.pmf(k2, 100, 0.01)
binom_biased = Table().values(k2).probability(probs2)
Plot(binom_biased)
plt.title('Binomial (100, 0.1)');
![pngimg/14_03_output_28_0.png)
差异是由于分布的扩散。当分布在 0 附近时,泊松近似适用。当扩展较大时,在均值的任一侧存在大量可能值,则可以尝试正态分布。
为了量化这一点,许多文本根据给出了粗略的阈值\(n\)和\(p\),使得,如果\(n\)大于阈值,那么二项式\((n, p)\)大致是正态分布。如果\(n\)很大,二项分布类似于泊松,意味着\(n\)没有超过正态分布的阈值。
阈值通常以“标准差\(\sqrt{npq}\)大于 3” 或“\(np\)和\(nq\)都大于 10”来表示,这些不完全一致,但非常相近。
您可以通过比较二项式与相应泊松之间的总变化距离以及二项式与相应法线之间的总变化距离来了解您对这些阈值的看法。然而,在这个过程中,对二项式的法线与泊松近似的选择很少会成为一个问题,因为当\(n\)和\(p\)的值都给出时, 如果您对使用哪个有疑问,那么您可以使用确切的二项式概率。
这是二项式(100,0.5)分布和近似正态曲线。曲线的参数是\(np = 50\)和\(\sqrt{npq} = 5\)。
Plot(binom_fair)
Plot_norm((25, 75), 50, 5, color='red')
plt.xticks(np.arange(25, 76, 5))
plt.title('Binomial (100, 0.5) and its Normal Approximation');
![pngimg/14_03_output_31_0.png)
注意点“\(\mbox{mean } \pm \mbox{ SD}\)“\(= 50 \pm 5\)是曲线的拐点。
样本均值
中心极限定理的核心是什么?一个答案是它允许我们基于随机样本做出推论,即使我们对总体的分布知之甚少。
在数据 8 中,您看到如果我们想要估计总体的平均值,我们可以基于大随机样本的平均值来构建参数的置信区间。在该过程中,您使用引导程序生成样本均值的经验分布,然后使用经验分布来创建置信区间。你会记得那些经验分布总是钟形的。
在本节中,我们将研究样本均值的概率分布,并表明您可以使用它来构建总体均值的置信区间,而无需进行任何重新采样。
让我们从样本总和开始,我们现在很清楚。回想一下我们的假设和符号:
设\(X_1, X_2, \ldots, X_n\) 是一个 i.i.d 采样, 设每一个\(X_i\)的均值为\(\mu\)标准差为\(\sigma\)。设\(S_n\)是样本总和,即\(S_n = \sum_{i=1}^n X_i\)。可以得到
这些结果意味着随着样本量的增加,样本总和的分布向右移动并变得更加分散。
您可以在下图中看到这一点。该图显示了 5 个筛子的总和和 20 个筛子的总和的分布。分布是精确的,使用本章前面定义的dist_sum方法计算。
die = np.append(0, (1/6)*np.ones(6))
dist_sum_5 = dist_sum(5, die)
dist_sum_20 = dist_sum(20, die)
Plots('Sum of 5 dice', dist_sum_5, 'Sum of 20 dice', dist_sum_20)
![pngimg/14_04_output_4_0.png)
您可以看到正态分布已经显示为 5 和 20 个样本的总和。
您还可以看到黄金区域不是蓝色区域的四倍,尽管黄金区域中的样本大小是蓝色的四倍。黄金区域高只有蓝色一半,分布是蓝色的两倍。那是因为总和的标准与\(\sqrt{n}\)成正比。它增长比\(n\)慢。由于样本量大 4 倍,因此黄金分布的标准差为蓝色的 \(\sqrt{4} = 2\)倍。
样本的平均值表现不同
IID 样本的均值
设\(\bar{X}_n\)是样本年均值,即
然后\(\bar{X}_n\)只是\(S_n\)的线性变换,所以
样本均值的期望总是总体的均值\(\mu\),无论样本大小。因此,无论样本大小如何,样本均值都是总体均值的无偏估计。
样本均值标准差是
随着样本量的增加,样本均值的变化性降低。因此,随着样本量的增加,样本均值对总体均值的估计更准确。
下图显示了 5 个筛子和 20 个筛子的平均值的分布。两者都以 3.5 为中心,但较大样本的均值分布较窄。您在数据 8 中经常看到这一点:随着样本量的增加,样本均值的分布更集中在总体均值周围。
# HIDDEN
dist_mean_5 = Table().with_columns(
'Value', dist_sum_5.column(0)/5,
'Probability', 5*dist_sum_5.column(1)
)
dist_mean_20 = Table().with_columns(
'Value', dist_sum_20.column(0)/20,
'Probability', 20*dist_sum_20.column(1)
)
Plots('Mean of 5 dice', dist_mean_5, 'Mean of 20 dice', dist_mean_20, width=0.2)
![pngimg/14_04_output_7_0.png)
精确是有代价的。样本平均值的标准差随着样本大小的平方根减小。因此,如果要将样本均值的标准差降低 3 倍,则必须将样本量增加\(3^2 = 9\)倍。
一般结果通常可作为反例进行证明。
平方根法则
如果将样本扩大 n 倍,则样本均值的均值会减少\(\sqrt{n}\)倍。
弱大数定律
样本均值是总体均值的无偏估计,并且当样本较大时,其标准差比较小。因此,大样本的平均值接近总体平均值的概率很高。
这一结论称为弱大数定律。
令\(X_1, X_2, \ldots, X_n\)是 i.i.d.,每一个有均值\(\mu\)和标准差\(\sigma\),令\(\bar{X}_n\)是样本均值。取一个极小数\(\epsilon > 0\),有
也就是说,对于\(n\)取值很大时,几乎可以确定均值在\(\mu \pm \epsilon\)的范围内,
为了证明该定律,我命将证明\(P(|\bar{X}_n - \mu| \ge \epsilon) \to 0\),这是用切比雪夫不等式很容易求解。
相关定律
- 强大数定律。 这表示在概率为 1 时,样本平均值收敛到极限,并且该极限是常数\(\mu\)。请参阅Fields Medalist Terence Tao 撰写的这篇博客文章。他陈述了基础标准差可能不存在的情况下的定律情况。请注意,我们的弱大数定律证明方法在这种情况下无效; 结果仍然是正确的,但证据需要更多的探索。
- 小数定律。 这是Ladislaus Bortkiewicz (1868-1931)一本书的标题。其中他描述了低概率事件分布的泊松近似。这就是为什么这些注释的第 6.4 节被称为小数定律。
- 平均定律。 在总体是二元的情况下,这是弱法则的通用名称,样本均值只是样本中成功的比例。在通常的使用中,人们有时会忘记定律是一种限制性陈述。如果你正在抛硬币并连续看到 10 个正面,那么下一个抛正面的机会仍然是 1/2。平均律并没有说你“应该是反面”。它不适用于有限的投掷集。
分布的形状
中心极限定理告诉我们,对于大样本,样本均值的分布大致是正态的。样本均值是样本和的线性变换。因此,如果样本总和的分布大致是正态的,则样本均值的分布也大致是正态的,但具有不同的参数。具体来说,对于\(n\)很大的情况下
# HIDDEN
Plot_norm(x_limits=(-4, 4), mu=0, sigma=1)
plt.yticks(np.arange(0, 0.401, 0.05), np.array(7*['']))
plt.xticks(np.arange(-4, 4.1),['','','','$\mu - \sigma/\sqrt{n}$', '$\mu$', '$\mu+\sigma/\sqrt{n}$','',''])
plt.title('Approximate Distribution of Sample Mean');
![pngimg/14_04_output_12_0.png)
置信区间
假设你有一个大的 iid 样本。CLT 意味着有约 95%的概率,样本均值在总体平均值的 2 个标准差距离内。
# HIDDEN
Plot_norm(x_limits=(-4, 4), mu=0, sigma=1, left_end=-2, right_end=2)
plt.yticks(np.arange(0, 0.401, 0.05), np.array(7*['']))
plt.xticks(np.arange(-4, 4.1),['','','$\mu - 2\sigma/\sqrt{n}$', '', '$\mu$', '', '$\mu+2\sigma/\sqrt{n}$',''])
plt.xlabel('Sample Mean')
plt.title('Gold Area: Approximately 95%');
![pngimg/14_05_output_3_0.png)
这可以用不同的方式表达:
- 在所有样本集合的约 95%的样本中,样本平均值在总体平均值\(\pm ~ 2 \sigma/\sqrt{n}\)的范围内。
换言之:
- 在所有样本集合的约 95%的样本中, 总体的平均值在样本均值 \(\pm ~ 2 \sigma/\sqrt{n}\)的范围内。
这就是为什么用样本均值\(\pm ~ 2 \sigma/\sqrt{n}\)作为\(\mu\)的估计间隔。
\(\mu\)的置信区间
样本均值\(\pm ~ 2 \sigma/\sqrt{n}\)的区间称之为参数\(\mu\)的 95%置信区间这个区间,拥有一个 95%的置信水平。
你可以选择不同的置信水平,比如说 80%。在这个选择下,你的期望区间会更窄。要确切了解中心两侧需要多少标准差的距离,来获得大约 80%的中心区域,您必须找到在标准正态曲线上相应的\(z\),如下图所示。
# HIDDEN
Plot_norm(x_limits=(-4, 4), mu=0, sigma=1, left_end=-1.28, right_end=1.28)
plt.yticks(np.arange(0, 0.401, 0.05), np.array(7*['']))
plt.xticks(make_array(-1.28, 0, 1.28),['$-z$', '0', '$z$'])
plt.title('Gold Area: Approximately 80%');

无穷小区域是在点\((x,y)\)周围的平面中的一个小矩形。它的长和宽分别为\(dy\)和\(dx\)。相对应的体积是该矩形框对应的体积,其底部是极小的举行,同时这个立方体的高是\(f(x,y)\)。
因此,对于所有的\(x\)和\(y\),
由此,联合分布的密度表示为单位面积上的概率,
一个例子可以帮助我们可视化地理解。函数\(f\)被定义为
现在,假设这是一个联合分布函数,事实上,它确实是(它的积分为 1)。现在让我们看看这个表面看上去是怎样的。
表面绘制
为了绘制这个函数的表面,我们会使用三维绘图程序。首先,我们定义联合分布的密度函数。这个函数将\(x\)和\(y\)作为输入,然后返回上面定义的\(f(x,y)\)。
def joint(x,y):
if y < x:
return 0
else:
return 120 * x * (y-x) * (1-y)
现在我们可以调用plot_3d来绘制出这个图形。调用函数的参数被限制在\(x\)轴和\(y\)轴,绘制函数的名字,以及两个可选参数rstride和cstride用于决定绘制需要使用网格线的数量。较大的数字表示越不频繁的网格线。
Plot_3d(x_limits=(0,1), y_limits=(0,1), f=joint, cstride=4, rstride=4)

曲面在右下角的三角形的值为 0,因为点\((X,Y)\)不可能在那个区域。
对于\((X,Y)\)可能的值显示如下图的蓝色区域。为了手算,我们通常仅仅绘制可能值对应的平面区域而不是立体的曲面。
# NO CODE
plt.plot([0, 0], [0, 1], color='k', lw=2)
plt.plot([0, 1], [0, 1], color='k', lw=2)
plt.plot([0, 1], [1, 1], color='k', lw=2)
xx = np.arange(0, 1.11, 0.1)
yy = np.ones(len(xx))
plt.fill_between(xx, xx, yy, alpha=0.3)
plt.xlim(-0.05, 1)
plt.ylim(0, 1.05)
plt.axes().set_aspect('equal')
plt.xticks(np.arange(0, 1.1, 0.25))
plt.yticks(np.arange(0, 1.1, 0.25))
plt.xlabel('$x$')
plt.ylabel('$y$', rotation=0)
plt.title('Possible Values of $(X, Y)$');

表面下的总体积
函数\(f\)看起来有点乱但是可以很清楚地看出它是非负的。检查表面下的总概率是否等于 1 是个好主意。
在整个可能值的区域上计算双重积分,需要注意的是,对于固定的\(y\)值,\(x\)的值从 0 增长到\(y\),而\(y\)的值从 0 增长到\(1\)。
我们首先固定\(y\)并对于\(x\)积分,然后我们对于\(y\)进行积分。因此,整个积分可以如下计算,
使用SymPy
为了使用SymPy,我们首先在单位间隔上声明两个变量,然后定义一个函数f。以上声明并没有表示\(x\lt y\),我们需要在进行积分时加入这个条件。
declare('x', interval=(0, 1))
declare('y', interval=(0, 1))
f = 120*x*(y-x)*(1-y)
双重积分则需要调用Integral 并在参数中声明内部积分和外部积分。这个调用形式表示,
- 被积分的函数是\(f\)
- 内部积分针对变量\(x\),其从 0 增长至\(y\)
- 外部积分针对变量\(y\),其从 0 增长至 1
Integral(f, (x, 0, y), (y, 0, 1))
为了计算这个积分,需要用到doit()
Integral(f, (x, 0, y), (y, 0, 1)).doit()
作为体积的概率
概率被作为联合分布密度函数曲面下的体积。换言之,它就是函数\(f\)的双重积分。对于每一个概率,我们必须首先定义积分的区域,一般使用几何学和检查事件空间来检查该区域是否正确。一旦我们建立了这个积分公式,我们就可以通过\(SymPy\)来自动计算这个积分。
例子 1
假设你想知道\(P(Y\gt 4X)\)。那么这个事件就如下图的蓝色区域所示。
# NO CODE
plt.plot([0, 0], [0, 1], color='k', lw=2)
plt.plot([0, 1], [0, 1], color='k', lw=2)
plt.plot([0, 1], [1, 1], color='k', lw=2)
xx = np.arange(0, 0.251, 0.05)
yy = np.ones(len(xx))
plt.fill_between(xx, 4*xx, yy, alpha=0.3)
plt.xlim(-0.05, 1)
plt.ylim(0, 1.05)
plt.axes().set_aspect('equal')
plt.xticks(np.arange(0, 1.1, 0.25))
plt.yticks(np.arange(0, 1.1, 0.25))
plt.xlabel('$x$')
plt.ylabel('$y$', rotation=0)
plt.title('$Y > 4X$');

为了找到积分的区域,首先还是需要固定\(y\),\(x\)的值从 0 增长至\(y/4\)。因此
使用SymPy
Integral(f, (x, 0, y/4), (y, 0, 1))
Integral(f, (x, 0, y/4), (y, 0, 1)).doit()
最终积分结果得到,
例子 2
假设你想要知道\(P(X > 0.25, Y > 0.5)\)。这个事件依旧如下图的着色区域所示。
# HIDDEN
plt.plot([0, 0], [0, 1], color='k', lw=2)
plt.plot([0, 1], [0, 1], color='k', lw=2)
plt.plot([0, 1], [1, 1], color='k', lw=2)
xx = np.arange(0.25, .52, 0.05)
yy1 = 0.5*np.ones(len(xx))
yy2 = np.ones(len(xx))
plt.fill_between(xx, yy1, yy2, alpha=0.3)
xx = np.arange(0.5, 1.1, 0.1)
yy1 = 0.5*np.ones(len(xx))
yy2 = np.ones(len(xx))
plt.fill_between(xx, xx, yy2, alpha=0.3)
plt.xlim(-0.05, 1)
plt.ylim(0, 1.05)
plt.axes().set_aspect('equal')
plt.xticks(np.arange(0, 1.1, 0.25))
plt.yticks(np.arange(0, 1.1, 0.25))
plt.xlabel('$x$')
plt.ylabel('$y$', rotation=0)
plt.title('$X > 0.25, Y > 0.5$');

现在\(P(X > 0.25, Y > 0.5)\)就是该区域的联合概率密度函数的积分。选择\(y>0.5\)中的某个值并固定,该事件\(x\)的值从\(0.25\)增长至\(y\)。然后先积分\(x\)再积分\(y\),整个积分表示如下
依旧使用\(SymPy\)
Integral(f, (x, 0.25, y), (y, 0.5, 1))
Integral(f, (x, 0.25, y), (y, 0.5, 1)).doit()
最终得到结果,
期望
设定\(g\)是平面上的一个函数,于是
如果存在积分,那么可以按任意顺序进行积分:先\(x\)后\(y\),或者相反的顺序。
这是期望的非线性函数规则的应用,应用于具有联合密度的两个随机变量。
举一个例子,针对上面提出的具有联合密度函数\(f\)的变量\(X\)和\(Y\) ,让我们计算出\(E(\frac{Y}{X})\)。在这里\(g(x, y) = \frac{y}{x}\),因此
使用SymPy
ev_y_over_x = Integral((y/x)*f, (x, 0, y), (y, 0, 1))
ev_y_over_x.doit()
得到结果,
17.2 独立性
# 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 sympy import *
init_printing()
联合分布的随机变量\(X\)和\(Y\)是独立的,当且仅当
变量\(X\)的概率密度为\(f_X\),\(Y\)的概率密度为\(f_Y\),现在假定\(X\)与\(Y\)相互独立,那么作为\(X\)与\(Y\)的联合概率密度函数\(f\),
因此,如果\(X\)和\(Y\)独立,那么他们的联合密度
这是密度的乘积规则:两个独立随机变量的联合密度是它们密度的乘积。
独立标准正态随机变量
假设\(X\)和\(Y\)是独立同分布的标准正态随机变量(i.i.d.),因此他们的联合概率密度表示为
等价于,
下面尝试绘制出联合概率密度的曲面图,
def indep_standard_normals(x,y):
return 1/(2*math.pi) * np.exp(-0.5*(x**2 + y**2))
Plot_3d((-4, 4), (-4, 4), indep_standard_normals, rstride=4, cstride=4)

需要注意该曲面整体的对称性,这是由于联合密度的式子中包含的的随机变量对\((x,y)\)关于\(x^2+y^2\)对称。
同时需要注意的是\(P(X=Y)=0\),因为概率是直线上的体积。所有具有联合密度的独立随机变量对都是如此:\(P(X=Y)=0\)。因此\(P(X > Y) = P(X \ge Y)\)。你不必担心不等号是否应该严格。
两个服从指数分布的随机变量中较大的一个
假定\(X\)和\(Y\)是独立随机变量,且\(X\sim E(\lambda)\)(服从参数为\(\lambda\)的指数分布),\(Y\sim E(\mu)\)(服从参数为\(\mu\)的指数分布)。我们这里的目标是得出\(P(Y>X)\)。
由乘积规则可知,\(X\)和\(Y\)的联合概率密度函数为
下图绘制的是\(\lambda=0.5, \mu=0.25\)的情况,因此\(E(X)=2,E(Y)=4\)。
def independent_exp(x, y):
return 0.5 * 0.25 * np.e**(-0.5*x - 0.25*y)
Plot_3d((0, 10), (0, 10), independent_exp)

为了得出\(P(Y>X)\),我们必须上第一象限中的上三角部分对联合密度函数进行积分,该部分显示如下。
# NO CODE
xx = np.arange(0, 10.1, 0.1)
yy = 10*np.ones(len(xx))
plt.fill_between(xx, xx, yy, alpha=0.3)
plt.axes().set_aspect('equal')
plt.xlabel('$x$')
plt.ylabel('$y$', rotation=0)
plt.title('$Y > X$ (portion of infinite region)');

因此,这个概率等于
我们可以通过使用概率事实来计算这个双重积分而不需要很多微积分知识。
因此,
类似的是,
需要注意的是以上两个值与参数(\(\lambda 、\mu\))成正比。如果你将\(X\)和\(Y\)当作两个生命周期,那么这与直觉是一致的。如果\(\lambda\)偏大,相应的\(X\)的生命周期就偏小,因此这个式子表明\(Y\)更有可能比\(X\)大。
如果\(\lambda = \mu\),那么\(P(Y>X)=1/2\),同时对称的也是相等的值,因为\(P(X=Y)=0\)。
如果我们尝试以另外一个顺序进行双重积分——先\(X\)后\(Y\),那么我们需要做更多的事情。
现在使用SymPy来检查是否是相等的答案。
需要注意的是SymPy不能使用负指数,所以我们需要改变一些函数的形式。
declare('x', 'y', 'lamda', 'mu', positive=True)
f_X = lamda * exp(-lamda * x)
f_Y = mu * exp(-mu * y)
jt_density = f_X * f_Y
jt_density
p_Y_greater_than_X = Integral(jt_density, (x, 0, y), (y, 0, oo))
p_Y_greater_than_X
p_Y_greater_than_X.doit()
上面这个式子看起来十分奇怪,但是它其实等价于
这样就和我们早先得到的答案一样。
17.3 边际密度和条件密度
# 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 sympy import *
init_printing()
假定随机变量\(X\)和\(Y\)的联合概率密度如下,
def jt_dens(x,y):
if y < x:
return 0
else:
return 30 * (y-x)**4
Plot_3d(x_limits=(0,1), y_limits=(0,1), f=jt_dens, cstride=4, rstride=4)

然后\((X,Y)\)可能的值就位于左上角三角形,
# NO CODE
plt.plot([0, 0], [0, 1], color='k', lw=2)
plt.plot([0, 1], [0, 1], color='k', lw=2)
plt.plot([0, 1], [1, 1], color='k', lw=2)
plt.xlim(-0.05, 1)
plt.ylim(0, 1.05)
plt.axes().set_aspect('equal')
plt.xticks(np.arange(0, 1.1, 0.25))
plt.yticks(np.arange(0, 1.1, 0.25))
plt.xlabel('$x$')
plt.ylabel('$y$', rotation=0)
plt.title('Possible Values of $(X, Y)$');

这里使用SymPy快速检查保证函数\(f\)是一个联合概率密度,
declare('x', interval=(0, 1))
declare('y', interval=(0, 1))
joint_density = 30*(y-x)**4
Integral(joint_density, (y, x, 1), (x, 0, 1)).doit()
\(X\)的密度
我们可以使用联合分布\(f\)来得到\(X\)的边缘分布,记为\(f_X\)。我们知道
在下面这副图,你可以看到这样计算的推论。蓝线表示事件\({X\in dx}\)非常靠近 0.25。为了得出\(P(X\in dx)\)所对应的体积,我们固定\(x\)然后加上所有的\(y\)。
# NO CODE
plt.plot([0, 0], [0, 1], color='k', lw=2)
plt.plot([0, 1], [0, 1], color='k', lw=2)
plt.plot([0, 1], [1, 1], color='k', lw=2)
plt.plot([0.25, 0.25], [0.25, 1], color='blue', lw=3, alpha=0.3)
plt.xlim(-0.05, 1)
plt.ylim(0, 1.05)
plt.axes().set_aspect('equal')
plt.xticks(np.arange(0, 1.1, 0.25))
plt.yticks(np.arange(0, 1.1, 0.25))
plt.xlabel('$x$')
plt.ylabel('$y$', rotation=0)
plt.title('$X \in dx$');

因此\(X\)的分布密度函数可以由下式得到,
通过与离散情况类比,\(f_X\)也被称为\(X\)的边缘密度。
在我们这里举的例子中,\((X,Y)\)可能的值是左上角的三角形。因此,对于每个固定的\(x\),\(Y\)可能的值是从\(x\)至 1。
所以,例子中\(X\)的密度可以如下计算,
这里再次出现了联合分布密度函数的曲面图形,可以从图中看到\(X\)相较于 1 更靠近 0。
Plot_3d(x_limits=(0,1), y_limits=(0,1), f=jt_dens, cstride=4, rstride=4)

通过\(X\)的边缘密度分布可以看到类似的图形,
# NO CODE
x_vals = np.arange(0, 1.01, 0.01)
f_X = 6*(1-x_vals)**5
plt.plot(x_vals, f_X, color='darkblue', lw=2)
plt.xlabel('$x$')
plt.ylabel('$f_X(x)$', rotation=0)
plt.title('$f_X$: Density of $X$');

\(Y\)的密度
相应地,\(Y\)的密度函数可以通过固定\(y\)并对\(x\)进行积分得到,
在我们的例子中,联合分布的密度函数曲面表明\(Y\)更接近于 1,这也能通过计算证明。需要牢记的是\(y>x\),因此对于每个固定的\(y\)值,\(x\)的值从 0 增长至\(y\)。
对于\(0<y<1\),
# NO CODE
y_vals = np.arange(0, 1.01, 0.01)
f_Y = 6*y_vals**5
plt.plot(y_vals, f_Y, color='darkblue', lw=2)
plt.xlabel('$y$')
plt.ylabel('$f_Y(y)$', rotation=0)
plt.title('$f_Y$: Density of $Y$');

条件密度
考虑到条件概率\(P(Y \in dy \mid X \in dx)\)。依据除法法则,
这同样暗示了一个对于概率密度的除法法则。给定值\(x\),\(y\)的条件概率是
因为变量\(X\)也有一个边缘概率密度函数,我们知道对于任意的\(x\),\(P(X=x)=0\)。但是上面的比率\(f_{Y|X=x(y)}\)并不是一个概率。可能赋予更多的直觉“给定\(X=x\)”意味着“给定的\(X\)位于\(x\)附近”。
可以看出,条件分布密度的形状就是联合分布密度图中位于\(x\)点的垂直截面。式子中的分子决定了形状,分母是常数部分保证了这个密度分布积分结果为 1。
需要谨记的是,在这个公式中\(x\)是常数,所以分母\(f_X(x)\)对于所有的\(y\)都是相等的。
为了确认条件概率密度真的是积分为 1,让我们完成这个这个积分计算。
在我们这个例子中,假定\(x=0.2\),然后考虑计算\(Y\)的条件密度(给定\(X=0.4\))。在这个条件下,\(Y\)可能的值从 0.4 到 1,因此,
这是就是在\((0.4, 1)\)区间的条件概率密度
declare('y', interval=(0.4, 1))
cond_density = (5/(0.6**5)) * (y - 0.4)**4
Integral(cond_density, (y, 0.4, 1)).doit()
得到结果
下面的图就展示了\(Y\)的边缘密度与给定\(X=0.4\)时\(Y\)的条件概率,可以看到条件概率更多集中在较大的\(Y\)值。
# NO CODE
plt.plot(y_vals, f_Y, color='darkblue', lw=2, label='Density of $Y$')
new_y = np.arange(0.4, 1.01, 0.01)
dens = (5/(0.6**5)) * (new_y - 0.4)**4
plt.plot(new_y, dens, color='gold', lw=2, label='Density of $Y$ given $X=0.4$')
plt.legend()
plt.xlim(0, 1)
plt.xlabel('$y$');

使用条件概率
我们通过使用条件概率来计算得到概率和期望,就像我们使用普通的分布密度。下面会举多个计算示例,在每个例子中我们建立积分公式然后使用SymPy。
上面的示例结果是\(60\%\)。
declare('y', interval=(0, 1))
cond_density = (5/(0.6**5))*(y - 0.4)**4
Integral(cond_density, (y, 0.9, 1)).doit()
现在我们使用条件概率计算条件期望。记住,在我们的例子中,给定\(X=0.4\)时\(Y\)可能的值从\(0.4\)至 1。
Integral(y*cond_density, (y, 0.4, 1)).doit()
对于任意固定的\(y\)值,给定\(y\)值时\(X\)的条件概率是
在这一节的所有例子同时与前一节的都开始于一个突然出现的联合密度函数。在下一节里,我们将开始研究它们出现的情况。
17.4 具有整数参数的 Beta 密度
# 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 sympy import *
init_printing()
在上一节我们学会了如何使用联合分布的密度函数,但是许多的联合分布密度都像是无中生有。举一个例子,我们检查函数
是否时一个联合密度,但是并没有展示这个是从何而来。在这一节,我们将追溯源头同时尝试在单位间隔上拓展出一个重要的分布密度函数族。
独立均匀分布\((0,1)\)变量的次序统计量
假定\(U_1, U_2, ..., U_n\)是在\((0,1)\)均匀分布上的独立变量。想象每一个\(U_i\)就是一个飞镖扔向单位间隔的具体位置,下图展示了 5 支飞镖(星号)的位置。
# NO CODE
plt.plot([0, 1], [0, 0], color='k', lw=2)
y = 1 - np.ones(5)
x = stats.uniform.rvs(size=5)
order_stats = np.sort(x)
plt.scatter(x, y, marker='*', color='r', s=100)
plt.text(0, -0.0007, r'0', size=16)
plt.text(0.98, -0.0007, r'1', size=16)
plt.xlim(0, 1)
plt.yticks([])
plt.xticks([])
plt.title('Five IID Uniform (0, 1) Variables');

基于上面的图,你能指出哪个星号代表\(U_1\)。不,你不能,因为\(U_1\)可能是五个位置中的任意一个。所以你也不饿能分辨出\(U_1, U_2, U_3,U_4, U_5\)五个变量。
你能看到的只是\(U_i\)的增长序列。你可以看到最小值,排序后的第二大的值,以及第三大、第四大和第五大的值。
这些值被称作\(U_1, U_2, U_3, U_4, U_5\)的次序统计量,并被记为\(U_{(1)}, U_{(2)}, U_{(3)}, U_{(4)}, U_{(5)}\)。
请记住,因为\(U_i\)是具有密度的独立随机变量,所以它们之间不存在联系:两个变量相等的概率为 0。
# NO CODE
plt.plot([0, 1], [0, 0], color='k', lw=2)
order_stats = np.sort(x)
plt.scatter(x, y, marker='*', color='r', s=100)
u_labels = make_array('$U_{(1)}$', '$U_{(2)}$', '$U_{(3)}$', '$U_{(4)}$', '$U_{(5)}$')
for i in range(5):
plt.text(order_stats[i], -0.0007, u_labels[i], size=16)
plt.text(0, -0.0007, r'0', size=16)
plt.text(0.98, -0.0007, r'1', size=16)
plt.xlim(0, 1)
plt.yticks([])
plt.xticks([])
plt.title('Order Statistics of the Five IID Uniform (0, 1) Variables');

总之对于\(1 \le k \le n\),当\(U_i\)以升序排列时,\(U_1, U_2, U_3, U_4, U_5\)中的第\(k\)个次序统计量是第\(k\)大的值。
两个次序统计量的联合分布密度
假定\(n=5\),同时在这里我们尝试计算\(U_{(2)}\)和\(U_{(4)}\)的联合分布,这代表第二大和第四大的联合分布。
下面这幅图展示了事件\(\{U_{(2)} \in dx, U_{(4)} \in dy\}\)对于所有的\(x\)、\(y\)值,其中\(0 < x < y < 1\)。
# NO CODE
plt.plot([0, 1], [0, 0], color='k', lw=2)
y = 1 - np.ones(5)
x = make_array(0.1, 0.3, 0.45, 0.7, 0.9)
plt.scatter(x, y, marker='*', color='r', s=100)
plt.plot([0.28, 0.32], [0, 0], color='gold', lw=2)
plt.text(0.28, -0.0007, r'$dx$', size=16)
plt.plot([0.68, 0.72], [0, 0], color='gold', lw=2)
plt.text(0.68, -0.0007, r'$dy$', size=16)
plt.text(0, -0.0007, r'0', size=16)
plt.text(0.98, -0.0007, r'1', size=16)
plt.xlim(0, 1)
plt.yticks([])
plt.xticks([])
plt.title('$n = 5$; $\{ U_{(2)} \in dx, U_{(4)} \in dy \}$');

为了得出\(P(U_{(2)} \in dx, U_{(4)} \in dy)\),首先可以看出:
- \(U_1, U_2, U_3, U_4, U_5\)中的一个必定是\(dx\),这里共有 5 种情况。
- 剩下的 4 个变量,其中一个必定是\(dy\),这里共有 4 种情况。
- 剩下的 3 个变量中,其中一个必定在\((0,x)\)。
- 剩下的 2 个变量中,其中一个必定在\((x,y)\)。
- 最后一个变量则必定在\((x,y)\)。
那么,
因此\(U_{(2)}\)与\(U_{(4)}\)的条件概率为,
这个也就解释了这个式子是如何出现的。
但是它能体现更多的东西。服从\((0,1)\)均匀分布的独立次序统计量的边缘密度构成了在数据科学中非常重要的一类分布函数族。
\(U_{(k)}\)的密度
假定\(U_{(k)}\)是\(U_1, U_2, \ldots, U_n\)的第\(k\)大的次序统计量。我们这次通过与以前一样的手法得出\(U_{(k)}\)的密度函数。
下面这幅图展示了事件\(\{ U_{(k)} \in dx \}\)。当这个事件发生时,
- \(dx\)必定是\(U_1, U_2, \ldots, U_n\)其中一个。
- 剩下的\(n-1\)个变量中,必定有\(k-1\)个位于\((0,x)\),其余的位于\((x,1)\)。
# NO CODE
plt.plot([0, 1], [0, 0], color='k', lw=2)
plt.scatter(0.4, 0, marker='*', color='r', s=100)
plt.plot([0.38, 0.42], [0, 0], color='gold', lw=2)
plt.text(0.38, -0.0007, r'$dx$', size=16)
plt.text(0.1, 0.001, '$k-1$ stars', size=16)
plt.text(0.1, 0.0005, 'in $(0, x)$', size=16)
plt.text(0.6, 0.001, '$n-k$ stars', size=16)
plt.text(0.6, 0.0005, 'in $(x, 1)$', size=16)
plt.text(0, -0.0007, r'0', size=16)
plt.text(0.98, -0.0007, r'1', size=16)
plt.xlim(0, 1)
plt.yticks([])
plt.xticks([])
plt.title('$\{ U_{(k)} \in dx \}$');

这里共有\(n\)种方法来选择\(dx\)的位置,一旦选定,剩下的\(n-1\)个变量种\(k-1\)个位于\((0,x)\)。那么,
因此\(U_{(k)}\)的密度函数为
让我们重写一下上面这个公式,
因为\(1 \le k \le n\),我们知道\(n-k+1\)是一个正整数。同时由于\(n\)是一个任意正整数,所以\(n-k+1\)也一样。
Beta 密度
我们已经展示了如果\(s\)和\(r\)是任意两个正整数,那么函数
就是一个概率密度函数。这个函数被称为参数为\(r\)和\(s\)的 beta 密度函数。
次序统计量\(U_{(k)}\)就是一个参数为\(k\)和\(n-k+1\)的 beta 密度函数。
密度的形状由\(x\)和\(1-x\)决定。所有的阶乘只是常数的部分以确保密度函数积分为 1。
有趣的是,\((0,1)\)均匀分布同样属于 beta 密度函数(参数\(r=1\)与\(s=1\)),也就是说,\((0,1)\)均匀分布同样是 beta 函数族的一员。
下图展示了某些 beta 密度函数曲线。正如你期望的,参数为\((3,3)\)的 beta 密度函数曲线关于 0.5 对称。
x = np.arange(0, 1.01, 0.01)
for i in np.arange(1, 7, 1):
plt.plot(x, stats.beta.pdf(x, i, 6-i), lw=2)
plt.title('Beta $(i, 6-i)$ densities for $1 \leq i \leq 5$');

通过选择合适的参数,你可以创造一个 beta 密度函数并且使得它的重量(期望)趋近于一个预定的值。这是 beta 密度函数常常被用于建模随机比率的原因之一。例如,如果你想垃圾邮件的概率更趋近于\(60\%\)至\(90\%\)之间,也许更低,你可以通过选择密度使其尖峰在\(0.75\)附近来表示这一个先验倾向。
Beta 函数积分
将 beta 密度函数积分至 1,那么对于任意的正整数\(r\)和\(s\),我们有
因此概率论简化了其他方面的工作。同时,我们可以计算出服从 beta 分布的随机变量的期望。
让\(X\)服从\(beta(r,s)\)分布,那么
你可以使用同样的方法计算出\(E(X^2)\)与\(Var(X)\)。
期望的公式同样允许你依据先验知识选择参数。例如,如果你想要这个比率在\(0.4\)附近,你可以尝试参数\(r=2\)和\(s=3\)的 bata 函数。
也许你会注意到 beta 密度函数的形式十分二项式。事实上,我们使用二项式来推导出 beta 密度函数。接下来的教程里面你会看到 beta 密度与二项式之间另一个更近的联系。这些特性使得 beta 函数族成为机器学习中使用最广泛的密度系列之一。
十八、正态和伽马分布族
# 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
正态分布族在概率论和数据科学中有独一无二的地位。在你理解更多正式的概率论之前,你就开始使用 Data 8 中的正态分布。所以,你已经将几个基本事实视为理所当然而无需证明。这章我们将开始研究并建立这些事实,同时研究独立正态分布变量的和的问题。
至于伽马分布族,通过练习题进行研究的特性出现在了许多的场景中。举一个例子,你已经证明指数分布属于伽马分布族,就像属于标准正态分布的变量的平方一样。稍后在这章,我们将收集我们知道的关于伽马分布族的内容以及看看在独立伽马分布的变量平方中能挖掘到什么样的东西。
18.1 标准正态分布:基础
尽管自从 Data 8 我们已经接受标准正态分布的密度函数,我们还没有证明它的确是一个密度函数-积分为 1。我们也没有检查它的期望是否存在,也没有检查它的标准差的确为 1。
现在是时候完成这些了,只有这样才能确保我们关于正态分布密度的计算是合理的。
在开始的地方我们需要回忆一些关于不相关的瑞利分布的事实,我们曾经在研究指数分布的平方根的分布的时候遇见过。
假定\(T\)服从参数为\(1/2\)的指数分布。那么我们可以说\(R=\sqrt T\)就是一个瑞利分布,并且其累计分布函数为
同时其密度函数为
事实上,存在一个瑞利分布族,其中每一个都有着\(cR\)的分布(\(c\)是常数)。但是让我们定义\(R\)就是唯一的瑞利分布,然后研究\(R\)是如何与标准正态分布联系起来。
积分的常数
假定\(X\)和\(Y\)是相互独立的标准正态分布变量。因为我们还没有证明标准正态分布的密度函数中积分为\(1/\sqrt 2\)的常数,现在暂定其为\(c\)。然后,\(X\)和\(Y\)的联合分布密度为
不管这个常数的具体值,这个联合分布拥有圆对称性。如果两个点在与原点相同径向距离的平面上,那么这个联合密度在这两个点上是一样的。现在使用另外的记号来使这一结论更清晰。
现在假定\(R = \sqrt{X^2 + Y^2}\)。为了找到\(R\)的密度,现在尝试计算\(P(R\in dr)\)。这个事件在下图中展示。
# NO CODE
x = np.append(np.arange(-1, 0.999, 0.01), 1)
y = (1 - x**2)**0.5
plt.plot(x, y, color='gold', lw=10)
y2 = -1*y
plt.plot(x, y2, color='gold', lw=10)
plt.plot([-1.8, 1.8], [0, 0], color='k', lw=1)
plt.plot([0, 0], [-1.8, 1.8], color='k', lw=1)
plt.xlim(-1.8, 1.8)
plt.ylim(-1.6, 1.6)
plt.xticks([])
plt.yticks([])
plt.text(0.9, -0.15, '$dr$', size=16)
plt.xlabel('$X$')
plt.ylabel('$Y$', rotation=0)
plt.title('$\{R \in dr \}$')
plt.axes().set_aspect('equal');

为了得到联合密度曲面下的相关体积,两个观察会有帮助。
- 由于具有圆对称性,联合密度曲面在整个黄色的圆环上都是同一高度,且高度为\(c^2e^{-\frac{1}{2}r^2}\)。
- 圆环的区域基本上等价于一个矩形,且矩形宽为\(dr\),长等于周长\(2\pi r\)。
因此,
所以\(R\)的密度函数为
将这个密度函数与瑞利分布的密度函数比较。这两者是一样的除了常数部分不同。瑞利分布的常数为 1 而对于新的\(R\)分布,其常数为\(2\pi ^2c\)。但是由于两个函数是等价的,因此常数部分也必定相同。因此\(1=2\pi c^2\),这就意味着
现在我们知道标准正态分布的密度函数\(\phi\)也是一个密度函数,
# NO CODE
z = np.arange(-3.5, 3.51, 0.01)
phi = stats.norm.pdf(z)
plt.plot(z, phi, color='k', lw=2)
plt.ylim(0, 0.41)
plt.title('Density of $X$')
plt.xlabel('$z$')
plt.ylabel('$\phi(z)$', rotation=0);

def indep_standard_normals(x,y):
return 1/(2*math.pi) * np.exp(-0.5*(x**2 + y**2))
Plot_3d((-4, 4), (-4, 4), indep_standard_normals, rstride=4, cstride=4)
plt.title('Joint Density of $X$ and $Y$');

期望
如果\(Z\)服从标准正态分布且\(E(Z)\)存在,那么\(E(Z)\)必须关于\(0\)对称。但是你已经在习题中看到并不是所有的对称函数都有期望,柯西函数就是其中一个例子。为了确保\(E(Z)=0\),我们必须首先确保\(E(|Z|)\)是有限的。
我们不止证明了\(E(|Z|)\)的值是有限的,因此\(E(Z)=0\),同时我们还得到了\(E(|Z|)\)的具体值。
方差
如果\(X\)和\(Y\)是独立的标准正态分布变量,我们已经证明了\(R = \sqrt{X^2 + Y^2}\)就是瑞利分布。
同时也知道了瑞利分布能够作为参数\(1/2\)的指数分布的平方根的分布出现。
紧接着,如果\(X\)和\(Y\)是独立的标准正态分布变量,那么\(X^2 + Y^2\)就是服从参数\(1/2\)的指数分布。
在后面的章节我们会对这些进行更深入的研究。至此,让我们总结两个关于期望的观察结果。
- \(X^2 + Y^2\)服从参数\(1/2\)的指数分布,因此\(E(X^2 + Y^2) = 2\)。
- \(X\)和\(Y\)服从完全一样的分布,因此\(E(X^2) = E(Y^2)\)。
综上,\(E(X^2)=1\)。我们知道\(E(X)=0\),因此\(Var(X) = 1\)且\(SD(X) = 1\)。
18.2 独立正态分布变量的和
基于以下事实,这一节将包含多个例子:
独立正态分布变量的和同样服从正态分布
我们将会在下一节使用矩母函数证明这一观点。而现在,我们将进行一个快速的模拟并观察如何在例子中利用这一事实。
mu_X = 10
sigma_X = 2
mu_Y = 15
sigma_Y = 3
x = stats.norm.rvs(mu_X, sigma_X, size=10000)
y = stats.norm.rvs(mu_Y, sigma_Y, size=10000)
s = x+y
Table().with_column('S = X+Y', s).hist(bins=20)
plt.title('$X$ is normal (10, $2^2$); $Y$ is normal (15, $3^2$)');

上面的仿真随机生成了\(10,000\)个样本\(X+Y\),其中\(X\)服从均值为\(10\),标准差为\(2\)的正态分布,\(Y\)独立于\(X\)且其服从均值为\(15\),标准差为\(3\)的正态分布。由结果可以清楚地看出两者和服从正态分布。你可以改变参数然后检查和的分布是否是一样的形状,尽管坐标轴的标签不一样。
为了确认是否真的是正态分布,你必须算出和的均值和方差。这里仅仅使用均值和方差的特性:
如果\(X\)服从\((\mu_X, \sigma_X^2)\)的正态分布,\(Y\)独立于\(X\)且服从\((\mu_Y, \sigma_Y^2)\)的正态分布,那么\(X+Y\)也是正态分布且均值为\(\mu_X + \mu_Y\),方差为\(\sigma_X^2 + \sigma_Y^2\)。
这意味着我们不需要\(X\)和\(Y\)的联合密度就能得到\(X+Y\)事件的概率。
独立同正态分布变量的和
假定\(X_1, X_2, \ldots, X_n\)是独立同正态分布的变量,且其均值为\(\mu\),方差为\(\sigma^2\)。现在\(S_n = X_1 + X_2 + \ldots + X_n\)。那么\(S_n\)的分布也是正态分布,但是其均值为\(n\mu\),方差为\(n\sigma^2\)。
这个看起来很想中心极限定理,但是需要注意到这里没有假设\(n\)很大,也不是近似服从正态分布。
如果潜在分布是正态分布,那么无论样本大小,独立抽取的样本的和也是正态分布。
两个独立正态分布变量间的区别
如果\(Y\)是正态分布,那么\(-Y\)也是。因此如果\(X\)和\(Y\)是独立的正态分布,那么\(X-Y\)也是正态的,并且均值为\(\mu x-\mu y\),方差则等于
举个例子,如果\(A、B\)两人的身高分别为\(H_A\)和\(H_B\),并假设\(H_A\)和\(H_B\)是独立同正态分布,均值为\(66\)英寸,标准差为\(3\)英寸。那么\(A\)比\(B\)高\(2\)英寸的概率是
因为\(H_A-H_B\)是正态分布,均值为\(0\),标准差为\(\sqrt{3^2 + 3^2} = \sqrt{18} = 4.24\)。
# NO CODE
mu = 0
sigma = 18**0.5
x = np.arange(mu - 3.5*sigma, mu + 3.5*sigma+0.1, 0.1)
plt.plot(x, stats.norm.pdf(x, mu, sigma), color='darkblue', lw=2)
w = np.arange(2, mu+3.5*sigma+0.1, 0.1)
plt.fill_between(w, stats.norm.pdf(w, mu, sigma), color='gold')
plt.xticks(np.arange(mu-3*sigma, mu+3*sigma+0.1, sigma))
plt.title('$P(H_A - H_B > 2) = 31.87\%$');

mu = 0
sigma = 18**0.5
1 - stats.norm.cdf(2, mu, sigma)
比较两样本的比例
一个候选者正在参与竞选。在州 1,\(50\%\)的选民偏爱他,在州 2,只有\(27\%\)的选民选择他。每个州随机抽取 1000 名选民。你可以假定样本之间相互独立并且在每个州都有成千上万的选民。
问题:样本来自州 1 的概率是多少,选择候选人的选民比例是洲 2 样本比例的两倍多。
答案:对于\(i=1,2\),\(X_i\)是在州\(i\)的样本中选民选择候选人的比例。我们想要求得\(P(X_1 > 2X_2)\)。根据中心极限定理,\(X_1\)和\(X_2\)都是近似正态分布,所以\(X_1-2X_2\)也近似是正态分布。
现在问题的关键在于找到均值和标准差。
因此,
mu = 0.5 - 2*0.27
var = (0.5*0.5/1000) + 4*(0.27*.73/1000)
sigma = var**0.5
1 - stats.norm.cdf(0, mu, sigma)
18.3 伽马分布族
在习题中你已经看到了非负随机变量\(X\)服从\(gamma(r,\lambda)\)的分布,其中\(r\)和\(\lambda\)都是正实数,如果\(X\)的分布密度给定如下
其中,
就是 Gamma 函数,它作为常数部分保证密度函数积分为 1。
就像你知道的,伽马函数的关键特点就是以下这个递归表达式,
这也就暗示了
把这些放在一起就是为了表明
你已经观察到标准正态分布变量的平方就是服从 gamma\((1/2, 1/2)\),参数为\(\lambda\)指数分布也是服从 gamma\((1, \lambda)\)分布。
比率\(\lambda\)
对于固定的\(r\),\(\lambda\)越大,所期望的\(X\)就越小。类似于指数分布,参数\(\lambda\)基本确定了单位度量。对于正常数\(c\),随机变量\(Y=cX\)服从 gamma\((,\lambda /c)\)分布。你可以通过将线性变换引入式子中观察到这一点。例如正数\(y\),\(Y\)的密度分布为
SciPy 将\(1/\lambda\)称为 gamma 分布中的比例参数。因为这个参数决定了密度图中横轴的比例,它的值经常取为 1。这就是为什么我们转而研究另外一个参数\(r\)。
形状参数\(r\)
这里是服从 gamma\((r,1)\)分布的密度函数图,其中\(r=1,1.5,2\text{以及}10\).
# NO CODE
x = np.arange(0, 10, 0.01)
y1 = stats.gamma.pdf(x, 1, scale=1)
y2 = stats.gamma.pdf(x, 1.5, scale=1)
y3 = stats.gamma.pdf(x, 2, scale=1)
y5 = stats.chi2.pdf(x, 5)
plt.plot(x, y1, lw=2, label='$r = 1$')
plt.plot(x, y2, lw=2, label='$r = 1.5$')
plt.plot(x, y3, lw=2, label='$r = 2$')
plt.legend()
plt.xlabel('$x$')
plt.title('Gamma $(r, 1)$ Densities');

当\(r=1\)时,密度函数时指数分布。随着\(r\)增加,密度函数逐渐往右移并且变得扁平,与增加的均值\(r\)一致和标准差\(\sqrt r\)。
当\(r=10\)时,伽马密度函数看起来是正常的。为说明原因,我们会检查独立伽马变量的和。
# NO CODE
x = np.arange(0, 20, 0.01)
y1 = stats.gamma.pdf(x, 1, scale=1)
y2 = stats.gamma.pdf(x, 1.5, scale=1)
y3 = stats.gamma.pdf(x, 2, scale=1)
y4 = stats.gamma.pdf(x, 10, scale=1)
plt.plot(x, y1, lw=2, label='$r = 1$')
plt.plot(x, y2, lw=2, label='$r = 1.5$')
plt.plot(x, y3, lw=2, label='$r = 2$')
plt.plot(x, y4, lw=2, label='$r = 10$')
plt.legend()
plt.xlabel('$x$')
plt.title('Gamma $(r, 1)$ Densities');

具有相同速率参数\(\lambda\)的独立伽玛变量的和
如果\(X\)服从 gamma\((r,\lambda)\)和\(Y\)独立于\(X\)且服从 gamma\((s,\lambda)\),那么\(X+Y\)服从 gamma\((r+s,\lambda)\)分布。
需要记住为了应用这一结论,\(X\)和\(Y\)的速率参数\(\lambda\)必须一样。同时证明\(X+Y\)的速率参数也是一样的,而形状参数则是两者相加。
我们将在下一章中证明这个结果以及独立正态变量之和的相应结果。现在,就像在正态分布的变量和一样,我们将通过仿真来验证这一结论。下面代码中的前三行在设定\(\lambda、r\text{和}s\)的值,剩下的代码模拟生成\(10000\)个\(X+Y\)的值,然后通过仿真的值画出 gamma\((r+s,\lambda)\)的分布。
# Change these three parameters as you wish.
lam = 1
r = 3
s = 7
# Leave the rest of the code alone.
x = stats.gamma.rvs(r, scale=1/lam, size=10000)
y = stats.gamma.rvs(s, scale=1/lam, size=10000)
w = x+y
Table().with_column('X+Y', w).hist(bins=20)
t = np.arange(min(w), max(w)+0.1, (max(w) - min(w))/100)
dens = stats.gamma.pdf(t, r+s, scale=1/lam)
plt.plot(t, dens, color='red', lw=2, label='gamma $(r+s, \lambda)$')
plt.legend()
plt.title('$X+Y$ where $X$: gamma$(r, \lambda)$ and $Y$: gamma$(s, \lambda)$');

你现在可以看出为什么当\(r\)足够大时,gamma\((r,\lambda)\)分布会近似为正态分布。通过以上结果,对于整数\(r\),服从指数分布\((\lambda)\)的独立变量和服从 gamma\((r,\lambda)\)分布。对于固定的\(\lambda\)和增长的\(r\),中心极限定理说明该分布的和趋近于正态分布。
伽马分布族经常被用于建模右偏峰的非负布。在数据科学中,伽马分布族也常出现在平方“居中”的正态随机变量中,这也就意味着,正态随机变量的均值为 0。下一节将列出细节。
18.4 卡方分布
假定\(Z\)时标准正态分布的随机变量,令\(V=Z^2\)。通过改变变量的密度公式,我们发现\(V\)的密度为
这就是 gamma\((1/2,1/2)\)密度函数。它也被称为自由度为\(1\)的卡方分布,我们缩写为 chi-squared\((1)\)。
从 chi-squared\((1)\)到 chi-squared\((n)\)
当我们建立标准正态分布的特性时,我们发现如果\(Z_1\)和\(Z_2\)时标准正态独立变量,那么\(Z_1^2+Z_2^2\)就服从指数分布(参数为\(1/2\))。我们在瑞利分布中通过比较两个不同的设定观察到了这一结论,但是并没有特别明晰的理由得出为什么\(Z_1^2+Z_2^2\)服从指数分布。
现在我们知道了独立的伽马分布(比率参数相同)随机变量的和也服从伽马分布,并且其形状参数等于两者之和,比率参数保持不变,所以\(Z_1^2+Z_2^2\)服从 gamma\((1,1/2)\)。就像练习中展示的那样,这个分布和指数分布(1/2)是一样的。这解释了为什么两个独立同标准正态分布变量的和也服从指数分布(1/2)。
假定\(Z_1, Z_2, \ldots, Z_n\)是独立标准正态变量,那么\(Z_1^2, Z_2^2, \ldots, Z_n^2\)是独立同 chi-squared\((1)\)的变量。这就意味着,它们每一个都服从 gamma\((1/2,1/2)\)分布。
通过归纳,\(Z_1^2 + Z_2^2 + \cdots + Z_n^2\)服从 gamma\((n/2,1/2)\)分布,这个分布被称为卡方分布且其自由度为\(n\),我们缩写为 chi-squared\((n)\)。
自由度为\(n\)的卡方分布
对于一个正整数\(n\),随机变量\(X\)服从自由度为\(n\)的卡方分布当\(X\)的分布为 gamma\((n/2,1/2)\)。因此,\(X\)的密度为
这里是卡方分布的图,且其自由度从 2 变化至 5。
# NO CODE
x = np.arange(0, 14, 0.01)
y2 = stats.chi2.pdf(x, 2)
y3 = stats.chi2.pdf(x, 3)
y4 = stats.chi2.pdf(x, 4)
y5 = stats.chi2.pdf(x, 5)
plt.plot(x, y2, lw=2, label='2 df')
plt.plot(x, y3, lw=2, label='3 df')
plt.plot(x, y4, lw=2, label='4 df')
plt.plot(x, y5, lw=2, label='5 df')
plt.legend()
plt.xlabel('$v$')
plt.title('Chi-Squared $(n)$ Densities for $n = 2, 3, 4, 5$');

自由度为 2 的卡方分布是指数分布因为它也是 gamma\((1,1/2)\)分布,因此这个分布有三个名字:
- 自由度为 2 的卡方分布
- gamma\((1,1/2)\)
- 指数分布\((1/2)\)
均值和方差
现在你知道了如果\(T\)服从 gamma\((r,\lambda)\),那么
如果\(X\)服从自由度为\(n\)的卡方分布,那么\(X\)服从 gamma\((n/2,1/2)\)。因此
那么服从卡方分布的随机变量的期望就是它的自由度。
标准差为
估计正态方差
假定\(X_1, X_2, \ldots, X_n\)服从正态分布\((\mu,\sigma^2)\),现在如果你已经知道\(\mu\),需要求出\(\sigma^2\)。
\(Z_i\)是\(X_i\)的,因此\(Z_i = (X_i - \mu)/\sigma\)。定义随机变量\(T\)如下
那么\(T\)服从自由度为\(n\)的卡方分布,并且\(E(T)=n\)。现在定义\(W\)
随后因为已经知道\(\mu\)的值,\(W\)可以通过样本进行计算。同时,因为\(W\)是\(T\)的线性变换,可以很直接地得出\(E(W)=\sigma^2\)。因此我们可以构建\(\sigma^2\)的无偏估计:它是已知总体均值的均方偏差。
但通常,\(\mu\)是未知的。在这种情况下你需要另外一种估计\(\sigma^2\)的方法,因为你不能像上面那样计算\(W\)。在练习中你知道了
是\(\sigma^2\)的无偏估计而不管\(X_i\)的具体分布。就像这个例子一样,当\(X_i\)是正态分布,可以证明\(S^2\)是自由度为\((n-1)\)的卡方分布的线性变换。在下节中,我们将解释这种方法的原因所在。
自由度
上面这个例子能够帮助解释“自由度”这个陌生的术语,这一个词语出现在卡方分布的参数中。
- 当\(\mu\)已知,你有\(n\)个独立的中心正态分布\((X_i-\mu)\),由此可以估计\(\sigma\)。也就意味着,你有个\(n\)个自由度来构建你的估计。
- 当\(\mu\)未知是,你使用所有\(n\)个\(X_1 - \bar{X}, X_2 - \bar{X}, \ldots, X_n - \bar{X}\)在你的估计中,但是它们并不是相互独立的。它们是\(X_1, X_2, \ldots , X_n\)离它们的均值\(\bar{X}\)的偏差,因此它们的和为 0。所以如果你知道其中的\(n-1\)个,那么最后一个也是确定的。你也就只有\(n-1\)个自由度。
十九、和的分布
原文:prob140/textbook/notebooks/ch19
译者:平淡的天
自豪地采用谷歌翻译
本章所需 python 包
# 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
本章提供了一些离散变量和连续变量处理随机变量和的一般方法。
我们将从连续模拟用于分配两个独立的离散随机变量之和卷积公式开始。
然后,我们将开发一个更强大的概率生成函数版本,我们之前定义它来研究具有有限多个非负整数值的独立随机变量的总和。新版本被称为矩生成函数,它将应用于离散和连续随机变量,其具有有限或无限的可能值集。
卷积公式
我们令X和Y为两个离散变量,且令S=X+Y。我们知道找到S分布一种好的方式就是根据X的值去划分事件{S=s}。即:
如果X和Y是独立的,那么上一步公式变为离散卷积公式:
这个公式有一个直接的连续模拟。令X和Y为联合密度为f的连续随机变量,令S=X+Y。则S的密度为:
则当X和Y独立时公式变为卷积公式:
两个独立同分布指数随机变量的和
令X和Y为独立同分布指数(λ)随机变量,令S=X+Y。对于s>0的和,X和Y都不能超过s。卷积公式显示S的密度为:
这是伽玛(2,λ)密度,与前一章关于独立伽马随机变量之和的说法一致。
有时,可以在没有卷积公式的情况下找到和的密度。
两个独立同分布二项分布(0,1)随机变量的和
令$$S=U_{1}+U_{2}$$,其中$$U_{i}$$为独立同分布二项分布(0,1)。下图中的金条显示了各种S值的事件S∈ds。
# NO CODE
plt.plot([0, 1], [1, 1], color='k', lw=2)
plt.plot([1, 1], [0, 1], color='k', lw=2)
plt.plot([0, 1], [0, 0], color='k', lw=2)
plt.plot([0, 0], [0, 1], color='k', lw=2)
plt.plot([0.005, 0.25], [0.25, 0.005], color='gold', lw=4)
plt.plot([0.005, 0.995], [0.995, 0.005], color='gold', lw=4)
plt.plot([0.405, 0.995], [0.995, 0.405], color='gold', lw=4)
plt.ylim(-0.05, 1.05)
plt.xlim(-0.05, 1.05)
plt.axes().set_aspect('equal')
plt.xlabel('$U_1$')
plt.ylabel('$U_2$', rotation=0);

联合密度表面是平坦的。 因此,S的密度形状仅取决于条纹的长度,其在s=0和s=1之间线性增加,然后在s=1和s=2之间线性减小。 所以S的联合密度是三角形的。三角形的高度为 1,因为三角形的面积为 1。
# NO CODE
plt.plot([0, 1], [1, 1], color='k', lw=2)
plt.plot([1, 1], [0, 1], color='k', lw=2)
plt.plot([0, 1], [0, 0], color='k', lw=2)
plt.plot([0, 0], [0, 1], color='k', lw=2)
plt.plot([0.005, 0.25], [0.25, 0.005], color='gold', lw=4)
plt.plot([0.005, 0.995], [0.995, 0.005], color='gold', lw=4)
plt.plot([0.405, 0.995], [0.995, 0.405], color='gold', lw=4)
plt.ylim(-0.05, 1.05)
plt.xlim(-0.05, 1.05)
plt.axes().set_aspect('equal')
plt.xlabel('$U_1$')
plt.ylabel('$U_2$', rotation=0);

有时卷积公式中的积分可能非常难以处理。在本章的其余部分,我们将开发一种不同的方法来推导和的分布。
矩生成函数
概率质量函数和概率密度,cdf 和生存函数都是指定随机变量的概率分布的方法。 它们都被定义为概率或每单位长度的概率,因此具有自然的解释和可视化。
但是也有更抽象的方式来描述分布,例如我们为具有有限多个非负整数值的随机变量定义的概率生成函数(pgf)。
我们现在定义另一个这样的分布变换。 它比 pgf 更通用,是研究分布的有力工具。
设X是随机变量。X的矩生成函数(mgf)是通过公式在实数上定义的函数:
对于所有 t 期望是有限的。 事实(我们不会证明)mgf 的域必须是一个区间,不一定是有限的,但必然包括 0,因为$$M_{X}(0)=1$$
对于具有有限多个非负整数值的X,我们已经通过$$G_{X}(s)=E(s^{X})$$定义了 pgf。 请注意,这是当$$s)=e^{t}$$时 mgf 的特殊情况,因此为正。对于同时具有 pgf $$G_{X}$$和 mgf $$M_{X}$$的随机变量X,这两个函数通过$$G_{X}(log(s))=G_{X}E(s)$$相关。因此,$$M_{X}$$接近 0 的属性反映了 $$G_{X}$$在 1 附近的属性。
本节介绍了 mgf 有用的三种方法。 其他方式将在本章的后续章节中进行说明。 我们所说的关于 mgf 的大部分内容都不会附带完整的证明,因为所需的数学超出了本课程的范围。 但即使没有正式的证明,结果也是合理的。
我们将首先列出三种方法,然后在示例中使用它们。
产生矩
对于非负整数 k,期望$$E(X^{k})$$被称为X的第 k 个矩。您在数据 8 中看到并且在该过程中再次看到平均$$E(X)$$是X的概率直方图的重心。在物理学中,质心被称为一阶矩。 矩的术语也用于概率论。
在这个过程中,我们只能使用在 0 左右的某个区间内有限的 mgf。区间可以是整个实线。实际上,如果 mgf 在 0 附近是有限的(不仅仅是 0 的一侧),那么所有的时刻都存在。
展开$$e^{tX}$$可得到:
暂且放下关于我们是否可以将无限和与其他操作切换的问题。继续对$$M_{X}$$求导。设$$M_{X}^{n}$$表示第 n 个导数。可得
因此
对$$M{(1)}(0)$$积分得到$$M(0)=E(X^{2})$$,以此类推
因此,我们可以通过在 t = 0 时评估$$M_{X}$$的连续导数来生成X的矩。 这是 mgf 有用的一种方式。
识别分布
在本课程中,我们大量使用了一阶矩和二阶矩,并没使用高阶矩。情况将继续如此。但是 mgf 确实涉及所有时刻,这导致了一个对于证明分布事实非常有用的属性:
如果两个分布具有相同的 mgf,则它们必须是相同的分布。例如,如果将随机变量的 mgf 识别为正态分布的 mgf,则随机变量必须是正态的。
相反,如果您知道随机变量的期望,则无法识别随机变量的分布;即使你知道平均值和 SD(相当于一阶矩和二阶矩),你也无法识别分布。但是如果你知道生成函数,那么你就可以识别。
如果 mgf 存在于 0 左右的区间内,则此属性有效,我们在本节前面已假设。
mgf 确定分布是 mgf 有用的另一个原因。
与和的良好合作
mgf 有用的第三个原因是,与 pgf 一样,独立随机变量之和的 mgf 很容易计算为乘积。
令X和Y独立,则:
所以如果X和Y独立,
现在是举一些例子的时候了。 请记住,X的 mgf 是X的函数的期望。 在某些情况下,我们将使用非线性函数规则计算它以获得期望值。 在其他情况下,我们将使用独立随机变量之和的 mgf 的乘法性质。
一切离散随机变量的 mgf
伯努利(p)
P(X=1)=p 并且 P(X=0)=1-p=q。所以对于所有 t
二项分布(n,p)
一个二项分布随机变量是 n 个独立同分布变量之和,所以对于所有 t
泊松分布(μ)
这是一个练习。对于所有 t
您还可以使用它来显示独立泊松变量的总和是泊松。
伽玛(r,λ)随机分布的 mgf
令X有伽玛(r,λ)分布,则:
具有相同率的独立伽玛变量的和
如果X是伽玛(r,λ)分布且独立于X的Y也是伽玛(r,λ)分布,则:
这是伽马(r+s,λ)分布的 mgf。 因为 mgf 识别分布,所以X+Y必须具有伽马(r+s,λ)分布。
MGF,正态和 CLT
令Z为标准正态,则Z的 mgf 为:
因为积分为 1,它是正态密度(t,1)在整个区间上的积分。
详细推导如下:
正态$$(\mu ,\sigma ^{2})$$
首先要注意的是,矩生成函数在线性变换下表现良好。
因为正态变量$$(\mu ,\sigma ^{2})$$可以被写成$$sigma Z+\mu $$,其中Z为正态分布,它的 mgf 为
此外,这个公式的意思是,如果一个矩生成函数对于任意常数 c_{1}和任意正常数 c_{2}为$$exp(c_{1}t+c_{2}t^{2})$$那么它是正态分布的随机变量的矩生成函数。
独立正态变量的和
现在我们可以证明独立正态变量的和是正态的。
令X为正态分布$$(\mu {X},\sigma ^{2})$$,令Y独立于X并为正态分布$$(\mu {Y},\sigma ^{2})$$,可得:
这就是在均值为$$(\mu {X}+\mu {Y})$$,方差为$$(\sigma ^{2}{Y}})$$的正态分布的 mgf。
中心极限定理的“证明”
研究 MGF 的另一个重要原因是它们可以帮助我们确定分布序列的极限。
我们已经看到的收敛的主要例子是中心极限定理。现在我们可以举出一个证明。
设$$X_{1}$$,$$X_{2}$$,...为具有期望μ和方差$$\sigma $$的独立同分布随机变量。对于每个$$n\geqslant 1$$,使$$S_{n}=X_{1}+X_{2}+...+X_{n}$$
中心极限定理表明,对于较大的n,标准化和的分布近似为标准正态分布:
为了显示这一点,我们将假设一个主要结果,其证明超出了本书的范围。假设$$Y_{1}$$,$$Y_{2}$$,......是随机变量,我们想证明$$Y_{n}$$的分布收敛于某些随机变量Y的分布。结果表明,这足以说明$$Y_{n}$$的 MGFf 收敛到Y的 MGF。
结果需要仔细的陈述,证明需要相当注意细节。在这门课上我们不会讨论这个问题。相反,我们会指出它似乎是合理的。因为 mgf 确定分布,所以不难推论如果两个 mgf 彼此接近,那么相应的分布也应该彼此接近。
让我们用这个结果来“证明”CLT。引号是因为我们将在没有证明的情况下使用上面的结果,并且还因为下面的参数涉及一些关于近似的手势。
首先,用标准化的X写标准化的总和。
对于每个i,随机变量$$X_{i}^{*}$$是$$X_{i}$$的标准单元。
随机变量$$X_{i}{*}$$是独立同分布的,所以令$$M_{X}{}$$代表他们中任意一个,通过以上证明的线性变换性质,给出了每一个$$\frac{1}{\sqrt{n}}X_{i}^{}$$的 MGF 为:
因此
通过忽略小项,并且对于任何标准化随机变量$$X{*}$$的,我们可得$$E(X)$$和$$E(X{*{2}})==1$$。
因此,对于大的n,
极限是标准正态分布的矩生成函数。
切诺夫界
如果分布的形式很难确定,因为通过积分很难找到准确的概率,那么好的估计和边界就变得很重要。随机变量分布尾部的界限帮助我们大致量化随机变量可能接近平均值的程度。
我们已经知道了两个这样的界限。设X为具有期望$$\mu _{X}$$和$$\sigma $$的随机变量。
马尔科夫右手边约束
如果X是非负的,则
切比雪夫两边界
矩生成函数可以帮助我们在许多情况下改进这些界限。在下面,我们将假设X的矩生成函数在整个实直线上是有限的。如果它仅在 0 附近的较小间隔上是有限的,则下面的 MGF 的计算应限于该间隔。
切诺夫右界
如果g是一个递增函数,那么事件$$\left { X\geq c \right.\left. \right }$$$$\left { g(X)\geq g(c) \right.\left. \right }$$与相同。
对任意常数$$t>0$$,被$$g(x)=e^{tx}$$定义的函数递增且非负,那么对于每个$$t>0$$,
这是在右边推导切诺夫的第一步。
下一步,注意你可以选择 t 为任何正数。t 的一些选择将给出比其他人更清晰的界限。因为这些是上界,所以所有边界中最清晰的将对应于使右手边最小化的 t 值。所以切诺夫界限有一个优化的形式:
正态分布的应用
假设为正态分布$$(\mu {X},\sigma ^{2})$$,我们想知道X能在平均值上有多远。修正 C>0。X的值至少是在平均值以上的确切概率是
因为$$X-\mu $$的分布式正态的$$(0,\sigma ^{2}_{X})$$.这个精确的答案看起来很整洁,但是标准的正常 CDF $$\Phi $$ 是不容易分析的。有时我们可以从一个良好的界限获得更多的灵感。
最优的切诺夫界为
曲线以下是$$e^\frac{\sigma {2}t{2-ct}}{2}$$在$$c=5 \sigma =2$$的情况下作为 t 函数的曲线。平坦线是$$P(X-\mu \geqslant c)$$的精确概率。曲线总是高于平面线:无论 t 是什么,界限是一个上界。所有上界的最大值对应于在 1.2 到 1.3 范围内的某个极小值$$t^{*}$$。
# NO CODE
c = 5
sigma = 2
t_min = 0.5
t_max = 2
t = np.arange(t_min, t_max, 0.01)
bound = np.exp(-1*c*t + 0.5*((sigma*t)**2))
exact = 1 - stats.norm.cdf(2.5)
plt.plot([t_min, t_max], [exact, exact], lw=2, label = 'Exact Chance')
plt.plot(t, bound, lw=2, label = 'Bound')
plt.legend(bbox_to_anchor=(1.4, 1))
plt.xlabel('$t$')
plt.title('Bounding $P(X - \mu \geq 5)$ when $X$ is normal $(\mu, 2^2)$');

为了找到t的最小值,我们将使用最小化的标准微积分方法。但是首先我们将通过观察找到正函数最小化的点与找到函数的对数最小化的点来简化我们的计算。这是因为log是一个递增的函数。
因此,该问题减小到寻找函数$$h(t)=\frac{\sigma {2}t{2-ct}}{2}$$的t的最小值。微分法求解t的最小值:
因此
所以切诺夫界为:
当c较大时,优化的切诺夫边界比切比雪夫有更大的锐度。在$$\sigma =2$$的 Chernoff=2 的情况下,下面的曲线示出了$$P(X-\mu \geqslant c)\leq $$作为c的函数的精确值,以及与切诺夫边界的关系。
# NO CODE
sigma = 2
c_min = 4
c_max = 7
c = np.arange(c_min, c_max + .01, 0.01)
chernoff = np.exp(-0.5*((c/sigma)**2))
chebychev = 0.5 * ((sigma/c)**2)
plt.plot(c, 1 - stats.norm.cdf(c/sigma), label='Exact Chance', lw=2)
plt.plot(c, chernoff, lw=2, label='Chernoff Bound')
plt.plot(c, chebychev, lw=2, label='Chebychev Bound')
plt.xlim(c_min, c_max)
plt.xlabel('$c$')
plt.legend()
plt.title('Bounds on $P(X - \mu \geq c)$ when $X$ is normal $(\mu, 2^2)$');

切诺夫左界
通过类似的论证,我们可以得到一个分布的切诺夫左界。对于一个常数 t>0,函数$$g(x)=e^{-tx}$$是递减的且非负的。对于 t>0 和任何常数c,
因此:
独立随机变量的和
切诺夫界经常被应用于独立随机变量的和。设$$X_{1}$$,$$X_{2}$$,...独立。使$$S_{n}=X_{1}+X_{2}+...+X_{n}$$,对于任意常数c,在 t>0 时:
由于伯努利随机变量的矩母函数具有直截了当的形式,这个结果对于寻找二项式尾上的界是有用的。它也被用于具有可能不同的成功概率的独立指示符的和的包围尾部。我们将把这一切留给后续的课程。
二、计算几率
原文:prob140/textbook/notebooks/ch02
译者:飞龙
自豪地采用谷歌翻译
一旦你开始处理概率问题,你很快就会意识到所有可能结果是等可能的假设并不总是合理的。例如,如果你认为硬币有偏差,那么你就不会认为它的正反面具有相同的几率。
为了处理一些情况,其中某些结果比其他结果几率更高,需要更普遍的理论。在 20 世纪 30 年代,俄罗斯数学家安德烈科尔莫戈罗夫(Andrey Kolmogorov,1903-1987)提出了一些基本规则,称为公理,涵盖了丰富的情况,并成为现代概率论的基础。
公理从结果空间Ω开始。我们现在假设Ω是有限的。概率是一个定义在事件上的函数P,正如你所知,它是Ω的子集。前两个公理只是设置了度量的尺度:他们将概率定义为 0 和 1 之间的数字。
- 概率是非负的:对于每个事件
A,
。 - 整个空间的概率为 1:
。
第三个也是最后一个公理,它是概率成为事件“测度”的关键。在我们制定了一些相关术语后,我们会研究它。
加法
第三个公理关于互斥事件。非正式来讲,如果最多只有一个事件发生,则两个事件A和B是互斥的;换句话说,它们不能同时发生。
例如,假设你从一门课中随机抽取一名学生,其中 40% 的学生是新生,20% 是大二学生。每个学生既可以是大一学生,也可以是大二学生,也可以什么都不是;但没有一个学生既是大一学生,也是大二学生。所以如果A是“所选学生是新生”而B是事件“所选学生是二年级”的事件,则A和B是相斥的。
互斥事件有什么大不了的?要理解这一点,首先考虑所选学生是大一学生或大二学生的事件。在集合论的语言中,这是“新生”和“大二”两个事件的结合。使用维恩图来显示事件是一个好主意。在下图中,将A和B设想为两个互斥的事件,显示为蓝色和金色圆圈。因为事件是互斥的,所以相应的圆不重叠。并集是两个圆圈中所有点的集合。
def show_disjoint_union():
plt.figure(figsize=(10, 20))
# create the circles with shapely
a = sg.Point(1.4,2.5).buffer(1.0)
b = sg.Point(3.3,2.5).buffer(0.75)
# use descartes to create the matplotlib patches
ax = plt.subplot(121)
ax.add_patch(descartes.PolygonPatch(a, fc='darkblue', ec='k', alpha=0.8))
ax.add_patch(descartes.PolygonPatch(b, fc='gold', ec='k', alpha=0.6))
ax.annotate('A', [1.4, 2.5])
ax.annotate('B', [3.3, 2.5])
# control display
plt.title('Mutually Exclusive Events')
plt.axis('off')
ax.set_xlim(0, 5); ax.set_ylim(0, 5)
ax.set_aspect('equal')
# use descartes to create the matplotlib patches
ax = plt.subplot(122)
ax.add_patch(descartes.PolygonPatch(a, fc='blue', ec='k', alpha=0.8))
ax.add_patch(descartes.PolygonPatch(b, fc='blue', ec='k', alpha=0.8))
# control display
plt.title('Disjoint Union')
plt.axis('off')
ax.set_xlim(0, 5); ax.set_ylim(0, 5)
ax.set_aspect('equal')
show_disjoint_union()

学生是大一或大二的几率是多少? 在总体中,40% 是大一,20% 是大二,所以自然答案是 60%。 这是满足我们“大一或大二”标准的学生的百分比。 简单的加法是有效的,因为两组不相交。
科尔莫戈罗夫用这个想法来形成第三个,也是最重要的概率公理。正式来讲,如果交集为空,则A和B是互斥事件:

第三个公理,加法规则
在有限结果空间的背景下,公理表明:
- 如果
A和B是互斥事件,那么
。
你将在练习中表明这个公理蕴涵着更一般的东西:
-
对于任何固定的
n,如果
是互斥的(也就是对于所有
,
),那么:![P\big{(} \bigcup_{i=1}^n A_i \big{)} = \sum_{i=1}^n P(A_i)]()
有时叫做有限可加性公理。
这个看似简单的公理具有巨大的力量,特别是当它扩展到无数个互斥的事件时。首先,它可以用来创建一些方便的计算工具。
嵌套事件
假设一个班级中有 50% 的学生将数据科学作为他们的专业之一,40% 的学生主修数据科学和计算机科学(CS)。 如果你随机选择一个学生,那么该学生主修数据科学,但不是 CS 的几率是什么?
下面的维恩图显示了一个对应于事件A(数据科学作为专业之一)的深蓝色圆圈,和一个对应B(主修数据科学和 CS)的金色圆圈(未按比例绘制)。这两个事件是嵌套的,因为B是A的一个子集:B中的每个人都把数据科学作为他们的专业之一。
所以
,那些主修数据科学但不是 CS 的人是A与B的差:

其中
是B的补集。差是右侧浅蓝色的圆圈。
def show_difference():
plt.figure(figsize=(10, 20))
# create the circles with shapely
a = sg.Point(2,2.5).buffer(1.0)
b = sg.Point(2,2.5).buffer(0.75)
# compute the 2 parts
left = a.difference(b)
middle = a.intersection(b)
# use descartes to create the matplotlib patches
ax = plt.subplot(121)
ax.add_patch(descartes.PolygonPatch(left, fc='darkblue', ec='k', alpha=0.8))
ax.add_patch(descartes.PolygonPatch(middle, fc='olive', ec='k', alpha=0.8))
# control display
plt.title('Nested Events')
plt.axis('off')
ax.set_xlim(0, 5); ax.set_ylim(0, 5)
ax.set_aspect('equal')
# use descartes to create the matplotlib patches
ax = plt.subplot(122)
ax.add_patch(descartes.PolygonPatch(left, fc='blue', ec='k', alpha=0.8))
ax.add_patch(descartes.PolygonPatch(middle, fc='None', ec='k', alpha=0.8))
# control display
plt.title('The Difference')
plt.axis('off')
ax.set_xlim(0, 5); ax.set_ylim(0, 5)
ax.set_aspect('equal')
show_difference()

这个学生在浅蓝色的差中的几率是多少呢? 如果你回答“50% - 40% = 10%”,你是对的,你的直觉说概率的行为就像区域一样。他们是这样。 事实上,这个计算是从可加性的公理出发的,我们也通过查看这些区域来受它们启发。
减法规则
假设A和B是事件,
。那么
。
证明。由于
,

这是个不相交集合,根据加法公理:

所以,

补集
如果一个事件的几率是 40%,它不会发生的几率是多少? 60% 的“明显”答案是减法规则的特例。
补集规则
对于任何事件B,
。
证明。 下面的维恩图显示了要做什么。 在减法公式取A = Ω,记住第二个公理
。或者,在这种特殊情况下为减法规则重新取参数。
def show_complement():
plt.figure(figsize=(10, 20))
# create the square and circle with shapely
a = sg.box(0, 0, 4.5, 4.5)
b = sg.Point(2.25,2.5).buffer(1)
# compute the 2 parts
left = a.difference(b)
middle = a.intersection(b)
# use descartes to create the matplotlib patches
ax = plt.subplot(121)
ax.add_patch(descartes.PolygonPatch(left, fc='None', ec='k', alpha=0.8))
ax.add_patch(descartes.PolygonPatch(middle, fc='darkblue', ec='k', alpha=0.8))
# control display
plt.title('An Event (Square = Omega)')
plt.axis('off')
ax.set_xlim(0, 5); ax.set_ylim(0, 5)
ax.set_aspect('equal')
# use descartes to create the matplotlib patches
ax = plt.subplot(122)
ax.add_patch(descartes.PolygonPatch(left, fc='blue', ec='k', alpha=0.8))
ax.add_patch(descartes.PolygonPatch(middle, fc='None', ec='k', alpha=0.8))
# control display
plt.title('The Complement')
plt.axis('off')
ax.set_xlim(0, 5); ax.set_ylim(0, 5)
ax.set_aspect('equal')
show_complement()

当你在概率计算中看到减号时,就像在上面的补集规则中一样,你会经常发现减号是由于在附加规则的应用中,术语的重新排列。
当你加或减概率时,你就隐式地将一个事件分解成不相交的部分。这被称为划分事件,是需要掌握的一项基本的重要技术。在随后的章节中,你将看到很多划分的用法。
示例
让我们看看我们是否可以使用我们开发的结果来计算一些几率。一些步骤不计算也能清楚;其他东西需要更多的工作。
示例 1:n次投掷中的正面和反面
一枚硬币被抛出n次,以使所有
种可能的正反面序列是等可能的。
问题。获得至少一个正面和至少一个反面的几率是多少?
回答。许多序列中每一面至少出现一次。例如,如果n = 4,则这样的序列包括HTTT,HTHT,TTHT等等。
方法 - 补集:当一个事件可能以多种不同的方式发生时,查看它不会发生的方式可能是一个好主意,因为这样情况较少。
对于n = 4,每个面没有至少出现一次的唯一序列是HHHH和TTTT。事实上,对于任何n,只有两个序列,我们不能从中得到两个面:所有都是正面和所有都是反面。这些是所有元素都相同的两个序列。
让A成为事件“我们得到至少一个正面和至少一个反面”。问题要求P(A)。因为
是事件“序列的所有元素都相同”,所以我们有:

根据补集规则:

请注意,随着n变大,答案趋于 1。随着大量的投掷,你几乎肯定可以看到正面和反面。
示例 2:骰子的 12 次投掷的最大值
一个骰子投掷了 12 次,所以所有
个点数序列是等可能的。将 12 个投掷的最大值定义为 12 个点数中出现的最大值。 例如,序列354222143351的最大值是 5。
问题 1。最大值小于 5 的概率是多少?
答案 1。关键是观察事件“最大值小于 5”与事件“所有 12 个面都小于 5”相同。 为了发生这种情况,12 个点数中的每一个都必须具有四个值 1 到 4 之一。所以:

是的,我们可以进一步简化,但我们不打算,因为很快就会明白原因。
问题 2。最大值小于 4 的概率是多少?
答案 2。这里没有什么新东西,除了在问题 1 中将 5 替换成 4。

问题 3。最大值等于 4 的概率是多少?
答案 3:写下所有最大值等于 4 的序列的并不容易。 让我们看看,我们是否可以使用我们已经知道的。 最大值等于 4:
最大值必须小于 5,
并且不能小于 4。
我们将集合{4}看作一个差:{1,2,3,4} - {1,2,3}。
所以通过减法规则,

12 次投掷没有什么特别之处。你可以在整个过程中用n代替 12,并且参数将如上所述。
最大值是一个极值的例子,另一个是最小值。
解决问题的技巧:当你使用极值时,请记住我们在本例中使用的观察结果:说最大值很小等同于说所有元素都很小。类似地,说最小值很大等同于说所有元素都很大。
示例 3:大于第一个随机数的第二个随机数
一个随机数生成器产生两个数字,因此所有 100 对数字都是等可能的。
问题。第二位数字大于第一位的可能性是多少?
答案,方法一 - 划分:制定事件发生的所有方式的组织清单。 列出第二个数字大于第一个数字的一个好方法是,根据第一个数字的值来划分它们:
- 第一位数字 0,第二位 1 到 9
- 第一位数字 1,第二位 2 到 9
- 第一位数字 2,第二位 3 到 9
- 等等,直到
- 第一位数字 8,第二位 9
这个划分使其很容易计算,在 100 个可能的偶对中,第二个数字大于第一个数字的所有偶对:有9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 = (9×10) / 2 = 45种。所以答案是 0.45。
答案,方法二 - 对称性:用一些对称性说服自己:第二个数字大于第一个数字的几率与第一个数字大于第二个数字的几率相同。一种方法是根据第二个数字的值,来划分第二个事件,并注意与方法一中的划分的对应关系。
所以如果
,加法规则表明:

因为有 10 对相等的数字:00, 11, 22, ..., 99。现在求解p:

像之前一样。
学习这两种方法是一个好主意。划分和对称将在整个课程中使用。
乘法
概率的主要公理有关互斥事件,事实证明,我们不需要任何其他公理来处理相交的事件。
def show_intersection():
plt.figure(figsize=(8, 16))
# 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(121)
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('Two Events')
plt.axis('off')
ax.set_xlim(-2, 2); ax.set_ylim(-2, 2)
ax.set_aspect('equal')
# use descartes to create the matplotlib patches
ax = plt.subplot(122)
ax.add_patch(descartes.PolygonPatch(left, fc='None', ec='k', alpha=0.8))
ax.add_patch(descartes.PolygonPatch(right, fc='None', ec='k', alpha=0.8))
ax.add_patch(descartes.PolygonPatch(middle, fc='blue', ec='k', alpha=0.8))
# control display
plt.title('The Intersection')
plt.axis('off')
ax.set_xlim(-2, 2); ax.set_ylim(-2, 2)
ax.set_aspect('equal')
show_intersection()

让A和B为两个事件。 交集A ∩ B是A和B都是发生的事件,右侧的维恩图中以亮蓝色显示。
因为我们会一直遇到交集,所以在我们的表示法中我们会有点偷懒:我们将使用AB来表示交集,而不会写入交集符号∩。你必须记住AB是一个事件,而不是乘积。
这里有一个例子可以帮助解释我们即将制定的一些定义。
无放回随机抽取
假设我有一个小牌组,由一张红色,一张绿色和一张蓝色的牌组成。假设我洗牌,抽一张,给剩下的两张洗牌,然后从中抽出一张。这被称为在不从牌组替换的情况下,随机抽取两张牌。
一个合理的结果空间是Ω = {RG, RB, GB, GR, BR, BG},其中所有六个元素的等可能的。
我们首先获得绿色,然后是红色的牌的几率,是单个序列GR的几率:

简单的计算包含更有趣的东西。 注意:

第二个因子 1/2 是什么?要理解这一点,只要看看G排在第一位的偶对。 其中,只有一个的下一张牌是R。乘积的第二个因子是:

这个分数被称为,在G是第一个的条件下,R是第二个的条件概率。
它表示为P(second card R∣first card G)。这是垂直的条形,不是倾斜的。
现在我们对这张牌的原始计算可以写成一次一张牌:

条件概率
像上面这样的计算启发了一个新的定义。让A和B为两个事件。那么B在A条件下的条件概率定义为:
除法规则:

这里有一些滥用符号的情况。B|A不是一个事件。 但是符号很方便。整个左侧应被理解为“在发生A的情况下的B发生的概率”。
定义表明:给定A发生了,所以把你的注意力限制在A发生的结果上。 这就是你现在的整个空间,所以所有的几率必须相对于P(A)来计算。 现在B发生的几率是什么?答案是P(AB)/P(A)。
我们除以P(A),你们之间更加小心可能会想知道如果P(A) = 0会发生什么。 那么,在这种情况下,我们不会给定A发生,因为A不会发生。所以我们不必担心这种情况。
乘法规则:
这只是条件概率定义的重新排列,但它也许是所有规则中最常用的规则。
让A和B为两个事件。 那么他们都发生的几率是:

注意答案是“小部分的小部分”。A和B都发生的几率小于A发生的几率 - 事件上条件越多,发生的概率就越小。
由于AB ⊆ B,你知道P(AB)小于P(B)。你也检查一下:

我们将以一些简单的例子结束本节。 下一节包含一些需要更多工作的例子。
示例 1:两张牌中的两个 A
标准牌组由 52 张牌组成,其中 4 张是 A。两张牌无放回地随机发放。
问题 1。给定第一张牌是 A,第二张牌是 A 的几率是多少?
答案 1。3/51,因为现在你的套牌有 51 张牌,其中 3 张是 A。
问题 2。两张牌都是 A 的机会是多少?
答案 2:通过乘法规则和答案 1,答案是:

问题 3。如果带放回地发牌,问题 1 和问题 2 的答案如何改变?
答案 3(究竟谁带放回地发牌?仅仅在概率班里面......)在抽出第二张牌之前,你放回了牌。在这个假设下,你每次都从完全相同的牌组上进行抽取,所以:

无论第一张牌是什么,答案都是一样的。同时:

注意,改变随机性的性质不会改变你是否乘以几率。你仍然在寻找交集的几率,所以你打算做乘法。假设的改变只会改变你的相乘方式。
示例 2:99 岁
根据你在 Data8 中看到的人口普查估计,2014 年美国人口为 318,857,056。 共有 9,037 名 99 岁男性和 32,791 名 99 岁女性。
问题。假设你在 2014 年从美国人口中随机挑选了一个人,那个人是 99 岁。根据这些信息,这个人是女性的几率是多少?
回答。答案自然是 99 岁中的女性百分比:

这与条件概率的定义一致,即你应该计算:

美国整体人口数字并不需要;它可以消去。 这是条件的重要观察。当你随机抽样并且你知道你的选择位于特定的子组中时,该子组内的数字都是重要的。
给定 99 岁的年龄,这个人的女性的概率几乎是男性的四倍。但正如你在 Data 8 中看到的,在我们最年轻的居民中 - 新生儿 - 男性多于女性。
更多示例
仅仅是一个加法规则和一个乘法规则 - 这就是所需要的一切。以下是标准问题求解技巧的一些示例。
示例 1:基本方法 - 从划分开始
一个盒子包含 6 个黑巧克力和 4 个牛奶巧克力。 我随机挑选了两个,不带放回。
问题。我得到每一种的几率是多少?
回答。你会注意到这个问题没有说明第一个是黑的还是牛奶。两个都可能发生。因此,请列出事件发生的不同方式,即事件划分:
第一个是黑的然后是牛奶:根据乘法规则,几率为(6/10)·(4/9)
第一个是牛奶然后是黑的:几率为(4/10)·(6/9)
(啊!这两项是相同的!为无放回抽样中的更多这样的对称性做好准备。)
现在将两个几率相加。 答案是2·(6/10)·(4/9)。
这种方法应该像呼吸一样自然。 你应该在不自然的假设下重做这个问题,即巧克力是带放回抽样的,看看什么变化了,什么保持不变。
示例 2:波利亚坛子模型
一个盒子包含b个黑球和w个白球。随机抽取一个球,然后把它放回,并放入d个同颜色更多的球。然后从坛子中随机抽出一个球。
问题 1。第一个抽出的球是黑色的几率是多少?
答案 1。不需要太多努力。

问题 2:第二个抽出的球是黑色的几率是多少?
答案 2。你自然而然会想,第一个球是什么,所以根据那个球的颜色进行划分,然后相加。基本方法再次发挥作用。

这与第一个球是黑色的几率是一样的,不管d是什么。这个规律很有趣!
问题 3:给定第一个球是黑色的,第二个球是黑色的概率是多少?
答案 3。我们已经在上面的计算中使用了它。 “随时间前进”的条件概率通常可以从问题中的信息中读出,例如:

问题 4:给定第二个球是黑色的,第一个球是黑色的几率是多少?
答案 4,这种“时光倒流”的条件概率不易读出。这是除法规则的所在。

这个确实取决于d,但它与答案 3 一样。前后颠倒似乎没有什么区别。
现在你开始明白,为什么这个规律带有着名的创始人乔治波利亚(George Polya,1887-1985)的名字。你可以继续重复这个规律 - 用d个另一个颜色的球代替抽出的球,然后再次抽出 - 获得一个过程,具有美丽和有用的属性,以便在数据进入时更新观点。我们将在课程的后面看到。
更新概率
数据改变了思想。我们可能会从世界如何运作的一系列假设开始,但随着我们收集更多数据,我们可能需要根据数据中看到的内容更新我们的观点。
观点可以通过概率来反映,而这些观点也可以在信息进入时更新。在本节中,我们将建立一个给定数据情况下的概率更新方法。我们将从一个例子开始,然后我们将更广泛地陈述该方法。
示例:真阳性
人口中有一种罕见的疾病:只有 0.4% 的人拥有它。有一种针对这种疾病的检验,用于拥有这种病的人,有 99% 的几率返回阳性结果。用于没有疾病的人,它有 99.5% 的机会返回阴性结果。总的来说,这是一个相当不错的检验。
从这个人口中随机挑选一个人。给定这个人的测试结果为阳性,这个人患病的概率有多大?
以下是我们在 Data8 中绘制的树状图,用于总结问题中的信息。

为了解决这个问题,我们将使用除法规则。 让D为患者拥有疾病的事件,并且在一些数学符号被滥用的情况下,让+成为患者测试结果为阳性的事件。 那么我们要找的是P(D | +)。按照除法规则,

(.004*.99)/(0.004*.99 + 0.996*.005)
# 0.44295302013422816
贝叶斯规则
一般来说,如果整个结果空间可以划分为事件
,B是一个正概率事件,那么对于每个i,

这种计算称为贝叶斯规则,是一个环境下的除法规则的应用,其中事件
可以看做“较早”阶段的结果,并且B是“较晚”阶段的结果。通过计算,我们可以求出给定较晚事件的,较早事件的“时光倒流”的条件概率,通过写出给定较早事件的,较晚事件的“随时间前进”的条件概率。
先验的影响
让我们仔细看看在我们在例子中得到的答案的数值。这有点令人不安。它说,即使这个人结果为阳性,他们患病的几率也不到 50%。这似乎很奇怪,因为测试的准确率非常高。
这不是测试或贝叶斯规则的错误。这是因为我们的前提是“这个人是随机从人群中挑选的”。这种疾病非常罕见,患有该疾病并且是阳性的人的比例,实际上比没有该疾病并且测试结果错误的人少一些。这解释了为什么随机挑选的人的答案少于 50%。
但是做疾病测试的人,通常由于他们或他们的医生认为他们应该做。在这种情况下,他们不再是“随机挑选”的人口成员。
对于这样的人,我们必须重新思考我们对随机性的假设。如果一个人认为他们可能患有这种疾病,那么他们患这种疾病的主观概率,应该大于随机成员的概率。让我们执行以下步骤,看看之前的差异有多大。
- 我们将把疾病的“先验概率”从 0.004 改为其他值;“无疾病”的先验概率将相应做出改变。
- 我们将保持测试准确率不变。
- 我们将观察对于先验的不同值,给定某人是阳性,疾病的“后验概率”的变化。
prior = make_array(0.004, 0.01, 0.05, 0.1, 0.5)
Table().with_columns(
'Prior P(D)', prior,
'Posterior P(D|+)', (prior*0.99)/(prior*0.99 + (1-prior)*0.005)
)
| 先验P(D) | 后验P(D|+) |
| --- | --- |
| 0.004 | 0.442953 |
| 0.01 | 0.666667 |
| 0.05 | 0.912442 |
| 0.1 | 0.956522 |
| 0.5 | 0.994975 |
该表格显示,给定测试结果为阳性,这个人患病的后验几率,很大程度上取决于先验。例如,如果这个人认为他们甚至有 10% 的几率患病,那么,给定他们测试为阳性,他们患病的概率会更新为 95% 以上。
二十、估计方法
原文:prob140/textbook/notebooks/ch20
译者:平淡的天
自豪地采用谷歌翻译
# 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
在数据 8 中,我们定义了一个参数,它是一个与人口相关联的数字,或者是一个模型中的分布。在迄今为止我们所做的所有推论中,我们假设一个参数是一个固定的数字,可能是未知的。我们已经发展了估计方法,试图捕捉一个未知的固定参数在置信区间基于数据随机抽取人口。
我们将通过推导一个通用的方法来开始这一章,使我们能够得到固定参数的良好估计。本质上,它从参数的所有可能值中寻找,并选择一个使获得所观察样本的机会最大化的值。
但是还有另一种思考未知参数的方法。与其把它们想象成固定的,不如把它们想象成随机的;随机性是由于我们自己对参数的不确定度。例如,如果我们认为某类电子邮件是钓鱼邮件的几率在 70%左右,那么我们可以想象这种几率本身是随机的,取自一个分布,该分布的大部分内容都在 70%左右。
一旦我们收集了关于各种电子邮件消息的数据,以及它们是否是钓鱼的,我们就可以根据这些数据更新我们的想法。我们可以将这个更新的参考表示为在收集数据之后由贝叶斯规则计算的分布。
在这一章中,我们将阐述更新我们对参数的看法的基本术语和方法。然后我们将在这两种方法的结果之间建立联系。
最大似然估计
假设你有一簇独立同分布样本 \(X_1, X_2, \ldots, X_n\) 其中每个\(X_i\) 的密度取决于 \(\theta\).
假设 \(\theta\) 是未知常量. \(\theta\) 的最大似然估计的方法是通过解答下列问题得到的:
在参数$theta $的所有可能值中,哪一个最大化了获得样本的相似性?
最大化参数的值称为最大似然估计或简称为 MLE。在本节中,我们将引出一种寻找 MLE 的方法。
让我们看一个例子来说明这个算法的主要思想。假设您知道你的例子是从正态分布\((mu,1)\)中抽取的,其中\(mu\)未知,并且你想去估计\(mu\)。假设采样值为 52.8、51.1、54.2 和 52.5。
这是一个小样本,但它携带信息。如果你必须在 32 和 52 之间选择值\(\mu\),你会选择哪一个?
不需经过任何详细的计算,很明显,32 不是一个好的选择,正态分布\((32,1)\)不大可能产生与观察样本中值一样大的值。如果 32 和 52 是\(\mu\)的唯一的两个选择,那么我们应该选择 52。
当然,\(\mu\)可以是任何数目。要找到最好的,我们必须去计算。
基于正态分布\((\mu,\σ^ 2)\)样本 \(\mu\)的 MLE
令\(X_1, X_2, \ldots, X_n\) 为独立同分布的正态分布 \((\mu, \sigma^2)\).,样本均值可以很好的估计\(mu\)。在这个例子中,我们将得知它是\(mu\)的最大似然估计。
如果我们还想估计\(\sigma\)呢?我们将在本节结束时解决这个问题。现在,让我们估计\(mu\)。
似然函数
似然函数是在观测值处估计的样本的联合密度,被认为是参数的函数。这有点令人困惑,但是我们一旦看到计算它就变得清晰明了。这个例子中的联合密度是\(n\)的\((\mu, \sigma^2)\)密度函数的乘积,因此似然函数是
当正态分布的平均值为\(\mu\)时,量\(Lik(\mu)\)称为数据\(X_1, X_2, \ldots, X_n\) 的似然。对于每一个固定的\(\mu\),\(Lik(\mu)\)是样本的函数,因此是一个随机变量。
你将很快会看到用如此奇怪的符号 \(Lik\) 的原因。现在请先记下来。
我们的目标是找到使这个似然函数在 \(\mu\) 可能的所有可能的值上最大化的 \(\mu\) 的值,。我们还不知道这样一个最大化是否有意义,但无论如何我们还是尝试一下。
所以我们需要力所能及的简化这个似然函数。
其中 \(C\) 独立于 \(\mu\) 所以不会影响最大化。
即使在简化版本,似然函数依旧很难最大化。由于它是个乘积,所以我们可以通过取它的对数来继续简化计算。
对数似然函数
对数函数不光可以将乘法转化为加法,它还是个增函数。因此使似然函数最大化的 \(\mu\) 的值也是使似然函数的对数最大化的 \(\mu\) 值。
令 \(L\) 为似然函数的对数,也叫做对数似然函数,接下来统称为对数似然函数。因为接下来大部分的篇幅都市围绕对数似然函数,所以我们称其为 \(L\) ,并使用 \(Lik\) 为对数似然函数。
\(L\) 方程比 \(Lik\) 更为简化.
因为 \(\log(C)\) 并不影响最大化,我们定义了一个函数 \(L - \log(C)\) 去计算从正态分布 \((\mu, 1)\) 中抽取的样本点 52.8, 51.1, 54.2, 和 52.5 。基于此样本,本节我们比较 \(\mu\) 的估计 32 和 52 .
sample = make_array(52.8, 51.1, 54.2, 52.5)
def shifted_log_lik(mu):
return (-1/2) * sum((sample - mu)**2)
以下是 \(\mu\) 在区间 \((30, 70)\)的函数图像.
# NO CODE
mu = np.arange(30, 70, 0.1)
l = Table().with_column('Mu', mu).apply(shifted_log_lik, 0)
plt.plot(mu, l, color='darkblue', lw=2 )
plt.xlabel('$\mu$')
plt.ylabel('$L(\mu) - \log(C)$', rotation=0)
plt.ylim(-1200, 100)

\(\mu\) 的最值看起来非常接近 52.5. 为了精确其值,我们会对 \(L\) 求 \(\mu\) 的导数并令其为 0.
对数似然函数的导数
应用链式法则,并且小心负数符号.
令其值为 0 求解 MLE
统计学上经常使用 "^" 符号去表示估计.所以令 \(\hat{\mu}\) 为 \(\mu\)的 MLE. 且 \(\hat{\mu}\) 满足方程:
我们应该检查一下结果代表的是最大值而不是最小值,你可以通过求 \(L\) 的二阶导数来证明其确实是最大值。
我们已经看到,\(\mu\)的 MLE 是样本均值 \(\bar{X}\),而无关于 SD \(\sigma\)。在上图中, \(\bar{X} = 52.65\).
# NO CODE
np.mean(sample)
52.650000000000006
你现在已经知道了 \(\bar{X}\) 的分布是正态的,且均值为 \(\mu\) ,方差为\(\sigma^2/n\)。如果你不知道 \(\sigma\), 如果样本量很大,你可以通过样本的 SD 来估计 \(\sigma\) 并以此构建 \(\mu\)的置信区间.
寻找 MLE 的步骤
让我们在一个算法中写出我们的步骤来找到给定独立同分布样本的参数的极大似然估计。
1.写出样本的似然。我们的目标是找到使这种可能性最大化的参数的值。
2.为了使最大化更容易,采用对数似然函数。
3.为了最大化参数的对数似然,取其参数的导数。
4.将导数设为 0,求出解;
让我们在另一个例子中实现这个算法。
基于伯努利分布的样本 \((p)\) 的 MLE
令 \(X_1, X_2, \ldots, X_n\) 为一个独立同分布伯努利样本 \((p)\) . 我们的目标是找到\(p\)的 MLE.
随机变量是离散的,所以似然函数定义为样本点的联合概率密度函数,我们通过下面的例子来看看为什么这么做。
假设 \(n=5\) 且在 1's 和 0's 的观测序列为 01101. 在\(p\) 的似然函数是在 \(p\)值下的观测到这个序列的机会:
似然依赖于 1's 的数值, 就像二项式概率公式一样. 因为我们在观察序列的每个元素,所以缺少组合项。
现在我们用我们的算法去找 MLE。
步骤 1: 找到似然函数.
令 \(X = X_1 + X_2 + \ldots + X_n\) 为样本在 1's 的值. 似然函数为
步骤 2. 找到对数似然函数.
步骤 3. 找到对数似然函数的导数.
Step 4. 令其为 0 求解 MLE.
因此
所以\(p\) 的 MLE 为:
所以 \(p\) 的 MLE 是 1's 的样本比例.为了计算出这个估计,你需要样本 1's 中的数值. 你不需要看到 0's 和 1's 的所有样本.
因为 MLE \(\hat{p}\) 是样本比例, 它是无偏的, 且 SD \(\sqrt{p(1-p)/n}\), 是渐进正态的. 当 \(n\) 很大你可以基于样本估计 SD 且确定 \(p\)的置信区间.
MLE 的性质
在以上的两个例子中, MLE 是无偏的且是完全正态或渐进正态的.通常来说, MLEs 不必无偏, 正如你将要看到的一个例子. 然而, 在某些概率分布或密度函数的正则性条件下,当样本较大时:
1.一致的,也就是说,可能接近参数
2.大致正态且几乎无偏
这一点超出了本课的范围,但是在练习中,你将通过仿真来观察这些属性。
虽然 MLE 的渐近方差理论很完美,但在实际应用中,很难用解析方法估计方差。这使得很难找到置信区间的公式。然而,您可以使用引导来估计方差:每个引导样本产生 MLE 的值,并且可以基于引导的 MLE 的经验分布来构造置信区间。
基于正态分布 \((\mu, \sigma^2)\) 样本 \(\mu\) 和 \(\sigma\) 的 MLE
令 \(X_1, X_2, \ldots, X_n\) 为一个独立同分布正态 \((\mu, \sigma^2)\) 样本.我们要找到 \(\mu\) 和 \(\sigma\)的 MLE.
似然函数
我们需要考虑包含 \(\mu\) 和 \(\sigma\)的方程:
其中 \(C = 1/(\sqrt{2\pi})^n\) 不影响最大化.
对数似然函数
最大化对数似然函数
我们通过两步来最大化 \(L\) :
1.首先固定 \(\sigma\) 根据 \(\mu\)最大化.
2.最后插入最大化时的 \(\mu\)值然后根据 \(\sigma\)最大化.
我们已经在本节的第一个例题完成了第一步. 对于每个固定的 \(\sigma\), 最大化值的 \(\mu\) 为 \(\hat{\mu} = \bar{X}\).
所以我们的任务是寻找最大化新方程的 \(\hat{\sigma}\) 值
其中 \(V = \sum_{i=1}^n (X_i - \bar{X})^2\) 独立于 \(\sigma\). 对 \(\sigma\) 求微分;持续跟中减号和 2 的因子.
S 令其为 0 然后解出最大化值 \(\hat{\sigma}\).
你需要再次检查这个结果是最大值,而不是最小值,但是再次给出答案,你肯定会接受它是最大值。
你已经在练习中看到\(\hat{\sigma}^2\)不是\(\sigma^2\)的无偏估计。你还表明,当\(n\)很大时,它接近于无偏。
为了总结我们的结果,如果 \(X_1, X_2, \ldots , X_n\)是独立同分布正态 \((\mu, \sigma^2)\)样本,那么 of \(\mu\) 和 \(\sigma\)的 MLEs 为:
\(\hat{\mu} = \bar{X}\)
\(\hat{\sigma} = \sqrt{\hat{\sigma}^2}\) 其中 \(\hat{\sigma}^2 = \frac{1}{n} \sum_{i=1}^n (X_i - \bar{X})^2\)
关于独立同分布正态样本的一个显著事实是,\(\hat{\mu}\) 和 \(\hat{\sigma}^2\)是彼此独立的,即使它们是从同一样本计算的统计数据。在本课程后面,你会看到原因。
计算注释:MLE 不能总是像我们的例子一样容易解析。重要的是要记住,如果没有数值优化方法,最大化对数似然函数往往是难以处理的。而且,并非所有似然函数都有唯一极大值。
先验与后验
你习惯于把硬币投掷认为对于固定的 \((p)\) 为一系列独立同分布伯努利 \((p)\)。在较早的一节中,我们成功的证明了样本比例\(\hat{p}\)是固定但未知的 \((p)\)的最大似然估计。
相反,假设我们认为 \((p)\) 是从单位区间上的随机抽取的结果。也就是说,我们假设硬币正面朝上的概率是一个随机变量\(X\),其密度\(f_X\) 为 \((0, 1)\)。这被称为\(X\)的先验密度。
先验密度反映了在看到数据之前我们对未知参数的看法。例如,如果我们不知道正面朝上的可能性是什么,我们可以使用均匀分布 (0, 1)为\(X\)的先验。如果出于某种原因,我们碰巧认为正面朝上的概率大约在 70%左右,那么我们可能使用 beta (7,3)为\(X\)的先验,因为正面朝上的先验期望是\(E(X) = 7/(7+3) = 0.7\)。或者我们可以使用一些其他的 beta\((r,s)\)先验,使得\(r/(r+s)\)大约为 0.7,并且事前密度的形状反映了我们对于正面朝上分布在 70%左右的想法。
现在,假设您根据先验密度密度\(f_X\)选择\(X\)一个值\(p\),并且反复抛出具有\(p\)正面朝上的概率的硬币。然后,假设\(x= p\),在$$\(抛掷中的正面朝上的的分布是二项式\)(n,p)$。
在我们进一步之前,让我们仔细地看一下“\(x= p\)”这个等式。因为\(X\)具有密度,所以\(X\)等于任何指定值的机会是 0,所以我们必须清楚我们所说的“X=p$”是什么意思。
连续变量条件
让我们来进行一个关于连续变量的条件的一般性讨论。我们的观察将在我们讲述条件密度的之前章节中并行讨论。
假设 \(X\) 是随机变量, \(A\) 是依赖于 \(X\)的事件.
如果\(X\) 是离散随机变量, 那么对任何有可能的\(X\) 的 \(x\)值 \(P(A \mid X = x)\) 可以通过除法得到很清晰的定义:
当 \(X\) 时连续的, 分母为 0.在这种情况下需要记住:
无论无限小的间隔 \(dx\) 在哪,\(P(A \mid X \in dx)\) 基本上是常数.这个常量将表示为 \(P(A \mid X = x)\).
所以对于连续的 \(X\), 我们定义
我们假设 \(dx\) 到 0 的右边极限存在,且不完全取决于\(dx\)是怎样定义的: 在 \(x\)附近,或在\(x\)的左面,或右面等等. 在这种规律条件下是正确的. 你可以假设他是有效的.
后验密度
令\(X\) 在单位区间和\(f_X\)概率密度函数下有值. 令 \(H\) 为 \(n\) 在 \(X\) 的正面朝上的概率下正面朝上的数量.也就是说,对于每个 \(x\) 假设给定 \(H\) 的条件分布 \(X=p\) 为二项分布 \((n, p)\).
注意随机化:我们从 \(X\)中选取 \(p\) , 随后投掷 \(p\)概率的硬币 \(n\) 次. 我们不是为了每次抛硬币而重新挑选硬币.
给定参数后 \(H\) 似然为
给定 \(H=k\), 那么 \(X\)是什么? 给定 \(H=k\),答案被表示为 \(X\)的后验密度. 使用贝叶斯公式来计算:
分母并不包含 \(p\). 这是常数的一部分,使后验密度整合到 1。因此,后密度与分子成比例:
正如我们在前面的离散例题中看到的,后验跟先验的似然是正比的。
有时,为了识别 \(X\)的后验分布,我们需要观察。下面是一个例子。
基于\((0, 1)\) 均匀先验的后验分布
假设我们对硬币一无所知,因此给定 \(X\) (0, 1) 均匀先验. 随后令 \(H = k\), 则 \(X\) 的后验密度为
\({n \choose k}\) 的因子并不包含 \(p\) 并且已被划入常数比例.
记住 \(X\) 的可能取值都是在单位区间. 你能看出 \(X\) 的后验密度是什么吗?
对: 是 \((k+1, n-k+1)\) beta 密度. 方程的形式是被 \(p^k(1-p)^{n-k}\) 决定的, 其中 \(n\) 和 \(k\) 可从数据中得知且 \(p\) 是变量的值.
我们来看看从 beta 密度中能得到什么.
给定数据集, 我们希望 \(X\) 是什么? 是 \(E(X \mid H = k)\), 对,就是给定数据 \(H=k\) 后\(X\) 的 beta \((k+1, n-k+1)\) 后验密度的期望. 通过 beta 密度的定理可得
对于大的 \(n\) 来说,它相当接近观察到的\(k/n\) 的比例,但不完全相同。
MAP 估计: 后验模式
\(X\) 的后验分布反映了我们对数据的 \(X\) 的新看法。如果我们坚持认为我们对正面朝上概率的估计必须是数字而不是分布,那么我们可以采用上面的后验平均值。或者我们可以用另一个问题的答案:
给定数据, \(X\) 最有可能是什么?更确切地说,给定 \(H=k\)的数据, \(X\) 的后验分布的模式是什么?
答案是 beta \((k+1,n+k+ 1)\)密度的模式。这被称为正面朝上后验概率的最大后验概率(MAP)估计。
beta \((r, s)\) 密度的模式很容易找到微积分。当 \(r\) 和 \(s\) 都大于 1,模式是\((r-1)/(r+s-2)\)。
因此,如果 \(1 \le k \le n-1\) (即,除了极端情况\(k=0\)和\(k=n\)),则给定 \(H=k\) 的后验分布 \(X\) 的模式是
这是观察到的正面朝上的比例.
在 \(k = 0\)的情况下,后验模式为 0,这也是观察到的正面朝上比例。在 \(k = n\)的情况下,后验模式为 1,也是观察到的正面朝上比例。
MLE 和 MAP
我们刚刚得知,如果在可能值(0,1)的区间上均匀地选择正面朝上的机会,那么 MAP 估计与我们假设正面朝上的固定概率而获得的 MLE 相同。
让我们来看看为什么这是有对的。当先验一致时,后验密度为
右边正好是 \(k\) 个正面朝上在\(p\)概率硬币抛掷的可能性。因此,找到后验分布的模式等价于找到最大化似然的 \(p\) 。这正是我们发现正面朝上机会的最大似然估计时所做的。
这种等价性依赖于均匀先验密度是常数。如果我们在(0, 1)上使用其他的先验密度,那么后验模式可能与正面朝上的比例不同。在下一章中,我们将发现 \(X\) 的后验密度可以从任何 beta 先验开始。这是一个流行的聚类模型的基础,你可以在网上检索。
独立性,重新审视
在这一节中,我们将看到,当参数随机化时,独立性会发生什么。首先,让我们复习一些基本知识。
平均条件概率
令 \(X\) 的密度诶 \(f_X\) 且令 \(A\) 为事件. 则
于是
也可写做\(P(A) = E(P(A \mid X))\). 这是通过条件寻找期望的一个例子.
硬币的一次投掷
令 \(X\) 的密度在单位区间 \((0, 1)\)上. \(X\) 的值为硬币正面朝上的概率. 投掷一次硬币. 再次重申 "给定 \(X=p\)" 的定义意味着
令 \(X\) 密度为 \(f_X\). 随后
因此如果 \(X\) 是在 \((0, 1)\)上均匀的, 则硬币正面朝上概率为 \(1/2\). 如果 \(X\) 为 beta \((r, s)\) 分布,那么硬币正面朝上概率为 \(r/(r+s)\).
硬币的二次投掷
令 \(X\) 在 \((0, 1)\)均匀分布. 给定 \(X = p\), 投掷 \(p\)概率的硬币两次 并观测结果.
我们观测到 \(P(\text{first toss is a head}) = 1/2\). 第一次投掷看起来像是 55 开的硬币. 同样的计算证明第二次投掷的概率(基于第一次投掷的经验)同样是 \(1/2\).
现在我们计算出两次正面朝上的概率. 我们知道 \(P(\text{both tosses are heads} \mid X = p) = p^2\). 所以
它大于 \(1/4\) ,可是两次投掷的硬币都是 55 开的. 结果表明两次投掷并不是独立的.
让我们来看看原因. 我们知道
因此
很明显, 知道第一次正面朝上呼我们已经知道了 \(X\)的一些经验, 这就告诉了第二次投掷还是正面朝上的概率.
为了量化这个想法,因为第一次抛掷是正面朝上,所以我们会发现 \(X\) 的后验密度。令\(A\) 成为第一次正面朝上的事件。该事件的后验密度与 \(A\)的先验成正比。因此可以计算为
在给定第一次正面朝上的情况下 \(X\) 的后验密度并不均匀.它线性增长并趋近于 1.
这表明: 给定第一次投掷为正面朝上, 我们更倾向于相信硬币是正面朝上而不是朝下。
积分的常数很容易找到. 第一次投掷为正面朝上的后验密度为 \(f_{X \vert A} (p) = 2p\) 其中 \(p \in (0, 1)\)
# NO CODE
plt.axes().set_aspect('equal')
p = np.arange(0, 1, 0.01)
plt.plot(p, 2*p, color='darkblue', lw=2)
plt.xlim(-0.05, 1.05)
plt.ylim(-0.05, 2.05)
plt.xlabel('$p$')
plt.title('Posterior density of $X$ given that the first toss is a head')

为了仔细检查我们先前的计算,我们可以使用后验密度的方法来计算 \(P(\text{second toss is a head} \mid \text{first toss is a head})\) 。
这与我们先前的计算是一致的。
二十一、Beta 和二项
原文:prob140/textbook/notebooks/ch21
译者:吕哲
自豪地采用谷歌翻译
# HIDDEN
from datascience import *
from prob140 import *
%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
import numpy as np
Beta 分布和二项
这一章中的关于 Beta 和二项的联系的相关知识,在机器学习领域有着重要意义。在前面的章节中,你已经初探了一些他们之间的联系。在本章中,我们会推广这些结果。
我们将要研究的实验有两个部分。
- 通过 beta 分布选取 \(p\) 的值
- 掷枚硬币来确定被我们选取的概率 \(p\)
我们将会看到先验信息和数据是如何与后来的硬币正面向上的分布相联系。在观察 n 次掷硬币的结果以后,我们将会预下一次掷硬币的结果。我们将会在 n 次随机硬币实验中观测得到硬币正反面的分布情况,并且与以后的硬币投掷结果比例进行比对。
在实验室中,当预先不知道可能性的大小的时候,你就可以把这些理论运用到聚类模型中去。
# HIDDEN
from datascience import *
from prob140 import *
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
%matplotlib inline
from scipy import stats
# HIDDEN
def plot_prior_and_posterior(r, s, n, k):
p = np.arange(0, 1, 0.01)
prior = stats.beta.pdf(p, r, s)
posterior = stats.beta.pdf(p, r+k, s+n-k)
plt.plot(p, prior, lw=2, color='gold', label = 'Prior: beta (r, s)')
plt.plot(p, posterior, lw=2, color='darkblue', label = 'Posterior: beta(r+k, s+n-k)')
plt.legend(bbox_to_anchor=(1.6, 1.02))
ymax = max(max(prior), max(posterior))
plt.ylim(-0.3, ymax+0.1)
plt.xlim(0, 1)
plt.scatter(r/(r+s), -0.1, marker='^', s=40, color='gold')
plt.scatter((r+k)/(r+s+n), -0.1, marker='^', s=40, color='darkblue')
plt.scatter(k/n, -0.02, s=30, color='red')
plt.xlabel('$p$')
plt.title('Prior, and Posterior Given $S_n = k$ (red dot at $k/n$)');
预测和更新
设 \(X\) 是一个满足 Beta 概率密度的随机变量。给定 \(X=p\) ,抛掷正面概率为\(p\)的硬币 \(n\) 次,并观察结果。基于正面向上的次数的结果,我们将
- 确定 \(X\) 的后验分布
- 预测 \((n+1)\) 次正面向上的概率
Beta 先验
对于正整数 \(r\) 和 \(s\) ,通过研究均匀随机变量 \((0, 1)\) 的独立同分布次序统计量,我们可以得到 beta\((r, s)\) 的概率密度函数。
Beta 族可以扩展到正数但不一定是整数的参数 \(r\) 和 \(s\) 。这种情况只是可能,因为你在实验中还观察到了以下两个事实:
- Gamma 函数是阶乘函数的连续扩展。
- 如果 \(r\) 是一个正整数,那么 \(\Gamma(r) = (r-1)!\) 。
所以,为了满足 \(r\) 和 \(s\) 只需要是正数而不一定是整数,我们重新定义 beta \((r, s)\) 概率密度函数:
我们不会证明这个函数的定义域已经包括了 1 ,但这一结论确实是真实可信的,因为我们已经观察到了这一结果对于整数参数值是有效的。
为了简化表示,我们将 β\((r,s)\) 概率密度函数中的常数表示为 \(C(r,s)\) 。
那么 β\((r,s)\) 的概率密度函数,就可以简化表示为:
\(C(r, s)x^{r-1}(1-x)^{s-1}\) for \(x \in (0, 1)\) 。
Beta 分布通常用于随机比例数据的建模。在上一个章节中,你已经看到了 beta\((1, 1)\) 的分布情况(或称为均匀分布),这种分布已经被用来给随机投掷硬币建模。
如你所见,如果我们知道我们抛出的硬币正面的概率 \(p\) ,那么他就是随机独立试验,但是如果我们不知道 \(p\) 的值是多少的时候,那投掷的情况就不再独立了。因为比如说,第一次投掷硬币的结果会告诉我们一些关于 \(p\) 值的信息,这个信息又会反馈出一些第二次投掷的可能结果的概率。
接下来我们会通过一个硬币向上概率的 beta \((r, s)\) 先验信息推广我们刚才的那些结果。
实验
我们令 \(X\) 具有 beta \((r, s)\) 分布,这就是 \(X\) 的先验信息,\(f_X\) 为先验信息的概率函数。那么可以得到
令 \(X = p\) ,设 \(I_1, I_2, \ldots\) 服从以 \((p)\) 为参数的独立同伯努利分布(译注:同时满足独立同分布以及伯努利分布)。也就是说,给定概率 \(X = p\),重复抛一个正面概率为\(p\)的硬币,然后记录结果为\(I_1, I_2, \ldots\)
再设 \(S_n = I_1 + I_2 + \cdots + I_n\) ,其中 \(S_n\) 为 n 次独立重复投硬币中,正面向上的次数。所以,当 \(S_n\) 中的 \(X\) 满足 \(X = p\) 时,\(S_n\) 的条件分布就是以 \((n, p)\) 为参数的二项分布
更新:给定 \(S_n\) 的后验分布
在开始实验之前,回顾一下,我们之前已经提到,\(X\) 具有满足以 \((r, s)\) 为参数的 beta 先验。接下来我们需要找到在给定条件 \(S_n = k\) 时的 \(X\) 的后验信息来更新掷了\(n\)次以后的先验信息。
我们在前面已经看到,后验分布的概率密度与之前投掷正面的次数成正比,对于 \(0 < p < 1\) ,
这之中,因为 \(C(r, s)\) 和 \(\binom{n}{k}\) 不包括 \(p\) ,所以你有时候可以看到 beta 密度函数是 \(f_{X \mid S_n = k} (p) ~ = ~ C(r+k, s+n-k) p^{r+k-1}(1-p)^{s + n - k - 1}, ~~~ 0 < p < 1\) 的形式。
当然,这个 beta 后验密度函数就很好去记忆了。我们先验信息开始;接着用观察到的正面向上的次数更新第一个参数;我们用观察到的反面向上的次数去更新第二个参数。
共轭先验
硬币正面向上概率的先验分布是来自 beta 族。正面向上概率的后验分布中,已经给定了正面向上的次数,是另一种 beta 密度函数。beta 先验分布和似然函数相乘(还有一个系数)就可以得到后验分布。因此,beta 族被称为是对于二项分布的共轭先验。在这个概念中,后验分布在这里是与先验分布同一个族的(与先验分布拥有相同的函数形式)。
最大后验概率估计:后验众数
最大后验估计正面概率实际上就是用的后验分布函数来进行的。如果 \(r\) 和 \(s\) 都比 1 大,那么 \(X\) 的后验分布的众数则是:
后验均值
当给定 \(S_n = k\) 时,\(X\) 的后验均值就是 beta 后验的期望,在 \(n\) 比较大的情况下,和后验众数差不多:
我们可以在一个例子中验证和这个结果,假设 \(X\) 的先验分布是 beta \((5, 3)\),因此计算出先验均值就是 \(E(X) = 5/8 = 0.625\) 。现在,假设我们给定 \(S_{100} = 70\),这样一来,\(X\)的后验分布就是 beta \((75, 33)\),后验均值就是 \(75/108 = 0.694\) 。
下面的图展示了两种有对应均值的概率密度函数。红点是正面向上的实际观测比例。
再进行相同的操作,保持 \(r = 5\) 以及 \(s = 3\) 但是把 \(n\) 改成 10、 \(k\) 改成 7。然后把 \(n\) 改成 1000、\(k\) 改成 \(700\),再试一次。接着观察图中概率为 0.7 的位置。注意观察样本大小是如何在 0.7 周围汇集的,我们稍后将介绍汇集的原因。
当然,也可以试试其他 \(n\) 和 \(k\) 值,比如观察到的值和先验均值相差很大的情况。
# Prior: beta (r, s)
# Given: S_n = k
# Change the values
r = 5
s = 3
n = 100
k = 70
# Leave this line alone
plot_prior_and_posterior(r, s, n, k)
![Data Influences Ipriorimg/21-1-1.png)
你可以在图中看到,数据是如何影响先验分布的。先验分布一般会聚集在先验均值附近。上图中均值是 0.625 ,但当给定 100 次投掷中有 70 次正面向上的时候,后验均值就是 0.694,这就和我们的直接观察结果 0.7 很相近了。
先验均值的公式显示了,当 \(n\) 很大的时候,先验均值就会很接近直接观察结果中正面向上的概率。当给定 \(S_n = k\) 的时候,后验均值的公式就是:
因此,当 \(S_n\) 作为一个随机变量的时候,后验均值就是:
随着投掷次数 \(n\) 增大,正面向上的次数也会随着变多。所以分子就会主要受到 \(S_n\) 的影响,而分母主要受到 \(n\) 的影响。因为 \(r\) 和 \(s\) 是常数,所以当 \(n\) 很大的时候,后验均值就会接近于 \(S_n/n\).
预测:给定 \(S_n\) 预测 \(S_{n+1}\) 的分布
如你在之前的章节中所见,掷一枚硬币正面向上的可能性是它随机概率的估计值,现在把这个放到我们当前的背景中来思考:
假设我们有前 \(n\) 次投掷的结果,这其中 \(k\) 次是正面向上。给定 \(S_n = k\) ,那么 \(S_{n+1}\) 的可能值就是 \(k\) 或者 \(k+1\) 。我们现在就能够使用更新后的 \(X\) 的分布,与上面同理:
我们可以使用完整的方程来描述 \(P(S_{n+1} = k \mid S_n = k)\) ,当 \(S_n = k\) 给定的时候,\(S_{n+1}\) 的条件分布函数为:
换句话说,当知晓前 \(n\) 次的投掷结果的时候,第 \(n+1\) 次是尾部的概率与 \(s\) 乘反面次数之积成正比,第 \(n+1\) 次是头部的概率与 \(r\) 乘正面次数之积成正比。
你可以把 \(\{ S_n: n \ge 1 \}\) 看做一个马尔科夫链(译注: 描述了一种状态序列,其每个状态值取决于前面有限个状态),但是值得注意的是,过渡概率不是以时间为次序的,因为其中还包含了参数 \(n\)。
# HIDDEN
from datascience import *
from prob140 import *
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
%matplotlib inline
from scipy import stats
\(β\)-二项分布
和上节一样, \(X\) 具有 beta \((r, s)\) 先验,给定 \(X = p\),并且让 \(S_n\) 作为前 \(n\) 次投掷一枚正面概率为 \(p\) 的硬币正面向上的次数。
我们在上一节中进行的所有计算都是在 \(S_n = k\) 的条件下进行的,但是在实际运用中我们其实对这种概率求解的情况并不常见。但它是 \(X\) 的后验概率密度函数的常数项之一,使得这个后验概率密度函数的积分为 1。
我们现在可以用两种形式来表达后验概率密度函数,从而得到 \(P(S_n = k)\)
通过回忆之前的内容,我们可以得到 beta \((r+k, s+n-k)\) 概率密度函数:
再使用贝叶斯规则:
两个方程联立得:
\(β\)-二项概率
对于 \(k\) 在 \(0\) 到 \(n\) 的范围中时:
此处, \(C(r,s)\) 是 beta \((r, s)\) 概率密度函数中的常量,并且等于:
这种离散分布就被称为以 \(r,s,n\) 为参数的\(β\)-二项分布。它可以表示一个硬币在 \(n\) 次投掷中正面向上的次数分布,其中,这个硬币正面向上的概率来自 beta \((r,s)\) 分布。
对于 \((r, s)\) 值等于 \((1, 1)\) 时会比较特殊,这种情况下 \(X\) 的先验信息是均匀先验,此时 \(S_n\) 可以化简为:
可以观察到,$ P(S_n = k ) $ 的表达式中没有 \(k\)。所以我们可以得到一个结论,如果 \(p\) 是在 0 到 1 之间均匀地选取,掷一个正面概率为 \(p\) 的硬币 \(n\) 次,那么他的正面向上次数的概率就是 \(\{ 0, 1, 2, \ldots, n\}\) 上的均匀分布。
如果 \(p\) 是在 0 到 1 之间非均匀地选取,那么对于条件分布 \(S_n\) , 给定 \(p\), 它的值就是以 \((n, p)\) 为参数的二项分布。但 \(S_n\) 如果是无条件分布,那么它的分布就是均匀的。
通过积分来检验
如果你愿意,你可以通过调整 \(X\) 的值来直接获得 \(S_n\) 的值。
期望
给定 \(X = p\) ,\(S_n\) 的条件分布就是以 \((n, p)\) 为参数的二项分布,因此,
或者,等价的,
再通过迭代可以得到,
因此,再 \(n\) 次投掷中期望比例就是,
这就是 \(X\) 先验分布的期望。
在下一节中我们会研究随机比例更长远的情况。
尾注
可以从前面看到,无条件概率 \(P(S_n = k)\) 出现在给定 \(S_n\) 的 \(X\) 后验密度函数的分母中。由于使用共轭先验带来的简化,我们可以用几种不同的方法计算分母。但是计算过程往往很复杂,特别是在高维情况下。在一些更加高级的其他课程中会讲述解决这种问题的方法。
# HIDDEN
from datascience import *
from prob140 import *
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
%matplotlib inline
from scipy import stats
长期比例
暂时先固定 \(p\) ,考虑一系列符合独立同伯努利分布的投掷 \(I_1, I_2, \ldots\)。通过弱大数定律可得,当尝试的次数逐渐增大的时候,成功次数的比例会接近于 \(p\) 。但是强大数定律会更加正确和准确:随着次数增加,样本成功的比例收拢于 \(p\) 概率为 1(译注:意为在样本数很大的时候,成功次数的比例无限趋近于 \(p\) ,概率为 1 意思是说利用极限的定义,对任何 \(ε\) ,\(|p-μ|<ε\) 恒成立)。
强大数定律的推导已经超出了这门课程的范围,但是我们依然可以通过模拟来观察大量投掷的结果。
我们会建立一个名为 binomial_proportion 的函数,它输入的参数为 \(n\) 和 \(p\) ,最后返回的结果为一个由序列 \(\{ \frac{S_k}{k}: k = 1, 2, \ldots, n\}\) 组成的数组,其中 \(S_k = I_1 + I_2 + \cdots + I_k\) 。这个序列就是在 \(n\) 次尝试中硬币正面向上的比例。
def binomial_proportions(p, n):
bernoulli = stats.binom.rvs(1, p, size=n)
return np.cumsum(bernoulli)/np.arange(1, n+1)
binomial_proportions(0.5, 4)
结果:array([ 0. , 0. , 0.33333333, 0.5 ])
上面的数组就是投掷一个正反面概率相同硬币四次的比例序列。请自己尝试,看看你能否计算出相应正反面对应的序列。
函数 plot_binomial_proportions 是一个绘制函数,可以显示出比例。它的第一个参数是包含所有 \(p\) 的数组,第二个参数尝试的次数。对于数组中每一个 \(p\) ,函数 binomial_proportion 都会计算 \(n\) 次独立同伯努利分布中成功次数的比例,并且在 \(k = 1, 2, \ldots , n\) 点对应的位置画出来。
我们把每一次绘制都叫做一条观测比例路径。
def plot_binomial_proportions(p_array, n):
for p in p_array:
plt.plot(np.arange(1, n+1), binomial_proportions(p, n), lw=2)
plt.ylim(-0.05, 1.05)
plt.xlabel('$k$')
plt.title('Proportion of Successes in $k$ Trials');
我们现在可以使用plot_binomial_proportions 来模拟 1000 个正反面比例相同的硬币抛掷,并且记录下正面向上比例的曲线。
two_fair_coins = make_array(0.5, 0.5)
plot_binomial_proportions(two_fair_coins, 1000)
![plot_binomial_proportionsimg/21-3-1.png)
当实验的次数很少的时候,曲线拨动略大,但是当次数逐渐增大,它渐渐收敛在 0.5 左右。
那为什么 \(p\) 需要被组成一个数组输入而不是一个数字?请耐心继续往下看。通过创建一个具有 10 个数,每个数都是 1/6 的数组来生成 10 条投掷一个骰子 1000 次,其中有 6 次正面向上的曲线。
ten_dice = (1/6)*np.ones(10)
plot_binomial_proportions(ten_dice, 1000)
![leveloffimg/21-3-2.png)
这些曲线最终在 1/6 左右变得平稳。
通常来说,正面向上的比例会收敛于固定值 \(p\)
随机化 \(p\)
现在,让我们用随机数来初始化 \(p\) 的值。我们先从一个简单的先验开始,让 \(p\) 取值为等可能性的 0.2 或者 0.7 中任意一个。
那么这个过程就变成了:
- 等可能性地从 0.2 和 0.7 中选择一个 \(p\) 的值
- 抛以这个选定 \(p\) 为正面向上概率的硬币,并且记录下比例曲线
为了能够生成这个过程的曲线,我们需要从随机选取 \(p\) 的值开始。这就是为什么我们必须指定 \(p\) 的值为一个数组,而不是一个数字。这个数组中的元素个数也就是我们需要绘制曲线的数量。
下面有 10 条曲线,请注意此处我们用的 np.random.choice 来为 \(p\) 随机取值。
random_p = np.random.choice([0.2, 0.7], size = 10, p = [0.5, 0.5])
plot_binomial_proportions(random_p, 1000)
![leveloffimg/21-3-3.png)
现在你可以看到大约一半的曲线平稳收敛于 0.2,还有一半平稳收敛于 0.7。这是因为,在值得选取中 0.7 和 0.2 的选择是等可能性的。其中选择 0.7 的时候,曲线会收敛于 0.7,选择 0.2 的时候,曲线会收敛于 0.2 ,这和我们之前的描述向对应。
你观察到的结果就是,如果 \(n\) 很大,观测比例在 \(n\) 时候的分布会趋向于 \(p\) 的先验分布。
β先验
我们先从均值先验说起。在前面的章节中,我们让 \(X\) 在 (0,1) 上均匀分布,给定 \(X=p\) 进行独立同伯努利实验。下面就是这个过程的 10 条曲线,每条曲线由 1000 次投掷尝试组成。记住,在 (0,1) 上的均值分布和在 (1,1) 上的 \(β\) 分布是一样的。
p_array = stats.beta.rvs(size = 10, a = 1, b = 1)
plot_binomial_proportions(p_array, 1000)
![uniformimg/21-3-4.png)
在上图的右边,是 1000 次实验中正面向上次数比例分布的表示点。如果进行更多次,你会发现这个分布是大致一样的。
事实上,从最下面的曲线到最上面的曲线,你已经看到了满足 (0,1) 上的独立同均匀分布的随机变量的顺序统计量。
下面是 15 条根据 \(β(2,8)\) 分布来选取的概率 \(p\) 值的实验正面向上次数的比例分布的曲线。
p_array = stats.beta.rvs(size = 15, a = 2, b = 8)
plot_binomial_proportions(p_array, 1000)
![15pathimg/21-3-5.png)
下面的图绘制了 \(β(2,8)\) 的概率密度函数。其中取值的概率主要分布在 0 到 0.6 之间。这个结果与上图里面收敛的数值相对应。
![leveloffimg/21-3-6.png)
Beta 先验,Beta 极限
这一部分图表明,在很大试验次数下的正面次数比例分布和正面次数的先验分布是一样的。
如果先验分布是 beta\((r, s)\) ,那么正面次数的极限分布也会是 beta \((r, s)\)。
下面的模拟证实了这一个结论。它由 10000 次下面的重复步骤组成:
- 从 beta \((2, 8)\) 分布中选取 \(p\) 的值
- 掷选定概率为 \(p\) 的硬币 1000 次,并且记录下正面向上的比例
下面的直方图显示了 10000 次模拟的比例分布,红色的曲线是 \((2, 8)\) 概率密度曲线
proportions = make_array()
for i in range(10000):
chosen_p = stats.beta.rvs(size = 1, a = 2, b = 8)
obs_prop = stats.binom.rvs(size = 1, n = 1000, p = chosen_p)/1000
proportions = np.append(proportions, obs_prop)
Table().with_column('Proportion of Successes', proportions).hist(bins=20)
x = np.arange(0, 1.01, 0.01)
y = stats.beta.pdf(x, a = 2, b = 8)
plt.plot(x, y, color='red', lw=2)
plt.title('Beta $(2, 8)$ Prior, and Proportion of Successes at $n = 1000$');
![endimg/21-3-7.png)
二十二、预测
原文:prob140/textbook/notebooks/ch22
译者:吕哲
自豪地采用谷歌翻译
# HIDDEN
from datascience import *
from prob140 import *
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
get_ipython().run_line_magic('matplotlib', 'inline')
from scipy import stats
预测
这一章节的主要内容是基于一些其他的变量信息来预测一个变量的值,其中,主要预测手段是条件期望,在先前我们已经给出了条件期望的定义,但在这一章中,我们会将它作为一个猜测值,给出一个变量的值来预测另一个变量。
我们会定义一个比较预测的标准,并且使用这个标准来确定最佳的预测方法。我们将会定义一个量,叫做条件方差,并且使用它来计算、比较不同预测方法的优劣。
# HIDDEN
from datascience import *
from prob140 import *
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
get_ipython().run_line_magic('matplotlib', 'inline')
from scipy import stats
# HIDDEN
n = 10000
a = -2
b = 2
z = stats.norm.rvs(size=n)
y = z**2 + stats.uniform.rvs(a, b-a, size=n)
xmin = min(z)
xmax = max(z)
# HIDDEN
def plot_curved_scatter():
plt.scatter(z, y)
plt.xlabel('$X$')
plt.ylabel('$Y$', rotation=0)
plt.xlim(-2, 2)
plt.ylim(-3, 6);
映射作为条件期望
假设我们正在预测一个与随机变量 \(X\) 有关的随机变量 \(Y\)的值。正如你在 Data 8 中所见,比较常见的预测方法就是使用给定 \(X\) 的平行于 \(Y\) 轴的那条线的中心,
形式上,给定 \(X = x\),我们尝试通过 \(E(Y \mid X=x)\) 来预测 \(Y\) 的值,
# NO CODE
plot_curved_scatter()
xstar = 1.25
ystar = 3
tbl = Table().with_columns('x', z, 'y', y)
strip1 = tbl.where('x', are.between(xstar-0.01, xstar+0.012))
plt.plot(strip1.column(0), strip1.column(1), color='darkblue')
strip2 = tbl.where('x', are.between(-0.01, 0.012))
plt.plot(strip2.column(0), strip2.column(1), color='darkblue')
x = np.arange(xmin, xmax+0.01, 0.01)
plt.plot(x, x**2, color='gold', lw=3)
plt.title('Gold Curve $E(Y | X=x)$: Centers of Vertical Strips');
条件期望 \(E(Y \mid X)\) 是一个 \(X\) 的函数,这个函数的定义是:
我们使用字母 \(b\) 来表示给定 \(X\) 的值的对于 \(Y\) 的最好的猜测。在这一章的后面一点的部分,我们将会准确地说明哪种猜测(期望)是最好的。
在随机变量表示中,
对于一个点 \((X, Y)\) ,这个预测的误差可以表示为:
下标 \(w\) 提示我们,这个误差的意思就是在给定 \(X\) 的情况下,\(X\) 对应的垂线的中点的值与 \(Y\) 真实值的差异。
# NO CODE
plot_curved_scatter()
x = np.arange(xmin, xmax+0.01, 0.01)
#plt.plot([xmin, xmax], [1, 1], color='k', lw=3)
plt.plot(x, x**2, color='gold', lw=3)
xstar = 1.25
ystar = 3
plt.plot([xstar, xstar], [ystar, xstar**2], color='purple', lw=3)
#plt.plot([xstar, xstar], [xstar**2, 1], color='lime', lw=3)
plt.scatter(xstar, ystar, color='darkblue', s=30, zorder=3)
plt.title('$D_w = $ Length of Purple Segment')
plt.xlim(-2, 2)
plt.ylim(-3, 6);
为了找到预测 \(Y\) 时,\(b(X)\) 的性质。我们先回忆一下条件期望的知识。
条件期望:复习
条件期望的性质与期望的性质类似,但是特殊点就在于,它的变量是随机变量,而不是真实的数字。也有一些与普通期望不同的一些特殊的性质。下面是我们给出的一些参考。
- 线性变换:\(E(aY + b \mid X) ~ = ~ aE(Y \mid X) + b\)
- 可加性:\(E(Y + W \mid X) ~ = ~ E(Y \mid X) + E(W \mid X)\)
- “给定的变量是一个常量”:\(E(g(X) \mid X) ~ = ~ g(X)\)
- “分离”常量:\(E(g(X)Y \mid X) ~ = ~ g(X)E(Y \mid X)\)
- 独立性:如果 \(X\) 和 \(Y\) 是相互独立的,那么 \(E(Y \mid X) = E(Y)\)
- 可迭代性:\(E(Y) = E\big{(}E(Y \mid X)\big{)}\)
现在可得
换句话说,在一个给定 \(X\) 的垂线上的平均误差是 0。
通过迭代:
\(D_w\) 和 \(X\) 的函数###
假设 \(g(X)\) 是 关于 \(X\) 的任意函数。那么 \(g(X)\) 和 \(D_w\) 的协变量就是:
因为 \(E(D_w) = 0\)。通过迭代,
因此,条件均值的误差,也就是 \(D_w\),是与 \(x\) 无关的函数。
这个性质被称为正交性,它非常有用,并且在这一章节中将会被重复地使用。用一种不太准确的例子思考,假设 \(X\) 的任意一个函数是一个水平桌面上的一个点,想象 \(Y\) 是一个略高于桌面的一个点。为了通过 \(x\) 找到对应的最接近的 \(Y\),我们当然会从 \(Y\) 向桌面做垂线。
- 从 \(Y\) 做垂线到桌面上对应的点是 \(b(X)\)。我们称,给定 \(X\) 的 \(Y\) 的条件期望就是 \(Y\) 在 \(X\) 的函数空间上的映射。
- \(D_w\) 的值应该是从 \(Y\) 垂直映射到桌面的,所以抽象一点,它应该是正交的。
稍后在这一章中,我们会准确地了解到为什么正交的 \(b(X)\) 是对 \(Y\) 最好的猜测值。
二十三、联合正态随机变量
共同正态随机变量高尔顿对椭圆散布图的观测成为多元回归的基础,是数据分析中最常用的方法之一。多元回归及其现代变体的推论通常是基于多元回归的
23.1 随机向量
向量值随机变量,或者更简单地说,随机向量,是在相同空间中定义的随机变量的列表。我们把它看做一个列。
为了便于显示,我们有时会写
是相对于符号 M 矩阵的转置. X 的平均向量
。X 是
矩阵的协方差矩阵Σ的第(i, j)元素是
。Σ的第 i 个对角元素是
的方差。由于协方差的对称性,矩阵是对称的。
线性变换:均值向量
令 A 为
的数值矩阵,b 为
数值向量。考虑
随机向量 Y=AX+b。Y 的第 i 个元素是
其中
是 A 的第 i 行,b(i)是 b 的第 i 个元素。
其中
是 A 的(i,j)项,
因此
是一个对于元素 X 的线性组合,因此线性的期望为,
让
作为 y 的平均向量, 通过上面的计算中,
线性变换:协方差矩阵
可以用协方差的双线性度来计算。
(l, j)这是
的元素。如果
表示协方差矩阵 Y,那么
矩阵Σ上的限制
我们知道Σ必须对称,所有主对角线上的元素必须是非负数。同时,无论什么,
所有必须的对角元素非负时的方差的元素 Y
的公式
也就是说
因为
是一个标量,因此等于它的转置。
也就是说,Σ必须半正定。通常,我们会用正定协方差矩阵
因为如果
X 的一些元素的线性组合是恒定的。因此,你可以把一些元素写成其他元素的线性组合,然后研究一个简化的元素集。
23.2 多元正态分布
让Σ正定矩阵。一个 n 维随机向量 Xμ多元正态分布的均值向量和协方差矩阵Σ如果 X 的元素的联合密度是由
我们说 X 的元素是联合正态的或者联合高斯的。
当 n=1 时,应检查公式是否正确。在这种情况下
是一个标量。它是一个数字,不是一个更大的矩阵;它的行列式是它自己;它的逆矩阵是
。另外,
和
只是数字。上面的公式中减少了熟悉的正常与均值μ和方差
密度函数。
当 X 的元素是标准法线时,你也应该检查公式是否正确。在这种情况下μ= 0 和
n 维的单位矩阵。
在实验室里,你详细地研究了多元正态关节密度函数,从两个独立的标准正态分量组成的 Z 开始,然后进行线性组合。结果表明,所有的多元正态随机变量都可以用这种方法生成。事实上,对于多元正态分布的随机向量 X 有三个有用的等价定义。
定义 1:X 具有上述的关节密度。
定义 2:X=AZ+b 对于某个 i i d 标准法向量 Z,一个可逆的 A,和一个列向量 b。
定义 3:X 的每个元素的线性组合都是正态分布。
在本节的最后,有一份关于建立相等关系的说明。有些地方很难。只要接受它们是正确的,让我们检查一下分布的性质。
理解多元法向量的关键是定义 2:每个多元法向量是 i.i.d 标准法向量的线性变换。我们看看密度的定义 2 是什么。
二次形式
密度的形状是由二次型
。等值面为椭球体;在二维空间中,这些是你们在实验室里看到的椭圆。
这是与
共同法向的标准正态变量
和
的联合密度面。调用 Plot_bivariate_normal(mu, cov),其中均值向量 mu 是一个列表,协方差矩阵是一个指定行的列表列表。
mu = [0, 0]
cov = [[1, 0.8], [0.8, 1]]
Plot_bivariate_normal(mu, cov)

注意椭圆的轮廓,并且概率集中在一条直线周围。
在二维以上的情况下,我们不能再画出节理密度面。在三维空间中,我们可以根据多元正态关节密度进行 i.i.d.绘制,并绘制结果点。这是一个关于 1000 个标准正态变量 X1,X2 和 X3 的经验分布的例子,它们与
,
,
共同正态。注意椭圆云。
调用为Scatter_multivariate_normal(mu, cov, n),其中 n 是要生成的点数。函数检查指定的矩阵是否是正半定的。
mu2 = [0, 0, 0]
cov2 = [[1, 0.6, 0.5], [0.6, 1, 0.2], [0.5, 0.2, 1]]
Scatter_multivariate_normal(mu2, cov2, 1000)

为了看到二次形式是如何产生的,让 X 是多元正态的。根据定义 2,X=AZ+b 对于某个可逆的 A 和向量 b,以及某个 i.i.d 标准法向量 Z。
通过边值的乘法,Z 的关节密度为
x 在 x=Az+b 的线性变换下的原像是
通过变量的变化 X 的密度的二次形式是
让
均值向量 X,因为 X = AZ + b,我们有
。
Z 的协方差矩阵是
。X 的协方差矩阵是
所以 X 的密度的二次形式变成了
积分常数
通过变量的线性变化,X 的密度为
其中 z 是 x 的原像,s 是由变换后的单位向量构成的平行平面的体积。也就是说
。现在
因此 X 的密度的积分常数是
我们已经展示了关节密度函数是如何产生的以及它的各个部分代表了什么。在这个过程中,我们证明了定义 2 包含定义 1。现在我们来证明这三个定义是等价的。
等值
这里有一些指标,如何看到这三个定义的等价。其中一块不容易确定。
定义 2 是多元法线性质的核心。我们将尝试看看为什么它等价于其他两个定义。
我们已经知道定义 2 意味着定义 1。
看到定义 1 意味着定义 2,它可以帮助记住一个正定矩阵Σ可以分解为一些下三角
,只有积极的在其对角元素,因此是可逆的。这叫做切列斯基分解。设置
,定义 1 意味着定义 2。
定义 1 和 2 是等价的。
你们已经知道独立正规变量的线性组合是正规的。如果 X 是 i.i.d.标准正态变量 Z 的线性变换,那么 X 的任何元素的线性组合也是 Z 的元素的线性组合,因此是正态的。这意味着定义 2 意味着定义 3。
定义 3 意味着定义 2 需要一些数学运算。多重矩母函数是一种解释为什么结果是正确的方法,如果我们接受矩广义函数决定分布,但我们不会在这里讨论。
线性组合
假设 X 是多元正态与平均向量Σμ和协方差矩阵。定义 3 说所有 X 的元素的线性组合也是正态的。这使得许多计算变得简单明了。这是一个二维的例子。
金额和差异
让
二元正态分布平均向量
和协方差矩阵Σ。
然后和
的正态分布均值
和方差
你可以根据Σ计算。
的区别有正态分布意味着
和方差
不管 X 的元素的线性组合是什么,它的分布都是正态的。确定的参数分布,计算出均值和方差的均值和方差使用属性,然后找到必要的组件 X 均值向量和协方差矩阵的均值和方差,你都将发现使用正常的概率曲线和往常一样。
线性组合的联合分布
定义 2 表明有限个 X 的线性组合的联合分布是多元正态的。在上面的例子中,不仅 S 和 D 都是正态分布,S 和 D 的联合分布也是二元正态分布。在上面的计算中,我们找到了均值向量和协方差矩阵中除一个元素外的所有元素。剩下的元素是
通过协方差的双线性和对称性。
临界
每一个 Xi 都是 X 元素的线性组合:在 i 处的系数是 1,在其它地方的系数是 0。每个 Xi 都是正态分布。这个正态分布的参数可以从均值向量和协方差矩阵中读出:
但请注意:事实并非如此。如果一个随机向量的所有边都是正态的,则联合分布不必是多元正态的。
一个发人警醒的故事
下面的单元格显示了一个有趣数据集的经验联合分布和边缘分布。请阅读每个单元格顶部的注释,以查看正在计算和显示的内容。
# Generate 100,000 iid standard normal points
x = stats.norm.rvs(size=100000)
y = stats.norm.rvs(size=100000)
t = Table().with_column(
'X', x,
'Y', y
)
# Select just those where both elements have the same sign
new = t.where(t.column(0) * t.column(1) > 0)
# The restricted pairs are not jointly normal;
# that shape isn't an ellipse
new.scatter(0, 1)

# Empirical distribution of horizontal coordinate
new.hist(0, bins=25, ec='w')
plt.xticks(np.arange(-5, 6));

# Empirical distribution of vertical coordinate
new.hist(1, bins=25, ec='w')
plt.xticks(np.arange(-5, 6));

两个边值都是正态的,但联合分布远不是二元正态的。
为了得到这些变量的关节密度的公式,从两个 i.i.d.标准法线的圆对称关节密度开始,并将其限制在象限 1 和 3。这样就少了原来曲面下一半的体积,所以要记住乘以 2 使新曲面下的总体积等于 1。
def new_density(x,y):
if x*y > 0:
return 1/np.pi * np.exp(-0.5*(x**2 + y**2))
else:
return 0
Plot_3d((-4, 4), (-4, 4), new_density, rstride=4, cstride=5)

23.4 独立性
如果 X 是相互独立的元素,那么
对于所有 i≠j, 因此协方差矩阵Σ是一个对角矩阵,它的第 i 个对角线元素是
。
另一方面,零协方差并不意味着相互独立,两两独立并不意味着相互独立。但是多元正态分布是一个很好的分布:
如果 X 是多变量正态分布,且其各元素两两不相关,即
对于所有 i≠j,则 X 各元素相互独立。
也就是说,多元正态随机变量是独立的当且仅当它们不相关时。
这是很容易看到的形式的密度 X 如果Σ是一个对角矩阵那么
。第 i 个对角元素的
。所以
在积分常数,
。
因此 X 的密度是边际法向密度的乘积。
回顾一下求和以及求差
令
不存在二元正态分布。
。我们知道 S 和 D 是二元正态分布
如果
和
有相同的方差,那么 S 和 D 是不相关的,因此也与我们刚才证明的无关。例如,两个随机变量的和和差是独立的。
二十四、简单线性回归
原文:https://nbviewer.jupyter.org/github/prob140/textbook/tree/gh-pages/notebooks/Chapter_24/
译者:ThomasCai
自豪地采用谷歌翻译
00 简单线性回归
在数据科学中,回归模型被广泛地应用于预测。本章从概率论的角度来研究线性最小二乘法。重点是简单回归,即基于一个数值属性的预测。
当属性\(X\)和响应\(Y\)的联合分布为二元正态分布时,\((X,Y)\)的经验分布是橄榄球的形状,与数字 8 的非常相似。我们将从相关的几何解释开始,因为这有助于理解回归和二元正态分布。我们要推导的线性回归的方程,可以用几种方法来表示;在本章的末尾,我们将以最容易扩展到多元回归的方式来表示它。
01 二元正态分布
# HIDDEN
from datascience import *
from prob140 import *
import numpy as np
import warnings
import matplotlib.cbook
warnings.filterwarnings("ignore",category=matplotlib.cbook.mplDeprecation)
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
%matplotlib inline
from scipy import stats
# HIDDEN
def sin(theta):
return np.sin(theta * np.pi/180)
def cos(theta):
return np.cos(theta * np.pi/180)
def tan(theta):
return sin(theta)/cos(theta)
def projection_1_2(theta):
x = 1
z = 2
y = x*cos(theta) + z*sin(theta)
plt.figure(figsize=(6, 6))
plt.scatter(x, z, s=40, color='green')
plt.plot([-3, 3], [0, 0], color='grey', lw=2, label=r'$X$'+' axis')
plt.plot([0, 0], [-3, 3], color='grey', lw=2)
plt.plot([-3, 3], [tan(theta)*(-3), tan(theta)*3], color='gold', lw=2, label='New axis at positive angle '+r'$\theta$ to the '+r'$X$'+' axis')
plt.plot([0, x], [0, 0], color='blue', lw=2)
plt.plot([x, x], [0, z], color='green', linestyle='--', lw=2)
plt.plot([x, cos(theta)*y], [z, sin(theta)*y], color='green', linestyle='--', lw=2)
plt.plot([0, cos(theta)*y], [0, sin(theta)*y], color='red', lw=2)
plt.axes().set_aspect('equal')
plt.legend(bbox_to_anchor=(1.92, 1.02))
plt.xlabel('$X$')
plt.ylabel('$Z$', rotation=0)
plt.title('Projection of $(X, Z) = (1, 2)$ on Gold Axis')
plt.xlim(-3, 3)
plt.ylim(-3, 3)
def projection_trig():
x = 1
z = 2
x1 = x*cos(theta)
x2 = z*sin(theta)
y = x1 + x2
plt.figure(figsize=(8, 8))
plt.scatter(x, z, s=40, color='green')
plt.plot([-3, 3], [0, 0], color='grey', lw=2)
plt.plot([0, 0], [-3, 3], color='grey', lw=2)
plt.plot([-3, 3], [tan(theta)*(-3), tan(theta)*3], color='gold', lw=2)
plt.plot([0, x], [0, 0], color='blue', lw=2)
plt.plot([x, x], [0, z], color='green', linestyle='--', lw=2)
plt.plot([x, cos(theta)*y], [z, sin(theta)*y], color='green', linestyle='--', lw=2)
plt.plot([x, cos(theta)*x1], [0, sin(theta)*x1], color='k', linestyle='--', lw=2)
plt.plot([cos(theta)*y, x+cos(theta)*x2], [sin(theta)*y, sin(theta)*x2], color='k', linestyle='--', lw=2)
plt.plot([x, x+cos(theta)*x2], [0, sin(theta)*x2], color='k', linestyle='--', lw=2)
plt.plot([0, cos(theta)*x1], [0, sin(theta)*x1], color='brown', lw=3, label='Length = '+r'$X\cos(\theta)$')
plt.plot([cos(theta)*x1, cos(theta)*y], [sin(theta)*x1, sin(theta)*y], color='darkblue', lw=3, label='Length = '+r'$Z\sin(\theta)$')
plt.text(0.3, 0.06, r'$\theta$', fontsize=20)
plt.text(1.03, 1.6, r'$\theta$', fontsize=20)
plt.text(0.8, 2.1, r'$(X, Z)$', fontsize=15)
plt.legend(bbox_to_anchor=(1.35, 1))
plt.axes().set_aspect('equal')
plt.xlabel('$X$')
plt.ylabel('$Z$', rotation=0)
plt.title('$Y =$ '+r'$X\cos(\theta) + Z\sin(\theta)$')
plt.xlim(-0.5, 3)
plt.ylim(-0.5, 3)
二元正态分布
多元正态分布由均值向量和协方差矩阵定义。协方差的单位通常难以理解,因为它们是两个变量的单位的乘积。
将协方差归一化以使其更容易解释是个好主意。正如你们在练习中看到的,对于联合分布的随机变量\(X\)和\(Y\), \(X\)和\(Y\)之间的相关性(译者注:相关系数)定义为:
其中是标准单位的\(X\),
是标准单位的\(Y\)。
相关性的性质
你在练习中可以看到这些。
只依赖于标准单位,因此它是一个没有单位的纯数
- 如果\(Y=aX+b\),然后
是 1 或-1,这根据\(a\)的符号是正还是负。
我们认为衡量了\(X\)和\(Y\)的线性关系。
和的方差
重写一下相关性的公式
所以\(X+Y\)的方差是
注意与两个向量之和的长度的公式并行,相关性扮演着两个向量夹角的余弦的角色。如果这个角是 90 度,那么 cos 值为 0。这对应于相关性也为零,因此随机变量是不相关的。
在\(X\)和\(Y\)的联合分布是二元正态分布的情况下,我们将可视化这个想法。
标准二元正态分布
令\(X\)和\(Z\)是独立的标准正态变量,即具有均值向量\(0\)和协方差矩阵等于单位矩阵的二元正态随机变量。 现在确定一个数\(\rho\)(即希腊字母 rho,小写 r),使,并令
定义一个新的随机变量,并注意到
所以\(X\)和\(Y\)是均值向量为\(0\)和协方差矩阵的二元正态分布。
我们说\(X\)和\(Y\)有标准的二元正态分布,相关性。
下图显示了在\(\rho= 0.6\)的情况下 1000 个\((X,Y)\)点的经验分布。 您可以改变\(rho\)的值(译者注:也就是)并观察散点图是如何变化的。 它将使您想起数据 8 中的许多此类模拟。
# Plotting parameters
plt.figure(figsize=(5, 5))
plt.axes().set_aspect('equal')
plt.xlabel('$X$')
plt.ylabel('$Y$', rotation=0)
plt.xticks(np.arange(-4, 4.1))
plt.yticks(np.arange(-4, 4.1))
# X, Z, and Y
x = stats.norm.rvs(0, 1, size=1000)
z = stats.norm.rvs(0, 1, size=1000)
rho = 0.6
y = rho*x + np.sqrt((1-rho**2))*z
plt.scatter(x, y, color='darkblue', s=10);

余弦相关性
我们定义
其中\(X\)和\(Z\)是独立同分布的标准正态变量。
我们从几何上理解这个结构。一个好的开始是\(X\)和\(Z\)的联合密度,它具有圆的对称性。
# NO CODE
Plot_bivariate_normal([0, 0], [[1, 0], [0, 1]])
plt.xlabel('$X$')
plt.ylabel('$Z$')
plt.gca().set_zlabel('$f(x, z)$')
plt.title('Standard Bivariate Normal Distribution, Correlation = 0');

\(X\)轴和\(Z\)轴是正交的。让我们看看如果我们扭转它们会发生什么。
取任何正角度θ度并绘制与原始 X 轴成角度θ的新轴,每个点(X,Z)在这个轴上都有一个投影。
下图所示,点(X,Z)=(1,2)到金色轴的投影,金色轴与\(X\)轴成θ角。蓝色的部分是\(X\)的值,通过把(1,2)点向横轴上做垂线得到,称为(1,2)点到横轴上的投影。
红色部分是(1,2)点在金色轴上的投影,通过把(1,2)点向金色轴做垂线得到。
在下面的单元格中改变θ的值,可以观察到投影在金色轴旋转时如何变化。
theta = 20
projection_1_2(theta)

设\(Y\)是红色段的长度,并记住\(X\)是蓝色段的长度。 当θ非常小时,\(Y\)几乎等于\(X\)。当θ接近 90 度时,Y 几乎等于 Z。
一点三角法就表明了这一点:
projection_trig()

因此
其中
下面的一系列图像说明了θ为 30 度的转换。
theta = 30
projection_1_2(theta)

当原始点(X, Z)具有独立同分布的标准正态坐标时,二元正态分布是蓝色和红色长度 X 和 Y 的联合分布。此变换(X, Z)的联合密度表面的圆形轮廓成(X, Y)的联合密度表面的椭圆形轮廓。
cos(theta), (3**0.5)/2
>>(0.8660254037844387, 0.8660254037844386)
rho = cos(theta)
Plot_bivariate_normal([0, 0], [[1, rho], [rho, 1]])
plt.title('Standard Bivariate Normal Distribution, Correlation = '+str(round(rho, 2)));

小的θ
正如我们前面看到的,当θ很小,几乎对轴的位置没做任何改变时,X 和 Y 几乎相等。
theta = 2
projection_1_2(theta)

因此,X 和 Y 的二元正态密度本质上受限于 X=Y 线。cos(θ)的相关性很大因为θ很小;它的值超过 0.999。
从而可以看到绘图函数是很难表示这个联合密度面的。
rho = cos(theta)
rho
>>0.99939082701909576
Plot_bivariate_normal([0, 0], [[1, rho], [rho, 1]])

正交性和独立性
当θ是 90 度,金色轴正交于 X 轴,并且 Y = Z(其中 Z 与 X 是独立的)。
theta = 90
projection_1_2(theta)

当θ= 90°时,cos(θ)= 0。(X,Y)的联合密度面与(X,Z)的联合密度面相同,并具有圆的对称性。
如果你把当作“信号”,把
当作“噪音”,那么\(Y\)可以被认为是一个观察的值“信号加噪声”。在本章剩下的部分中,我们将看看是否能将信号与噪声分开。
二元正态的表示
当我们只处理两个变量 X 和 Y 时,矩阵表示通常是不必要的。我们将交替使用以下三种表示。
和
是具有
参数的二元正态变量
- 标准化变量
和
是标准的二元正态且相关性为
,那么
(其中标准正态\(Z\)与
是相互独立的)。这是由多元正态的定义 2 得出的。
和
有多元正态分布的均值向量
和协方差矩阵
02 线性最小二乘法
# HIDDEN
from datascience import *
from prob140 import *
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
%matplotlib inline
from scipy import stats
最小二乘线性预测器
在这一节中,我们将远离二元正态分布,看看我们能否基于另一个数字变量的预测因子,从一个数字变量的所有线性预测因子中找出最好的,而不管这两个变量的联合分布如何。
对于联合分布随机变量\(X\)和\(Y\),你知道\(E(Y∣X)\)是\(Y\)基于\(X\)函数的最小二乘预测器。我们现在将允许的函数限制为线性函数,并且看看我们能否在其中找到最好的一个。下一节我们将看到这个最好的线性预测器,所有预测器中最好的,和二元正态分布之间的联系。
最小化均方误差
令\(h(X)=aX+b\)其中\(a\)和\(b\)为常量,并且使\(MSE(a,b)\)表示\(MSE(h)\)
为了找到最小二乘线性预测器,我们必须在所有\(a\)和\(b\)上最小化这个 MSE。我们将使用微积分分两步完成:
- 固定\(a\)的值,并且在这个\(a\)下寻找\(b{^*_a}\)值以使得\(MSE(a,b)\)最小;
- 然后将这个最小化的值\(b{^*_a}\)代入\(b\),并且最小化
以求出\(a\)。
步骤一
固定\(a\)且最小化\(MSE(a,b)\)以求得\(b\)
对 b 求导得
设置此值等于 0 并求解,可得对于 a 的固定值的最小化的 b 值
步骤二
现在我们最小化以下函数并求得\(a\)
对\(a\)求导得\(-2Cov(X,Y)+2aVar(X)\)。所以最小化的\(a\)是
在这一点上,我们应该检查我们所拥有的是最小值,而不是最大值,但是根据您的预测经验,您可能只愿意接受我们所拥有的最小值。如果不是,那么再次求导,看看得到的函数的符号。
回归线的斜率和截距
最小二乘直线称为回归线。最小二乘直线称为回归线。现在你可以从数据 8 中得到它的等式的证明。设是\(X\)和\(Y\)之间的相关性。然后斜率和截距由下式给出:
标准单位的回归
如果\(X\)和\(Y\)都是用标准单位测量的,那么回归线的斜率就是相关性,截距为 0。
换句话说,已知\(X=x\)标准单位,Y 的预测值为标准单位。当
为正而不是 1 时,这个结果称为回归因子;Y 的预测值比 X 的给定值更接近 0。
散点图的线和形状
以上计算表明:
- 回归线经过这个点\((E(X), E(Y))\).
- 不管\(X\)和\(Y\)的联合分布如何,回归线的方程都成立。
- 无论\(X\)和\(Y\)之间的关系如何,在所有直线中始终存在最佳直线预测器。如果关系不是大致线性的,则不希望使用最佳直线进行预测,因为最佳直线仅仅是一类不好的预测结果中最好, 它总是存在。
03 回归和二元正态分布
# HIDDEN
from datascience import *
from prob140 import *
import numpy as np
import warnings
import matplotlib.cbook
warnings.filterwarnings("ignore",category=matplotlib.cbook.mplDeprecation)
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
%matplotlib inline
from scipy import stats
# HIDDEN
def bivariate_normal_regression(rho, n):
x = stats.norm.rvs(size=n)
z = stats.norm.rvs(size=n)
y = rho * x + (1 - rho**2)**0.5 * z
plt.scatter(x, y, color='darkblue', s=10)
if rho >= 0:
plt.plot([-4, 4], [-4, 4], color='red', lw=2, label='y = x')
else:
plt.plot([-4, 4], [4, -4], color='red', lw=2, label='y = -x')
plt.plot([-4, 4], [rho*(-4), rho*(4)], color='green', lw=2, label='Regression Line: y = '+str(rho)+'x')
# Axes, labels, and titles
plt.xlim(-4, 4)
plt.ylim(-4, 4)
plt.axes().set_aspect('equal')
plt.legend(bbox_to_anchor=(2, 1.02))
plt.xlabel('$X$')
plt.ylabel('$Y$', rotation=0)
plt.title('Standard Bivariate Normal, Correlation '+str(rho))
回归和二元正态
令\(X\)和\(Y\)为标准的二元正态变量。且他们的相关性为\(ρ\)。关系为:
其中\(X\)和\(Z\)是独立的正态分布变量,他们直接导致了基于\(X\)的所有函数的的\(Y\)的最佳预测值。显然,最佳的预测为条件期望值\(E(Y|X)\)。
因为\(Z\)与\(X\)是独立的,因此\(E(Z)=0\)。
因为\(E(Y|X)\)是\(X\)的一个线性函数,所以我们可以知道:
如果\(X\)和\(Y\)有一个标准的二元正态分布,那么基于\(X\)的\(Y\)的最佳预测值是线性的,并且有上一节推导的回归方程。
每一个二元正态分布都可以由标准二元正态变量的线性变换来构造。因此:
如果\(X\)和\(Y\)是二元正态的,那么基于 X 的 Y 的最佳线性预测因子也是基于\(X\)的\(Y\)的所有预测结果中最好的。
函数bivariate_normal_regression(代码中)以ρ和 n 为参数并显示由相关性ρ的标准二元正态分布产生的 n 个点的散点图。它也显示了 45 度“相同标准单位”线(红色)和\(E(Y∣X)=ρX\)(绿色)。
您在数据 8 中看到过这样的图,但是无论如何,请运行单元格几次以刷新内存。您可以看到当回归因子ρ> 0 时;绿线比红线(“相同标准单位”45 度线)更平。
bivariate_normal_regression(0.6, 1000)

预测误差
根据定义,\(Y\)等于一个“信号”,它是一个\(X\)的线性函数,再加上一些等于的噪声。基于\(X\) 的\(Y\)的最佳预测为线性函数ρX。
这个预测的均方误差是
它不依赖于\(X\)。这是有意义的,因为\(Y\)定义中的“噪声”项与\(X\)无关。
垂直带状分布
如果\(X\)和\(Y\)是相关性为ρ的标准二元正态变量,上面的计算可以表明,给定\(X = x\)的 Y 的条件分布是正态的,平均值为ρx 和方差为。
预测排名
假设一大批学生的口语和数学考试成绩的散点图大致为椭圆形,两个变量之间的相关性为 0.5。
给定一个随机挑选的口语成绩排在第 80 分位数的学生,您对这个学生的数学成绩的百分位的预测是什么?
回答这些问题的一种方法是做一些概率假设。对事实的粗糙估计,根据给定的信息,学生的标准化的数学分数\(M\)和标准化的口语分数\(V\)有相关性ρ= 0.5 的标准二元正态分布。
考虑到学生的口语成绩是在第 80 分位数上,我们知道他们正处于 Python 所谓的标准正常曲线的 80%点。所以他们的标准单位分数大约是 0.84。
standard_units_x = stats.norm.ppf(0.8)
standard_units_x
>>>0.8416212335729143
数学分数标准单位的回归预测是\(0.5×0.84 = 0.42\)。
rho = 0.5
standard_units_predicted_y = rho * standard_units_x
standard_units_predicted_y
>>>0.42081061678645715
标准正常曲线下左侧 0.42 的区域约为 66%,因此您的预测是学生将达到大约数学分数的第 66 分位数。
stats.norm.cdf(standard_units_predicted_y)
>>>0.6630533107760167
在这种设置中不要担心小数点和高精度。 计算基于关于数据的概率模型;偏离该模型对预测质量的影响要大于您的答案是第 67 分位数而不是第 66 分位数。
但是,您应该注意到,在答案中可以清楚地看到回归因子。学生预测的数学成绩比他们的口语成绩更接近平均水平。
04 回归方程
# HIDDEN
from datascience import *
from prob140 import *
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('fivethirtyeight')
%matplotlib inline
from scipy import stats
回归方程
基于\(X\)的预测\(Y\)的回归方程可以用几种等价的方式表示。回归方程和回归估计中的误差最好用标准单位来表示。所有其他的表示都遵循简单的代数。
令\(X\)和\(Y\)是二元正态参数。然后,正如我们所见,最佳预测值\(E(Y∣X)\)是\(X\)的线性函数,因此\(E(Y∣X)\)的公式也是回归直线的方程。
标准单位
设为标准单位的\(X\),
为标准单位\(Y\)。回归方程为
且预测中的误差量通过下式计算
条件标准差与预测的单位相同。条件方差是:
我们知道的不仅仅是条件期望和条件方差。已知给定的
的条件分布是正态的。这使得我们可以通过常规的正态曲线方法,找到给定
的条件概率。例如,
在高尔顿的一个著名数据集中,父子对的身高分布大致是二元正态分布,其相关系数为 0.5。在身高比平均值高出两个标准差的父亲中,儿子身高比平均水平高出两个标准差的比例是多少?
通过回归效应,你知道答案必须小于 50%。如果表示随机选取的儿子的身高(标准单位),
表示他的父亲的身高(标准单位),则比例近似为
这个值大约是 12.4%。
1 - stats.norm.cdf(2, 0.5*2, np.sqrt(1-0.5**2))
>>> 0.12410653949496186
一种原始形式
通常,您想要以测量数据的单位进行预测。在改变上述公式中的单位之前,请记住\(X\)上的条件等价于上的条件。如果你知道 X 或者
的值,你也知道另一个。
回归方程为
这和我们之前推导的最小二乘直线方程是一样的,我们没有对\(X\)和\(Y\)的联合分布做任何假设。这证实了我们的观察,如果\(X\)和\(Y\)是二元正态的,那么最佳的线性预测器就是所有预测器中最好的。
预测中的误差量由以下两式衡量
和
给定\(X\)下的\(Y\)的条件分布为正态分布,上面计算的是均值和方差。
另一种形式
当只有两个变量时,二元正态的矩阵形式几乎没有必要。但仅用多元正态分布的参数(均值向量和协方差矩阵)就可以写出回归估计和条件方差。这项工作将在下一章中得到反馈,因为完全类似的公式将适用于多元回归。
定义。那么\(X\)和\(Y\)有多元正态分布,其平均向量为
和协方差矩阵

现在
并且回归方程能被写为
同时
所以误差的方差为
二十五、多元回归
原文:prob140/textbook/notebooks/ch_25
译者:lanhaixuan
自豪地采用[谷歌翻译](https://translate.google.cn/
# 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 scipy import misc
回归的最常见用途是根据其他几个变量的值来预测数值变量的值。在我们的概率设置中,目标是预测\(Y\)基于\(p\)预测变量\(X_1, X_2, \ldots, X_p\);这里\(p\)不是概率,而是表示预测变量数的正整数。
查找表单的最小二乘函数
\(\hat{Y} = a_1X_1 + a_2X_2 + \cdots + a_pX_p + b\)被称为多元线性回归。术语“线性”是指函数在参数中是线性的\(a_1, a_2, \ldots, a_p, b\)。它并不是指适合的功能的形状。
例如,你可以拟合二次函数\(X_1\)通过采取\(X_2 = X_1^2\)。然后
\(\hat{Y} = a_1X_1 + a_2X_2 + b = a_1X_1 + a_2X_1^2 + b\)是二次函数\(X_1\)。但它在系数中仍然是线性的,那些是你必须估计的。
在本章中,我们将简单回归的计算扩展到多元回归的情况。实际上,我们将利用我们关于简单回归的工作来激发对多元回归必须如何工作的猜测。然后我们将检查我们的猜测是否正确。
矩阵表示法中的双线性
作为回归的初步,我们将使用矩阵表示法以紧凑的形式表达双线性。本节的结果并不新鲜。它们只是使用新的符号和矩阵表示来重述关于方差和协方差的熟悉结果。
让\(\mathbf{X}\)为\(p \times 1\)预测变量的向量。我们知道这是一个\(m \times p\)矩阵\(\mathbf{A}\)和一个\(m \times 1\)向量\(\mathbf{b}\),

以下结果是特殊情况。
线性组合
定义两个通用的线性元素组合\(\mathbf{X}\),使

然后

两个线性组合的协方差
两个线性组合的协方差是\((1, 2)\)协方差矩阵的元素\(\mathbf{AX} + \mathbf{b}\),这个是\((1, 2)\)的元素\(\mathbf{A}\boldsymbol{\Sigma}_\mathbf{X}\mathbf{A}^T\)。

线性组合的方差
第一个线性组合的方差是\((1, 1)\)的元素\(\mathbf{A}\boldsymbol{\Sigma}_\mathbf{X}\mathbf{A}^T\)。

协方差向量
要预测\(Y\)基于\(\mathbf{X}\)我们需要与协方差一起工作\(Y\)和每个元素\(\mathbf{X}\)。使

并定义协方差向量 \(\mathbf{X}\) 和 \(Y\) 成为

协方差矢量的转置也有一个记法是很方便的:

通过协方差的线性,

最佳线性预测器
使 \(Y\) 和 \(p \times 1\) 向量 \(\mathbf{X}\) 联合分发,并假设你正在试图预测 \(Y\) 基于线性函数 \(\mathbf{X}\)。对于预测器

预测的均方误差是

在本节中,我们将确定最小化均方误差的线性预测器。我们还将找到这个最佳预测器所产生的误差的方差。
线性预测器
在简单回归的情况下,我们通过使用微积分来最小化所有斜率和截距的均方误差,找到了最佳线性预测器。我们可以在这里进行该计算的多变量版本。但是由于我们在一个预测器的情况下所做的工作,我们将采取不同的方法。
我们将基于简单回归的答案猜测答案,然后确定我们的猜测是正确的。
在简单回归的情况下,我们在表格中写了回归方程

现在定义

当

是 \(p \times 1\) 线性函数系数的向量。
突出部分
注意 \(E(\hat{Y}_\mathbf{b}) ~ = ~ \mu_Y\)。预测器是公正的。
定义预测中的错误

然后

我们现在将展示 \(W\) 与所有 \(\mathbf{X}\) 元素的线性组合不相关。

因为 \(E(W) = 0\), 我们也有 \(E(W\mathbf{a}^T\mathbf{X}) = Cov(W, \mathbf{a}^T\mathbf{X}) = 0\) 对于所有 \(\mathbf{a}\) 成立。
最小二乘
为了展示 \(\hat{Y}_\mathbf{b}\) 最小化均方误差,从练习开始:表明最佳线性预测器必须是无偏的。
完成后,您可以限制搜索所有无偏线性预测变量的最佳线性预测变量。通过定义这些通用的一个

这里 \(\mathbf{h}\) 是某个 \(p \times 1\) 系数向量。然后

回归方程和预测值
最小二乘线性预测器由下式给出

这里与 \(\hat{Y}_\mathbf{b}\) 一样。我们只是为了方便而删除下标,现在我们已经确定它是最好的线性预测器。
如上所述,预测器是无偏见的:

预测值的方差是

误差方差
预测中的错误是 \(W = Y - \hat{Y}\) 。因为 \(\hat{Y}\) 是一个关于\(\mathbf{X}\) 线性函数, 我么有

因此

误差的方差是

在双变量正态模型下的简单回归的情况下,我们看到误差方差为

这是我们在此建立的更通用公式的特例。不需要双变量正态假设。
与简单回归的情况一样,我们没有假设联合分布 \(Y\) 和 \(\mathbf{X}\) ,除了这样说 \(\boldsymbol{\Sigma}_\mathbf{X}\)
是肯定的。无论如何,有一个基于 \(\mathbf{X}\) 的独特的最佳线性预测器 \(Y\) 。
回归与多元正态
当 \(Y\) 和 \(\mathbf{X}\) 具有正定的协方差矩阵的多元正态分布,那么在前一节中导出的最佳线性预测器是所有预测器中基于 \(\mathbf{X}\) 最好的 \(Y\) 。这就是,

另外,条件分布 \(Y\) 特定 \(\mathbf{X}\) 是正常的。
这些结果是那些情况下的扩展 \(Y\) 是基于一个预测因子预测 \(X\)。为了证明它们,你需要一些线性代数和一些耐心。我们不会在这里做证明。根据您在单个预测器的情况下所看到的情况,不应该难以相信它们是真的。
为了一些保证,我们可以模拟三变量正态分布的数据,并看看我们的条件期望公式如何与模拟点相关。
为此,我们将首先设置一些符号。我们说 \(Y\) 和 \(\mathbf{X}\) 具有多元正态分布,我们说 \((1+p) \times 1\) 随机向量 \([Y, X_1, X_2, \ldots, X_p]^T\) 具有二元正态分布。
为了保持变量的组织和符号的紧凑,我们将对随机向量及其均值向量进行分区。

我们也可以根据下面的分界线划分协方差矩阵。

下面的单元格生成了从多元正态分布中提取的 200 个点的模拟,其中提供了参数。在垂直维度上绘制的变量是 \(Y\), 其他两个轴代表两个预测变量 \(X_1\) 和 \(X_2\)。
这个平面是

请记住,它是根据此公式计算的;它没有基于 200 个模拟点进行估算。
请注意,所有三个变量都是标准单位,并且两个预测变量不是高度相关的:\(r(X_1, X_2) = 0.2\)。当然,您可以更改参数,但如果输入的“协方差矩阵”不是半正的,则会收到错误消息。
mu = [0, 0, 0]
cov = np.array([[1, 0.6, 0.5],
[0.6, 1, 0.2],
[0.5, 0.2, 1]])
Plot_multivariate_normal_regression(mu, cov, 200)

这是熟悉的足球形散点图的三维版本,其中“最佳预测”线穿过它。飞机穿过云的“垂直中心”。
在下面的模拟中,这个相关性在 \(Y\) 和 两个预测变量之间已经减少。注意平面的传播范围更大。
mu = [0, 0, 0]
cov = np.array([[1, 0.3, 0.25],
[0.3, 1, 0.2],
[0.25, 0.2, 1]])
Plot_multivariate_normal_regression(mu, cov, 200)

本章的计算,用于预测随机变量的值 \(Y\) 通过随机变量 \(X_1, X_2, \ldots, X_p\)的线性函数,直接应用于数据。我们看到的只是一堆观点:
Scatter_multivariate_normal(mu, cov, 200)

但我们不知道分布的参数,因此我们无法通过散射绘制正确的平面。多元回归的问题是基于数据估计平面。
数据 - 即点云 - 包括 \(n\) 个观察随机向量 \([Y, X_1, X_2, \ldots, X_p]\)。那么,任务是估计平面使用 \(n \times p\) 预测变量的观测值矩阵和 \(n \times 1\)观测值\(Y\)的向量。最佳平面的公式来自本章开发的随机变量的相应公式。
标准符号是使 \(X\) 成为 \(n \times p\) 预测矩阵,这个\(j\)th column \([x_{1j} ~ x_{2j} ~ \ldots ~ x_{nj}]^T\) 包含 \(n\) 个第 \(j\)th 预测变量 \(X_j\)的观察值,是 \(y\) 表示 \(n \times 1\) 观察的\(Y\)向量。
我们的公式表示用于预测的最佳线性函数的系数\(Y\) 基于 \(\mathbf{X}\) 是整个 \(p \times 1\) vector \(\mathbf{b}= \boldsymbol{\Sigma}\mathbf{X}^{-1}\boldsymbol{\Sigma}{\mathbf{X}, Y}\)。最佳线性函数的系数是基于整个 \(p \times 1\) 向量数据 \(\hat{\beta} = (X^TX)^{-1}X^Ty\)。你应该能够找出原因。
进一步审查练习
其中许多练习需要第 19 章的材料,这当然依赖于前面章节的内容。但是,其中一些可以单独使用早期材料来解决。
根据学生和校友的说法,一些练习在“量子”访谈中出现了问题。
-
硬币以 \(p\) 概率代表,让 \(X\) 为第一个头部出现之前的投掷次数,让 \(Y\) 为第一个头部之前的尾部数量。
(a) 找到生成 \(X\) 函数的时刻。
(b) 使用(a)的答案找到 \(E(X)\)。请注意,到目前为止,你已经在几个方面找到了 \(E(X)\): 通过尾总和公式,通过调整第一次折腾,通过 pgf,现在通过 mgf。
(c) 使用(a)的答案找到 \(Y\) 的生成函数。
-
设 \(X_1, X_2, \ldots, X_n\) 是 i.i.d.Poisson \((\mu)\) 随机变量。找出 \(\mu\) 的最大似然估计值。
-
设 \(X_1, X_2, \ldots, X_n\) 为 i.i.d.在 \((0, \theta)\) 统一。
(a) 找到 \(\theta\) 的 MLE。 [不要跳算计算。绘制您想要最大化的功能的图表,并注意其域名。]
(b) MLE 是否不偏不倚?如果没有,请使用 MLE 构建 \(\theta\) 的无偏估计。
-
\(X\) 和 \(Y\) 是 i.i.d.与矩生成函数\(M(t) = e^{t + t^2}\), \(-\infty < t < \infty\)。 \((X-Y)^2\)的分布是什么?
-
捕获 - 再捕获方法有时用于估计种群大小。一个标准的图像是一个池中含有 \(N\) 条鱼,一些固定但未知的\(N\),\(N\)鱼的\(G\)已被捕获,标记并活着返回池中。
在重新捕获阶段,假设从鱼池中的\(N\)条鱼中抽取一个简单的\(n\)条鱼随机样本(你可能需要用一些想象来相信这个假设)。我们可以观察样本中标记鱼的随机数\(X\)。
目标是使用观察估计\(N\)。
(a) 对于大的\(n\),样本比例\(X / n\)可能接近常数。确定常量,从而根据\(X\)构建\(N\)的估计值。在本练习的后面,您将看到您的估算与\(N\)的 MLE 相关。
(b) 对于\(N\ge n\),找到可能\(lik(N)\)。您可以假设\(n > G\)。
(c) 要最大化此似然函数,请调整您用于查找二项式和泊松分布模式的方法。找出似然比\(\frac{lik(N+1)}{lik(N)}\) 并显示它是\(N\)的递减函数。 [回过头来看看我们如何显示二项式比值比的相应事实。]
(d) 现在找到\(N\)的 MLE。它与(a)中的估算值相比如何?
-
显示如果\(r > 1\)和\(s > 1\)那么 beta \((r, s)\)发行版的模式是\((r-1)/(r+s-2)\)。请记住忽略乘法常量并在最大化之前获取日志。
-
假设\(X\)具有 beta \((r, s)\)分布,并且给定\(X=p\),\(H\)的条件分布是二项式\((10, p)\)。找
(a) 在\(H = 7\)的情况下,\(X\)的条件分配
(b) \(E(X \mid H = 7)\)
(c) 给出\(H = 7\)的 MAP 估计\(X\)
(d) \(P(H = 7)\)
(e) \(E(H)\)
-
根据 beta \((r, s)\) 分布挑选随机硬币头的机会。硬币被反复抛掷。
(a) 前三次投掷的头部有多少,接下来的三次投掷是尾部的几率是多少?
(b) 鉴于前三次投掷是头部而接下来的三次投掷是尾部,第七次投掷的可能性是多少?
(c) 鉴于前六次投掷中有三次是头部,第七次投掷的可能性是多少?与(b)的答案相比较。
-
A 人通过在\((0, 1)\)上统一选择正面的机会来创造一枚硬币。在硬币的三次投掷中,人 A 得到两个面。
独立于人 A,人 B 通过在\((0, 1)\)上统一选择面的机会来创建一枚硬币。在硬币的三次投掷中,人 B 得到正面。
(a) 鉴于这些数据,人 A 硬币正部的机会分布是什么?
(b) 鉴于这些数据,人 B 硬币正部的机会分布是什么?
(c) 鉴于这些数据,A 人的硬币比 B 人的硬币有更高的概率是多少?
-
Poisson-Binomial 上尾的 Markov 和 Chebyshev 界。对于\(j \ge 1\),让\(I_j\)为独立指标,使得\(P(I_j = 1) = p_j\)。 设 \(X = I_1 + I_2 + \ldots + I_n\)。后\(X\)是\(n\)独立试验中不一定相同分布的成功次数。
我们说\(X\)具有参数\(p_1, p_2, \ldots, p_n\)的泊松二项分布。当所有\(p_j\)相等时,二项式是特殊情况。
您在实验室中看到,中餐馆流程中占用的表的数量具有 Poisson-Binomial 分布。这些分布出现在统计学习理论,随机算法理论和其他领域。
设\(E(X) = \mu\)。对于\(c > 0\),您将在\(P(X \ge (1+c)\mu)\)上找到上限。这是\(X\)超过其平均值的几率。
在二项式的特殊情况下,\(\mu = np\) 和\(P(X \ge (1+c)\mu)\)可以重写为\(P(\frac{X}{n} - p \ge cp)\)。这样的样本比例可能超过\(p\)百分之几。
(a) 按\(p_1, p_2, \ldots, p_n\)查找 \(\mu = E(X)\)和\(\sigma^2 = Var(X)\)。
(b) 在\(P(X \ge (1+c)\mu)\)上找到 Markov 的界限。
(c) 在\(\mu\)和\(\sigma\)方面找到 Chebyshev 对\(P(X \ge (1+c)\mu)\)的约束。
(d) 如果所有\(p_j\)都等于 \(p\),那么(c)中的边界值是多少?
-
Chernoff 绑定泊松二项式上尾。此练习继续前一个练习并使用相同的表示法。
(a) 显示所有\(t\)的\(M_{I_j}(t) = 1 + p_j(e^t - 1)\) 给出\(I_j\)的 mgf。
(b) 使用(a)导出\(M_X(t)\)的表达式,以\(t\)计算\(X\)的 mgf。
(c) 一个有用的指数界限是所有$ x \(的\)e^x \ge 1 + x$ for all \(x\)。您不必显示它,但请查看图表。使用这个事实来显示所有\(t\)的\(M_X(t) \le \exp\big{(}\mu(e^t -1)\big{)}\)。请注意,右侧是泊松随机变量的 mgf,其平均值与\(X\)相同。
(d) 使用 Chernoff 的方法和(c)中的界限来表明
![25-4]()
当所有\(p_j\)相等时,请记住\(\mu = np\)。如果\(g(c) = \exp(c)/(1+c)^{1+c}\)很小,则上限将随着\(n\)变大而呈指数下降。这是下一个练习的重点。
-
Poisson-Binomial 上尾的简化 Chernoff 界。此练习继续前一个练习并使用相同的表示法。
上一练习中的界限有点复杂。通常,使用更简单的版本,因为即使它们较弱,它们也足够好。
(a) 为\(c > 0\)显示 \(\log(1+c) \ge \frac{2c}{2+c}\) for \(c > 0\)并不难。您不必显示它,但请查看图表。使用该事实来显示\(c - (1+c)\log(1+c) \le -\frac{c^2}{2+c}\)。
(b) 显示如果\(X\)的 Poisson-binomial 分布均值为\(\mu\)。
![25-4]()
(c) 还经常使用(b)中更简单但更弱的界限版本。
![25-4]()
-
正随机变量\(V\)具有期望\(\mu\)和方差\(\sigma^2\)。
(a) 对于每个\(v > 0\),给定\(V = v\)的\(X\)的条件分布是 Poisson \((v)\)。按\(\mu\)和\(\sigma\)查找 \(E(X)\)和\(Var(X)\)。
(b) 对于每个\(v > 0\),给定\(V=v\)的\(X\)的条件分布是某些固定\(\lambda\)的 gamma \((v, \lambda)\)。按\(\mu\)和\(\sigma\)查找\(E(X)\)和\(Var(X)\)。
-
设\(X_1, X_2, \ldots, X_n\)是 i.i.d.期望\(\mu\)和方差\(\sigma^2\)。设 \(S = \sum_{i=1}^n X_i\)。
(a) 根据\(X_1\)查找\(S\)的最小二乘预测值,并找出预测变量的均方误差(MSE)。
(b) 根据\(S\)查找\(X_1\)的最小二乘预测值,并找到预测变量的 MSE。预测器是\(S\)的线性函数吗?如果是这样,它也必须是基于\(S\)的所有线性预测变量中最好的,这通常被称为回归预测变量。
-
\(p\) -coin 被反复抛出。让\(W_{H}\)为第一个头部出现之前的投掷数量,并且\(W_{HH}\)直到两个连续头部出现的投掷数量。
(a) 描述一个随机变量\(X\),它仅取决于\(W_H\)之后的抛出并满足\(W_{HH} = W_H + X\)。
(b) 使用(a)部分找到\(E(W_{HH})\)和\(Var(W_{HH})\)。
-
设\(N\)为非负整数值随机变量,让$X, X_1, X_2, \ldots \(为 i.i.d.并且独立于\)N\(。和以前一样,定义随机和\)S$
![25-4]()
(a) 让\(M\)成为我们通常用于生成函数的符号。通过调整\(N\),显示出来
![25-4]()
假设上面的所有数量都已明确定义。 [\((e^a)^n = e^{an}\)可能很方便。]
(b) 让\(N\)在\({1, 2, 3, \ldots }\)上有几何\((p)\)分布。找到\(N\)的 mgf。这不使用(a)部分。
(c) 让$X_1, X_2, \ldots \(为 i.i.d.指数\)(\lambda)\(变量,让\)N\(为几何,如(b)部分所示。使用(a)和(b)部分的结果来确定\)S$的分布。
-
让\(\mathbf{X}\)为\(p \times 1\) 随机向量,假设我们试图用\(\mathbf{X}\)的线性函数预测随机变量\(Y\)。在前面的部分中,我们通过将搜索限制为\(Y\)的线性函数来确定最小二乘线性预测器,这些函数对于\(Y\)是无偏的。表明这是一个合法的举动。
具体来说,让 \(\hat{Y}_1 = \mathbf{c}^T \mathbf{X} + d\)成为有偏见的预测因子,以便\(E(\hat{Y}_1) \ne \mu_Y\)。找到一个非零常数\(k\),这样\(\hat{Y}_2 = \hat{Y}_1 + k\)是无偏的,并显示\(MSE(\hat{Y}_1) \ge MSE(\hat{Y}_2)\)。这将表明最小二乘线性预测器必须是无偏的。
三、随机变量
原文:prob140/textbook/notebooks/ch03
译者:飞龙
自豪地采用谷歌翻译
许多数据科学涉及数值变量,它的观察值取决于几率。其他值提供的变量的预测值,随机样本中观察到的不同类别个体的数量,以及自举样本的中值,仅仅是几个例子。 你在 Data8 中看到了更多例子。
在概率论中,随机变量是在结果空间上定义的数值函数。 也就是说,函数的定义域是Ω,它的值域是实数行。 随机变量通常用靠后的字母表示,如X和Y。
结果空间上的函数
随机抽样可以看做重复的随机试验,因此许多结果空间由序列组成。代表硬币投掷两次的结果空间是:

如果你投掷 10 次,结果空间将包含 10 个元素的 2^10 个序列,其中每个元素是H或T。手动列出结果比较痛苦,但计算机善于为我们避免这种痛苦。
乘积空间
两个集合A和B的乘积是所有偶对(a, b)的集合,其中a ∈ A和b ∈ B。 这个概念正是我们需要的,用于描述代表多个试验的空间。
例如,表示一枚硬币投掷结果的空间是
。
与其本身的乘积是偶对的集合(H, H), (H, T), (T, H), (T, T),你可以认出这是硬币投掷的结果。 这个新空间和
的乘积是代表三次投掷的空间,以此类推。
Python 模块itertools包含构造乘积空间的函数product。 让我们导入它。
from itertools import product
要了解product是如何工作的,我们将从投掷硬币的结果开始。我们正在使用make_array创建一个数组,但你可以使用任何其他方式创建数组或列表。
one_toss = make_array('H', 'T')
为了使用product,我们必须指定基本空间和重复次数,然后将结果转换为列表。
two_tosses = list(product(one_toss, repeat=2))
two_tosses
# [('H', 'H'), ('H', 'T'), ('T', 'H'), ('T', 'T')]
对于三次投掷,只需改变重复次数:
three_tosses = list(product(one_toss, repeat=3))
three_tosses
'''
[('H', 'H', 'H'),
('H', 'H', 'T'),
('H', 'T', 'H'),
('H', 'T', 'T'),
('T', 'H', 'H'),
('T', 'H', 'T'),
('T', 'T', 'H'),
('T', 'T', 'T')]
'''
概率空间是结果空间,带有所有结果的概率。 如果假设三次投掷的八次结果是等可能的,则概率均为 1/8:
three_toss_probs = (1/8)*np.ones(8)
相应的概率空间:
three_toss_space = Table().with_columns(
'omega', three_tosses,
'P(omega)', three_toss_probs
)
three_toss_space
| omega | P(omega) |
|---|---|
['H' 'H' 'H'] |
0.125 |
['H' 'H' 'T'] |
0.125 |
['H' 'T' 'H'] |
0.125 |
['H' 'T' 'T'] |
0.125 |
['T' 'H' 'H'] |
0.125 |
['T' 'H' 'T'] |
0.125 |
['T' 'T' 'H'] |
0.125 |
['T' 'T' 'T'] |
0.125 |
乘积空间增长得非常快。 如果你投掷 5 次,将会有近 8000 种可能的结果:
6**5
# 7776
但是我们有product,所以我们仍然可以列出所有乘积! 这是一个表示 5 次骰子投掷的概率空间。
die = np.arange(1, 7, 1)
five_rolls = list(product(die, repeat=5)) # All possible results of 5 rolls
five_roll_probs = (1/6**5)**np.ones(6**5) # Each result has chance 1/6**5
five_roll_space = Table().with_columns(
'omega', five_rolls,
'P(omega)', five_roll_probs
)
five_roll_space
| omega | P(omega) |
|---|---|
[1 1 1 1 1] |
0.000128601 |
[1 1 1 1 2] |
0.000128601 |
[1 1 1 1 3] |
0.000128601 |
[1 1 1 1 4] |
0.000128601 |
[1 1 1 1 5] |
0.000128601 |
[1 1 1 1 6] |
0.000128601 |
[1 1 1 2 1] |
0.000128601 |
[1 1 1 2 2] |
0.000128601 |
[1 1 1 2 3] |
0.000128601 |
[1 1 1 2 4] |
0.000128601 |
... (7766 rows omitted)
结果空间上的函数
假设你投掷一个骰子五次,并将你看到的点数加起来。如果这看起来不清楚,请耐心等待一会儿,你很快就会明白为什么它很有趣。
点数的总和是五个点数的结果空间Ω上的数值函数。 总和是一个随机变量。我们称它为S。然后,在形式上,

S的范围是 5 到 30 的整数,因为每个骰子至少有一个点,最多六个点。 我们也可以使用相同的符号:

从计算的角度来看,Ω的元素位于five_roll_space的omega列中。让我们应用这个函数并创建一个更大的表格。
five_rolls_sum = Table().with_columns(
'omega', five_rolls,
'S(omega)', five_roll_space.apply(sum, 'omega'),
'P(omega)', five_roll_probs
)
five_rolls_sum
| omega | S(omega) | P(omega) |
|---|---|---|
[1 1 1 1 1] |
5 | 0.000128601 |
[1 1 1 1 2] |
6 | 0.000128601 |
[1 1 1 1 3] |
7 | 0.000128601 |
[1 1 1 1 4] |
8 | 0.000128601 |
[1 1 1 1 5] |
9 | 0.000128601 |
[1 1 1 1 6] |
10 | 0.000128601 |
[1 1 1 2 1] |
6 | 0.000128601 |
[1 1 1 2 2] |
7 | 0.000128601 |
[1 1 1 2 3] |
8 | 0.000128601 |
[1 1 1 2 4] |
9 | 0.000128601 |
... (7766 rows omitted)
我们现在有五次投掷的所有可能的结果,以及它的总点数。你可以看到表格的第一行显示了尽可能少的点数,对应于所有投掷都显示 1 点。 第 7776 行显示了最大的:
five_rolls_sum.take(7775)
| omega | S(omega) | P(omega) |
|---|---|---|
[6 6 6 6 6] |
30 | 0.000128601 |
S的所有其他值都在这两个极端之间。
随机变量的函数
随机变量是Ω上的数值函数。 因此,通过复合,随机变量的数值函数也是随机变量。
例如,
是一个随机变量,计算如下:

所以
。
由S确定的事件
从表five_rolls_sum中,很难判断有多少行显示 6 或 10 或其他任何值。 为了更好地理解S的属性,我们必须组织five_rolls_sum中的信息。
对于S中的任何子集A,定义事件{S∈A}为:

在特殊情况下尝试这个定义。令A = {5,30}。 然后{S∈A},当且仅当所有点数都是 1 点或 6 点。 所以:
![{S \in A} = {\text{[1 1 1 1 1], [6 6 6 6 6]}}](https://github.com/OpenDocCN/dsai-notes-pt2-zh/raw/master/docs/ucb-prob140-notes/img/tex-84e17d83407719152ae5ea9a53997143.gif)
询问总和是否为某个特定值的几率是很自然的,例如 10。读取表格并不容易,但我们可以访问相应的行:
five_rolls_sum.where('S(omega)', are.equal_to(10))
... (116 rows omitted)
S(ω)=10的ω有 126 个值。由于所有的ω都相同,因此S的值为 10 的几率是 126/7776。
非正式情况下,我们通常会用符号表示,写成{S = 10}而不是{S∈{10}}。
分布
我们的空间是骰子的五次投掷的结果,而我们的随机变量S是五次投掷的点数总数。
five_rolls_sum
| omega | S(omega) | P(omega) |
|---|---|---|
[1 1 1 1 1] |
5 | 0.000128601 |
[1 1 1 1 2] |
6 | 0.000128601 |
[1 1 1 1 3] |
7 | 0.000128601 |
[1 1 1 1 4] |
8 | 0.000128601 |
[1 1 1 1 5] |
9 | 0.000128601 |
[1 1 1 1 6] |
10 | 0.000128601 |
[1 1 1 2 1] |
6 | 0.000128601 |
[1 1 1 2 2] |
7 | 0.000128601 |
[1 1 1 2 3] |
8 | 0.000128601 |
[1 1 1 2 4] |
9 | 0.000128601 |
... (7766 rows omitted)
在最后一节中,我们找到了P(S = 10)。我们可以使用相同的过程,为每个可能的s值查找P(S = s)。group方法允许我们在同一时间为所有s这样做。
为此,我们首先丢掉omega列。 然后,我们将按S(omega)的不同值对表格进行分组,并使用sum来将每组中的所有概率相加。
dist_S = five_rolls_sum.drop('omega').group('S(omega)', sum)
dist_S
| S(omega) | P(omega) sum |
|---|---|
| 5 | 0.000128601 |
| 6 | 0.000643004 |
| 7 | 0.00192901 |
| 8 | 0.00450103 |
| 9 | 0.00900206 |
| 10 | 0.0162037 |
| 11 | 0.0263632 |
| 12 | 0.0392233 |
| 13 | 0.0540123 |
| 14 | 0.0694444 |
... (16 rows omitted)
该表格显示了所有可能的S值及其所有概率。它被称为S的概率分布表。
表中的内容 - 随机变量的所有可能值及其所有概率 - 称为S的概率分布,或者简称为S的分布。该分布显示了 100% 的总概率如何分布在S的所有可能值上。
让我们来检查一下,以确保结果空间中的所有ω都已经在概率一列中得到了解释。
dist_S.column(1).sum()
# 0.99999999999999911
它在计算环境中是 1。这是任何概率分布的一个特征:
分布的概率是非负的,总和为 1。
展示分布
在 Data8 中,你使用datascience库来处理数据分布。prob140库建立在它上面,为处理概率分布和事件提供了一些便利的工具。
首先,我们将构造一个概率分布对象,虽然它看起来非常像上面的表格,但它的第二列中预计会有概率分布,并且如果它发现了其他任何东西,就会报错。
为了使代码易于阅读,让我们以数组的形式分别提取可能的值和概率:
s = dist_S.column(0)
p_s = dist_S.column(1)
要将这些转换为概率分布对象,请从空表开始,然后使用表的values和probability方法。values的参数是可能值的列表或数组,而probability的参数是相应概率的列表或数组。
dist_S = Table().values(s).probability(p_s)
dist_S
| Value | Probability |
|---|---|
| 5 | 0.000128601 |
| 6 | 0.000643004 |
| 7 | 0.00192901 |
| 8 | 0.00450103 |
| 9 | 0.00900206 |
| 10 | 0.0162037 |
| 11 | 0.0263632 |
| 12 | 0.0392233 |
| 13 | 0.0540123 |
| 14 | 0.0694444 |
... (16 rows omitted)
除了列标签更具可读性之外,这看起来与我们之前的表完全相同。但是这是好处:在直方图中展示分布,只需使用prob140的Plot方法,如下。
Plot(dist_S)

Plot的注解
-
回想一下,
datascience库中的hist显示原始数据的直方图,包含在表格的列中。prob140库中的Plot显示概率直方图,基于概率分布作为输入。 -
Plot仅适用于概率分布对象,使用values和probability方法创建的。 它不适用于Table类的普通成员。 -
Plot适用于具有整数值的随机变量。 你将在接下来的几章中遇到的许多随机变量是整数值。 为了展示其他随机变量的分布,分箱决策更加复杂。
S的分布的注解
在这里,五次投掷的点数总和的分布曲线出现了钟形。 注意这个直方图和你在 Data 8 中看到的钟形分布之间的差异。
这个显示确切的分布。它是根据实验的所有可能结果进行计算的。这不是一个近似值也不是一个经验直方图。
Data8 中的中心极限定理的表述表明,大型随机样本总和的分布大致是正态的。但是在这里你看到的只是五次投掷的总和呈现钟形分布。如果你从均匀的分布开始(这是单次投掷的分布),那么在总和的概率分布变成正态之前,你不需要大型样本。
展示事件的概率
从 Data8 中可知,钟形曲线拐点之间的区间约占曲线面积的 68%。 虽然上面的直方图并不完全是一个钟形曲线 - 它是一个只有 26 个条形的离散直方图 - 但它非常接近。 拐点似乎大约是 14 和 21。
Plot的event 参数可让你可视化事件的概率,如下所示。
Plot(dist_S, event = np.arange(14, 22, 1))

金色区域是P(14 <= S <= 21)。
prob_event方法操作概率分布对象,来返回事件的概率。为了找到P(14 <= S <= 21),请按如下所示使用它。
dist_S.prob_event(np.arange(14, 22, 1))
# 0.6959876543209863
几率是 69.6%,离 68% 并不远。
数学和代码的对应
P(14 <= S <= 21)可以通过将事件划分为 14 到 21 范围内的事件{S = s}的并集,然后使用加法规则来找到。

请小心使用小写字母s作为通用可能值,与大写字母S作为随机变量相对应;不这样做会使公式含义非常混乱。
这意味着:
首先为 14 到 21 范围内的每个s值抽取事件{S = s}:
event_table = dist_S.where(0, are.between(14, 22))
event_table
| Value | Probability |
|---|---|
| 14 | 0.0694444 |
| 15 | 0.0837191 |
| 16 | 0.0945216 |
| 17 | 0.100309 |
| 18 | 0.100309 |
| 19 | 0.0945216 |
| 20 | 0.0837191 |
| 21 | 0.0694444 |
然后将所有这些事件的概率相加。
event_table.column('Probability').sum()
# 0.6959876543209863
prob_event方法一步完成所有这些。 在这里再次进行比较。
dist_S.prob_event(np.arange(14, 22, 1))
# 0.6959876543209863
你可以通过各种方式,使用相同的基本方法来查找由S确定的任何事件的概率。这里有两个例子。
示例 1:
示例 2:
一个查找数值的简便方法:
dist_S.prob_event(np.arange(20, 31, 1))
# 0.30516975308642047
示例 3:
dist_S.prob_event(np.arange(4, 17, 1))
# 0.39969135802469169
相等性
我们知道两个数字相等意味着什么。 然而,随机变量的相等可能不止一种。
相同
如果相同结果空间上定义的两个随机变量X和Y的值,对于空间中的每个结果都是相同的,那么它们是相同的。符号X = Y意味着
。非正式来说,无论结果如何, 如果X是 10,那么Y也必须是 10;如果X是 11,Y必须是 11,依此类推。
一个例子会把它说清楚。 假设
是三次硬币投掷的正面数量,并且
是相同的三次投掷的背面数量。 那么两个随机变量
和
是相等的。 对于三次投掷的每一种可能结果,
的值等于
的值。
我们简单地写成
。
同分布
如上所述,
和
不相等。例如,
。
然而,有一种感觉是,正面数量与背面数量“以相同的方式出现”。两个随机变量具有相同的概率分布。
结果空间是three_tosses:
coin = make_array('H', 'T')
three_tosses = list(product(coin, repeat=3))
three_tosses
'''
[('H', 'H', 'H'),
('H', 'H', 'T'),
('H', 'T', 'H'),
('H', 'T', 'T'),
('T', 'H', 'H'),
('T', 'H', 'T'),
('T', 'T', 'H'),
('T', 'T', 'T')]
'''
只有 8 个结果,因此很容易检查上表并写出
和
的分布。它们都取值为 0, 1, 2 和 3,概率分别为 1/8,3/8,3/8 和 1/8。该分布如下表所示。
dist = Table().values(np.arange(4)).probability(make_array(1, 3, 3, 1)/8)
dist
| Value | Probability |
|---|---|
| 0 | 0.125 |
| 1 | 0.375 |
| 2 | 0.375 |
| 3 | 0.125 |
我们说
和
是同分布的。
一般而言,如果两个随机变量具有相同的概率分布,则它们是同分布的。 这表示为
。
相等性之间的关系
相同比同分布更强。如果两个随机变量在结果层面上相同,那么它们必须具有相同的分布,因为它们在结果空间上是相同的函数。
也就是说,对于任意两个随机变量X和Y,
。
但三次投掷的正面和反面的例子表明,反面不一定是正确的。
示例:来自小牌组的两张牌
一个牌组包含 10 张牌,分别标记为1,2,2,3,3,3,4,4,4,4。两张牌是不放回随机发放的。让
为第一张卡上的标记,
为第二张卡上的标记。
问题 1。
和
是否相同?
答案是否定的,因为结果可能是 31,在这种情况下
和
。
问题 2。
和
是否同分布?
回答 2。让我们找到两个分布并进行比较。显然,每种情况下可能的值是 1,2,3 和 4。
的分布很简单:
。当分布由这样的公式定义时,你可以定义一个函数来表示公式所说的内容:
def prob1(i):
return i/10
然后,你可以像之前一样,使用value创建一个概率分布对象,但现在使用probability_function,它将函数的名称作为其参数:
possible_i = np.arange(1, 5, 1)
dist_X1 = Table().values(possible_i).probability_function(prob1)
dist_X1
| Value | Probability |
|---|---|
| 1 | 0.1 |
| 2 | 0.2 |
| 3 | 0.3 |
| 4 | 0.4 |
相信下面的函数prob2会为每个i返回P(X_2 = i)。事件已根据
的值进行划分。
def prob2(i):
if i == 1:
return (9/10)*(1/9)
else:
return (i/10)*((i-1)/9) + ((10-i)/10)*(i/9)
dist_X2 = Table().values(possible_i).probability_function(prob2)
dist_X2
| Value | Probability |
|---|---|
| 1 | 0.1 |
| 2 | 0.2 |
| 3 | 0.3 |
| 4 | 0.4 |
这两个分布是相同的!这是另一个不放回抽样的对称性的例子。 结论是
。
四、事件之间的关系
在数据科学中的大多数问题都可以归为变量之间的关系问题。
例如:
- 如何使用已知的数据属性来判断细胞是否癌变?
- 加利福尼亚县的平均收入与用水量之间有什么联系?
- 买汽车的人会为更长的里程或更快的加速付出更多吗?
您会在数据集 8 中遇到许多类似的问题。
概率论可以帮助我们提出和回答关于随机变量之间关系的精确问题。特别的,它帮助我们理解一组随机变量的条件行为并给定另一组的值。
在这个章节中,我们将研究在同一结果集中定义的多个随机变量。
联合分布
假设\(X\) 和 \(Y\) 是相同的结果空间里定义好的 2 个随机变量。我们用符号\(P(X=x ,Y=y)\)来表示\(X\)的价值\(x\)和\(Y\)的价值\(y\)。
X 和 Y 的联合分布包括所有概率\(P(X=x ,Y=y)\)在\((x,y)\)的所有取值范围内。
例如
抛 3 次硬币,设 X 为前两次抛出结果是正面的次数,Y 为后两次抛出结果是正面的次数。
则: \(P(X=0, Y=2 )=0=P(X =2, Y=0)\)
\(P(X = 1,Y=1 )= P(THT or HTH) = 2/8\)
其他的概率都是 1/8,你可以通过检查 3 次投币的其余结果看到。
如:
\(P(X=1,Y=2)=P(THH)=1/8\)
约束条件:\(X\)和\(Y\) 必须在{0,1,2}的范围内,且 \(|X-Y|<2\)。
我们可以定义一个函数,以\(X\)和\(Y\)作为参数,返回\(P(X=x,Y=y)\).
def joint_probability(x, y):
if x == 1 & y == 1:
return 2/8
elif abs(x - y) < 2:
return 1/8
else:
return 0
prob140 库包含 2 个随机变量联合分布的表格可视化方法。首先,你需要为两个变量各赋一个概率值。
在我们的例子中,2 者都有可能取到值{0,1,2},因此他们的取值都能使用数组或者列表来装载
k = np.arange(3)
为了构造一个联合分布对象,我们必须首先构造一个包含所有可能的值和概率对照表。则:
Table().values(variable_name_1, values_1, variable_name_2, values_2).probability_function(function_name)
function_name 是指把 x 和 y 送进函数里,并返回一个概率\(P(X=x,Y=y)\).
joint_table = Table().values('X', k, 'Y', k).probability_function(joint_probability)
joint_table
| X | Y | Probability |
|---|---|---|
| 0 | 0 | 0.125 |
| 0 | 1 | 0.125 |
| 0 | 2 | 0 |
| 1 | 0 | 0.125 |
| 1 | 1 | 0.25 |
| 1 | 2 | 0.125 |
| 2 | 0 | 0 |
| 2 | 1 | 0.125 |
| 2 | 2 | 0.125 |
这就是展示出来的联合分布的结果。我们可以检查一下这个分布,把所有的概率累加起来。对于一个正常的分布来说,结果应该是 1。
joint_table.column(2).sum()
1.0
联合分布表
尽管上面的表格确实展示了联合分布。但如果能以不同的方式来展示相同的信息,则会根据有启发性和说服力。
to_joint 函数能将上面的表格转换为一个"联合分布的对象"作为\(X\)和\(Y\)的常规联合分布表显示。
joint_dist =joint_table.to_joint()
joint_dist
| X=0 | X=1 | X=2 | |
|---|---|---|---|
| Y=2 | 0.000 | 0.125 | 0.125 |
| Y=1 | 0.125 | 0.250 | 0.125 |
| Y=0 | 0.125 | 0.125 | 0.000 |
每个单元格对应着一对\((x,y)\),\(x\)对应着\(X\) ,\(y\)对应着\(Y\)。在每个单元格中都能看到\(X=x\)和\(Y=y\)时的概率\(P(X=x,Y=y)\)。
联合分布表类似于数据 8 中分析两个分类变量之间关系时看到的列联表。在列联表中,每个单元格包含一个特定类别对中的个体数量。在联合分布表(如上图)中,每个单元格包含一对特定值的概率。
找到的概率
表格完整的包含了\(X\)和\(Y\)之间的关系,要找到\(X\)与\(Y\)所决定的事件的可能性,只需要找到造成事件发生的单元格,
并将他们的概率相加。这是找到部分事件概率的基本方法。
例如:
$ P(X>Y) = P(X=1,Y=0)+P(X=2,Y=0)+P(X=2,Y=1)
= 0.125 + 0 + 0.125
= 0.25
$
$ P(X=Y) = P(X=0,Y=0) + P(X=1,Y=1) +P(X=2,Y=2)
= 0.125 +0.25 +0.125
= 0.5
$
边际分布
联合分布表是根据每队\((X,Y)\)的值来划分整个结果空间。
在我们的例子中,我们将硬币丢出了 3 次。X 的值是前 2 次抛出硬币的结果,Y 的值是最后两次抛硬币的结果。
我们在这里再看一下联合分布表中的\(X\)和\(Y\)。
| X=0 | X=1 | X=2 | |
|---|---|---|---|
| Y=2 | 0.000 | 0.125 | 0.125 |
| Y=1 | 0.125 | 0.250 | 0.125 |
| Y=0 | 0.125 | 0.125 | 0.000 |
在这个表中共有 9 个部分,每个部分都代表着一个可能性出现的概率。
当然,正如我们在上一节中所看到的一样,这些可能性的概率累加的结果是 1。
通过 Y 来划分
现在我们来看看X=0 这一列。 在这列中的每一个单元格里,\(X\)都是 0,\(Y\)的值则是在\(Y\)取值范围的一些元素。
所以X=0这列是通过 Y 的取值来划分事件\({X=0}\)的部分,再展示其中每个部分的概率。
事实上对于每一个不想交的\(x\)集合而言,都有:
\({X=x }= ⋃ all y {X=x,Y=y}\)
所以,根据加法规则则有:
\(P(X=x)=∑ all y P(X=x,Y=y)\)
\(P(X=x)\) 是X=x列的所有概率之和。因为\(P(X=x)\)是\(X\)分布中的一个一般项,我们可以从\(X\)和\(Y\)的联合分布中得到 X 的分布。
如果我们想要求出 X 分布的数值,我们可以使用marginal函数,把 X当做参数,把联合分布当做对象进行操作。
一旦我们看到结果,使用“边际”这个词的理由就会变得清晰起来。
joint_dist.marginal('X')
| X=0 | X=1 | X=2 | |
|---|---|---|---|
| Y=2 | 0.000 | 0.125 | 0.125 |
| Y=1 | 0.125 | 0.250 | 0.125 |
| Y=0 | 0.125 | 0.125 | 0.000 |
| Sum: Marginal of X | 0.250 | 0.500 | 0.250 |
现在表的底部有所有列的和,它们构成了\(X\)的分布。由于这些和出现在表的边距中,因此该分布称为边际分布。
这是前两次投掷结果出现正面次数结果\(X\)的概率分布的新名词。
\(X\)和\(Y\)的边际分布
很明显,你能对\(X\)做的事,对\(Y\)也一样可以做。
joint_dist.marginal('Y')
| X=0 | X=1 | X=2 | Sum: Marginal of Y | |
|---|---|---|---|---|
| Y=2 | 0.000 | 0.125 | 0.125 | 0.25 |
| Y=1 | 0.125 | 0.250 | 0.125 | 0.50 |
| Y=0 | 0.125 | 0.125 | 0.000 | 0.25 |
| Sum: Marginal of X | 0.250 | 0.500 | 0.250 | 1.00 |
\(Y\)也是两次抛掷的正面数(三次抛掷中的最后两次),所以边距中的概率是有意义的。
你也可以同时得到两个边际:
joint_dist.both_marginals()
| X=0 | X=1 | X=2 | Sum: Marginal of Y | |
|---|---|---|---|---|
| Y=2 | 0.000 | 0.125 | 0.125 | 0.25 |
| Y=1 | 0.125 | 0.250 | 0.125 | 0.50 |
| Y=0 | 0.125 | 0.125 | 0.000 | 0.25 |
| Sum: Marginal of X | 0.250 | 0.500 | 0.250 | 1.00 |
在表中底部最右边的那个单元格代表的是对于每个边际的概率之和,当然,它一定是 1。
比较这两个边际分布,他们的结果相同(可能的值和相应的概率),所以,可以认为 \(X =d Y\)。
条件分布
要理解两个变量之间的关系,必须检查每个变量的条件行为,并给出另一个变量的值。
为了实现这一目标,我们将首先检查前几节的简单示例,然后开发通用理论。
我们的例子是连续三次抛一枚硬币,其中 X 是三次中前两次抛硬币所出现正面的次数,\(Y\)是三次中后两次抛硬币所出现正面的次数,
X 和 Y 的联合分布和 2 个边际都显示在下表中。
joint_dist.both_marginals()
| X=0 | X=1 | X=2 | Sum: Marginal of Y | |
|---|---|---|---|---|
| Y=2 | 0.000 | 0.125 | 0.125 | 0.25 |
| Y=1 | 0.125 | 0.250 | 0.125 | 0.50 |
| Y=0 | 0.125 | 0.125 | 0.000 | 0.25 |
| Sum: Marginal of X | 0.250 | 0.500 | 0.250 | 1.00 |
给\(X\)一个特定的值\(x\),也就是说,假设抛三次硬币中的前 2 次有\(x\)次是正面的,我们可以计算出最后两次投掷中正面数量的条件分布。
在随机变量语言中,对于\(x\)的每一个值,随机变量\(Y\)在\(x =x\)的情况下有一个条件分布。我们可以得到这三个条件分布如下:
joint_dist.conditional_dist('Y','X')
| Dist. of Y | X=0 | Dist. of Y | X=1 | Dist. of Y | X=2 | Marginal of Y | |
|---|---|---|---|---|
| Y=2 | 0.0 | 0.25 | 0.5 | 0.25 |
| Y=1 | 0.5 | 0.50 | 0.5 | 0.50 |
| Y=0 | 0.5 | 0.25 | 0.0 | 0.25 |
| Sum | 1.0 | 1.00 | 1.0 | 1.00 |
我们可以从第一列开始来理解这张表。在第一列中,假设的条件是\(X=0\),也就是说,3 次投掷中前两次都是反面。
在这个情况下,\(Y\)的值不可能是 2,也就是说,既然 3 次中的前 2 次都是反面,那后两次再怎么抛也不可能都是正面。
这就是为什么你看到第一列最上面那行概率是 0 的原因。
在\(X=0\)的情况下,\(Y\)只能是 0 或 1,通过 Y 的值可以判断最后一次抛硬币的结果是正面还是反面。
这样就能解释为什么下面两格的概率为什么都是 0.5 了。
你可以用这个方法解决其他的概率问题。
但你不需要回到原来的结果来算出这些条件概率,只需使用示例开头显示的联合分布表和除法规则即可。
比如:
\(P(Y=1|X=0) = P(X=0,Y=1)/P(X=0)\) = 0.125/0.25 = 0.5
我们可以很容易看出为什么条件分布表中的每一列和为 1。一列中的每个单元格的值都是用联合分布表的相应单元格除以其列的和。
所以所有列的结果和也应该是 1。
理论部分
我们将推广我们在上面实例中所做的计算。
把\(X\)和\(Y\)定义为 2 个相同定义范围内的随机数。
设\(X=x\),\(Y=y\),则:
\(P(Y=y|X=x) = P(X=x,Y=x)/P(X=x)\)
因此,对于\(x\* (X)\)的固定值,在\(X =x\*\)是概率的集的情况下,\(Y\)的条件分布:
\(P(Y=y|X=x*) = P(X=x*,Y=y)/P(X=x*)\)
其中 y 的取值范围为 Y 所表示变量的所有值。x* 是 x 的特定值,是一个常数.
条件分布的概率和为 1
在分布中,所有概率的和是 1.如果想验证条件分布的正确与否,可以运用这个规则来判断。
通过对事件\({X=x*}\)的划分来找到\(P(X=x\*)\),根据 Y 的值则有:
\(P(X=x*) = ∑ all y P(X=x*,Y=y)\)
现在我们可以累加条件分布中给定$X=x* \(的\)Y\(值,看看结果是否为 1.
\)
∑ all y P(Y=y|X=x) = ∑ all y P(X=x,Y=y)/P(X=x)
= 1/P(X=x)∑ all y P(X=x,Y=y)
= 1/P(X=x)* P(X=x*)
= 1
$
更新分布
正如我们在学习贝叶斯规则时看到的,条件作用给了我们一种基于新数据更新观点的方法。
让我们看看如何使用条件分布来表示基于数据的随机参数。
例子:一个随机挑选的硬币
假设我有一个均匀的硬币和三枚质量有偏差的硬币。假设有质量偏差的硬币落地后正面朝上的概率是 0.9。
现在我水机挑选一枚硬币,投掷 2 次,然后告诉你正面朝上的次数。
你要怎么判断这枚硬币是否有质量偏差?
在我告诉你正面朝上的次数之前。你之前的观点可能是:硬币质量均匀的概率是 0.25,而质量有偏差的概率则为 0.75。
这个例子的目的是让我们更直观的体会到了解关于正面数量的信息是如何影响这个观点的。
设 R 为随机硬币落地的概率。\(R\)的可能值分别为 0.5 和 0.9, R 的先验概率分布如下表所示。
coins =[0.5,0.9]
prior = [0.25,0.75]
Table().values(coins).probability(prior)
| Value | Probability |
|---|---|
| 0.5 | 0.25 |
| 0.9 | 0.75 |
设\(H\)的值为两次抛币正面朝上的次数,
那么\(R\)和\(H\)的联合分布的形式为:\(P(R=r,H=h),r∈(0.5,0.9),h∈{0,1,2}\)
一共会有 6 种可能性。我们可以用乘法规则去计算它。
\(P(R=0.9,H=2)=P(R=0.9)P(H=2|R=0.9)\)=0.75* 0.9^2 = 0.6075
当\({H=1}\)发生的时候会有 2 种可能,先正后反或是先反后正。所以:
\(P(R=0.5,H=1)=P(R=0.5)P(H=1|R=0.5)\)=0.25[(0.5* 0.5) + (0.5* 0.5)] = 0.125
我们可以用同样的方法计算出当\(r\)和\(h\)为其他值时\(P(R=r,H=h)\)的值。
让我们用 python 试试,joint_probs函数以 r 和 h 为参数,可以返回 P(R=r,H=h)
def joint_probs(r, h):
"""Return P(R = r, H = h)"""
# Start with the distribution of the number of heads in two tosses
# of a coin that lands heads with a known chance r;
# these are the chances of h=0, h=1, and h=2
heads_2_tosses = make_array((1-r)**2, 2*r*(1-r), r**2)
if r == 0.5:
return 0.25*heads_2_tosses.item(h)
elif r == 0.9:
return 0.75*heads_2_tosses.item(h)
我们现在可以使用 prob140 方法来构造\(R\)和\(H\)的联合分布表,如联合分布一节所述。
回想一下,我们使用硬币,在构建 R 的先验分布之前:
coins,prior
([0.5,0.9],[0.25,0.75])
heads = np.arange(3)
joint_tbl = Table().values('R', coins, 'H', heads).probability_function(joint_probs)
joint_dist = joint_tbl.to_joint()
joint_dist
| R=0.5 | R=0.9 | |
|---|---|---|
| H=2 | 0.0625 | 0.6075 |
| H=1 | 0.1250 | 0.1350 |
| H=0 | 0.0625 | 0.0075 |
\(P(R=0.5,H=1)\)的值与我们直接计算的值一致。
让我们检查一下 R 的边际是否与一个均匀硬币和三个偏置硬币随机取硬币的假设一致。
没有关于正面数的信息,R 的分布应该是先验的。这正如我们在表格底部看到的。
joint_dist.marginal('R')
| R=0.5 | R=0.9 | |
|---|---|---|
| H=2 | 0.0625 | 0.6075 |
| H=1 | 0.1250 | 0.1350 |
| H=0 | 0.0625 | 0.0075 |
| Sum: Marginal of R | 0.2500 | 0.7500 |
现在假设我偷偷的随便取出一个硬币,抛两次,再告诉你它正面朝上的次数。给你\(H\)的值,你能告诉我\(R\)的值吗?
首先,一个好的主意是根据\(H\)的值去所有的条件分布里找到 R 的条件分布。
joint_dist.conditional_dist('R', 'H')
| R=0.5 | R=0.9 | Sum | |
|---|---|---|---|
| Dist. of R | H=2 | 0.093284 | 0.906716 | 1.0 |
| Dist. of R | H=1 | 0.480769 | 0.519231 | 1.0 |
| Dist. of R | H=0 | 0.892857 | 0.107143 | 1.0 |
| Marginal of R | 0.250000 | 0.750000 | 1.0 |
从下面一行往上读这张表。记住,硬币是随机挑选的。
- 如果我不告诉你正面的个数,你能告诉我的关于硬币的所有事情是有 25%的概率是公平的 75%的概率是有偏差的硬币。
- 如果我告诉你我得到了 0 次正面,你对硬币的看法就会发生戏剧性的变化而倾向于均匀硬币。偏差硬币没有正面的机会很小,所以即使其中一个很有可能被选中,数据也会使天平向均匀硬币倾斜。
- 如果我告诉你我有 1 个正面,你就有点为难了。偏差硬币产生 1 个正面的机会不大(18%),而均匀硬币产生 1 个正面的机会是 50%。但被选中的硬币有 75%的几率会有偏差,而公平的几率只有 25%。这两种效果的大小让你很不确定该向哪一种硬币倾斜。你只有一点点倾向于“偏见”。
- 如果我告诉你我得到了两个正面,你的观点就会戏剧性地转向有偏差的硬币。它们不仅很可能产生两个正面,而且很可能被选中。
根据数据更新你的观点
这是机器学习中经常出现的一个简单例子。
- 一开始你对一个未知的量有一个先验的观点。我们的先验分布是均匀硬币的概率是 25%
- 当你看到这些数据后,你对未知数量的看法可能会发生变化,有时会非常剧烈。这种变化既取决于可能性,也取决于先验。
- 然后,你可以再多抛几次,并根据新掷出的次数再次更新你的意见。
依赖和独立
条件分布帮助我们形式化了关于两个随机变量是否相互独立的直观概念。设 X 和 Y 是两个随机变量,假设已知 X 的值,这会改变我们对 Y 的看法吗?
如果答案是肯定的,那么我们会说 X 和 Y 是相关的。如果答案是否定的,不管 X 的给定值是多少,我们会说 X 和 Y 是独立的。
让我们从一些例子开始,然后转向精确的定义和结果。
依赖
这是两个随机变量\(X\)和\(Y\)的联合分布从这里,我们能说\(X\)和\(Y\)是相互依赖还是相互独立的?
dist1
| X=0 | X=1 | X=2 | X=3 | |
|---|---|---|---|---|
| Y=3 | 0.037037 | 0.000000 | 0.000000 | 0.00000 |
| Y=2 | 0.166667 | 0.055556 | 0.000000 | 0.00000 |
| Y=1 | 0.250000 | 0.166667 | 0.027778 | 0.00000 |
| Y=0 | 0.125000 | 0.125000 | 0.041667 | 0.00463 |
你可以马上看到,如果\(Y\)可以是 1 或 2。知道\(X\)的值会改变 y 的分布,这是依赖关系。
这里有一个例子,在这个例子中,您不能仅仅通过查看可能的值来快速确定依赖性或独立性。
dist2
| X=3 | X=4 | |
|---|---|---|
| Y=7 | 0.3 | 0.1 |
| Y=6 | 0.2 | 0.2 |
| Y=5 | 0.1 | 0.1 |
但是你可以通过观察\(Y\)在\(x\)下的条件分布来判断,它们是不同的。
dist2.conditional_dist('Y', 'X')
| Dist. of Y | X=3 | Dist. of Y | X=4 | Marginal of Y | |
|---|---|---|---|
| Y=7 | 0.500000 | 0.25 | 0.4 |
| Y=6 | 0.333333 | 0.50 | 0.4 |
| Y=5 | 0.166667 | 0.25 | 0.2 |
| Sum | 1.000000 | 1.00 | 1.0 |
它是这样的(你应该试着证明这一点),\(X\)的一些条件分布在\(Y\)的不同值下也会彼此不同,\(X\)的边际也会不同。
注意,并不是所有的条件分布都是不同的。\(X\)在\(Y=5\)时的条件分布与\(X\)在\(Y=6\)时的条件分布相同。但在\(Y=7\)的情况下,条件分布会改变。\(X\)和\(Y\)是相互依赖的。
dist2.conditional_dist('X', 'Y')
| X=3 | X=4 | Sum | |
|---|---|---|---|
| Dist. of X | Y=7 | 0.75 | 0.25 | 1.0 |
| Dist. of X | Y=6 | 0.50 | 0.50 | 1.0 |
| Dist. of X | Y=5 | 0.50 | 0.50 | 1.0 |
| Marginal of X | 0.60 | 0.40 | 1.0 |
独立性
这是一个联合分布表,在这个表中你不能立即判断是否存在依赖性。
dist3
| X=0 | X=1 | X=2 | X=3 | |
|---|---|---|---|---|
| Y=4 | 0.000096 | 0.000289 | 0.000289 | 0.000096 |
| Y=3 | 0.001929 | 0.005787 | 0.005787 | 0.001929 |
| Y=2 | 0.014468 | 0.043403 | 0.043403 | 0.014468 |
| Y=1 | 0.048225 | 0.144676 | 0.144676 | 0.048225 |
| Y=0 | 0.060282 | 0.180845 | 0.180845 | 0.060282 |
但看看\(X\)在\(Y\)上的情况。
dist3.conditional_dist('X', 'Y')
| X=0 | X=1 | X=2 | X=3 | Sum | |
|---|---|---|---|---|---|
| Dist. of X | Y=4 | 0.125 | 0.375 | 0.375 | 0.125 | 1.0 |
| Dist. of X | Y=3 | 0.125 | 0.375 | 0.375 | 0.125 | 1.0 |
| Dist. of X | Y=2 | 0.125 | 0.375 | 0.375 | 0.125 | 1.0 |
| Dist. of X | Y=1 | 0.125 | 0.375 | 0.375 | 0.125 | 1.0 |
| Dist. of X | Y=0 | 0.125 | 0.375 | 0.375 | 0.125 | 1.0 |
| Marginal of X | 0.125 | 0.375 | 0.375 | 0.125 | 1.0 |
所有的行都是一样的。也就是说,在 Y 的不同值下,所有 X 的条件分布都是相同的,因此也等于 X 的边际。
给定\(Y\)的值,\(X\)的概率不会改变。这就是独立。
你可从\(Y\)在\(X\)上的情况得到同样的结论。
dist3.conditional_dist('Y', 'X')
| Dist. of Y | X=0 | Dist. of Y | X=1 | Dist. of Y | X=2 | Dist. of Y | X=3 | Marginal of Y | |
|---|---|---|---|---|---|
| Y=4 | 0.000772 | 0.000772 | 0.000772 | 0.000772 | 0.000772 |
| Y=3 | 0.015432 | 0.015432 | 0.015432 | 0.015432 | 0.015432 |
| Y=2 | 0.115741 | 0.115741 | 0.115741 | 0.115741 | 0.115741 |
| Y=1 | 0.385802 | 0.385802 | 0.385802 | 0.385802 | 0.385802 |
| Y=0 | 0.482253 | 0.482253 | 0.482253 | 0.482253 | 0.482253 |
| Sum | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
独立的两个事件
独立的概念似乎是直观的,但如果不仔细定义它,可能会遇到很多麻烦。我们来正式定义一下。
对于两个事件的独立性有两个等价的定义。第一个封装了独立性的主要思想,第二个用于计算。
对于两个事件 A 和 B, 如果\(P(B|A)=P(B)\),我们可以认为它们是独立的。同样的,如果\(P(AB)=P(A)P(B)\),我们也能认为 A 和 B 是独立的。
两个随机变量的独立性
我们在本节示例中所观察到的内容可以转化为独立性的正式定义。
对于 2 个随机变量\(X\)和\(Y\),如果对于每一个 X 的值 x 和 Y 的值 y 都有:\(P(Y=y|X=x)=P(Y=y)\),则 X 和 Y 是独立的。
无论给定的 x 是什么,我们都能确定 Y 的条件分布。
关于事件独立性的一个等价定义是,对于 x 和 y 的任何值,事件\({x =x}\)和\({y =y}\)是独立的。
对于 2 个随机变量\(X\)和\(Y\),如果对于每一个 X 的值 x 和 Y 的值 y 都有:\(P(Y=y,X=x)=P(X=x)P(Y=y)\),则 X 和 Y 是独立的。
独立性简化了乘法规则中的条件概率.
事实上,如果\(X\)和\(Y\)是独立的随机变量,那么由\(X\)决定的任何事件都独立于由 Y 决定的任何事件,例如,如果\(X\)和\(Y4 是独立的,\)X\(是一个数字,那么\){X= X}\(独立于\){Y> X}\(。同样,\)X$的任何函数都独立于 Y 的任何函数。
你可以通过划分和独立的定义来证明这些事实。这些证明是常规的,但有点累。如果你不想证明事实,你可以接受事实。
相互独立
事件 A1、A2、……a 是相互独立的(或简称独立的),如果给定事件的任何子集已经发生,那么所有其他子集的条件概率保持不变。
这看起来有点拗口。实际上,这意味着你知道发生了什么并不重要;其余事件发生的几率不变。
随机变量的 n 项,X1,X2,…,Xn 是独立的,如果给定任意子集的值,其余变量决定事件的概率不变。
在实践中,这只是形式化的陈述,如“不同硬币的抛掷结果是独立的”或“随机抽取与替换是独立的”。
不要被形式主义所束缚。注意到理论不仅支持直觉,而且发展了直觉。你可以期待你的概率直觉在这门课结束时比现在更清晰!
"i.i.d." 随机变量
如果随机变量相互独立且分布相同,它们就被称为“i.i.d”。这是概率论中最著名的缩写之一。你可以把 i.i.d.随机变量看作是人口替换的结果,或者是同一实验的独立复制的结果。
假设 X 的分布有: \(P(X=i)=Pi,i=1,2,3...,n\)
且它们累加的结果为 1。
现在设 X 和 Y 是 i.i.d, \(P(X=Y)\)是多少?我们将用基本方法来回答这个问题,现在用随机变量符号。
\(P(X=Y) = Σn,i=1 P(X=i,Y=i) = Σn,i=1 P(X=i)P(Y=i) = Σn,i=1 Pi*Pi = Σn,i=1 Pi^2\)
如果你知道 Pi 所有的值,最后一个表达式其实很好计算。
同样的方法:
因为\(P(Y>n)=0\)
\(P(Y>X) = Σn,i=1 P(X=i,Y>i)
= Σn,i=1 P(X=i)P(Y>i)
= Σn-1,i=1 P(X=i)P(Y>i)\)
现在对于每个\(i<n\),\(P(Y>i)=P(X>i)=Σn,j=i+1 Pj\).
设这个和为 Bi , 表示大于 i 的数。则:
\(P(Y>X) = Σn-1,i=1 P(X=i)P(Y>i)
= Σn-1,i=1 Pi* Bi\)
如果你知道所有的 Pi 的值,其实这就是一个简单的计算。
把 n=4 带入,得:\(P1*(P2+P3+P4)+P2*(P3+P4)+P3* P4\)
五、事件集合
数据科学中的大多数问题涉及多个变量和事件。 随机变量及其联合分布为我们提供了一种方法来建立我们数据来源的概率模型。 某些技术对于处理大量变量和事件特别有用。它们包括:
在精确值难以计算时使用边界
使用小型集合时注意模式,然后推广到较大的集合
使用对称性,既可以观察也可以简化计算
在本章中,我们将研究所有这些技术的有力例子。
# 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()

我们可以通过分区找到 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 为事件,则布尔不等式:
也就是说,至少一个事件发生的可能性不大于发生概率的总和。
我们已经讨论了为什么 n = 2 时不等式是正确的。一般来说,不等式可以通过数学归纳来证明,这当做个练习留给您。
对于每个 k,由于
,我们也有个下限:

所以

例如,如果天气预报显示星期六下雨的几率是 40%,而星期日下雨的几率是 10%,那么在这两天的某个时间点降雨的可能性至少为 40%,最多 50%。
为了准确地找到机会,你需要在两天都下雨的机会,这是你没有的。假设独立在这种情况下似乎不是一个好主意。 因此,您无法计算确切的答案,并且必须满足边界。(有问题,待斟酌)
虽然边界不是精确答案甚至是近似值,但它们非常有用。 以下是 Boole 不等式在数据科学中的常见用法示例。 它附有 Bonferroni 的名字,因为 Boole 和 Bonferroni 都有关于工会概率的相关界限。
Bonferroni 方法
假设您基于随机样本估计五个参数,并且对于每个参数,您有一个方法可以产生具有任何预先指定概率的良好估计。例如,如果估计值 99%可以保证很好,那么你就有办法做到这一点。
现在假设你希望你的估计是这样的,95%那五个都是好的。你该怎么办?
只有 95%的概率才能使每项评估成为可能。如果你这样做,他们一切都好的可能性将低于 95%,因为“一切都很好”的事件是每个事件的一个子集“估计我是好的”。
布尔不等式可以帮助你弄清楚该怎么做。
让 A1成为 Estimate i 很好的事件。 你想要 P(A1A2A3A4A5)= 0.95。 但现在你被卡住了,因为你可以控制的只是 P(A1),P(A2),P(A3),P(A4)和 P(A5)。 您可以将它们中的每一个都设置为您想要的大小,但是你不知道它们与交叉的可能性有何关系,因为这五个估计是相关的。它们都基于相同的样本。
你可以通过查看“所有五个都很好”事件的补充来解决这个问题。 补充是“至少一个是坏的”,这是事件的结合“Estimate i 是坏的”。 你的条件是
总和中的每个项都是相应估计值不是很好的概率。你希望这些概率很小。但是由于上面的计算,你也希望它们足够大,以便它们的总和至少为 0.05。
一种方法是使它们中的每一个等于 0.05 / 5 = 0.01,即 1%。 换句话说,你必须构建每个估计值,以便偶然发现 99%(例如,通过构建 99%的置信区间)。 这被称为 Bonferroni 同时推理方法。
Bonferroni 方法表明,如果你构建五个估计值中的每个估计值,以便有机会获得 99%,那么所有五个估计值都是好的几率至少为 95%。
您可以将 95%替换为任何其他阈值并再次执行计算,以查看单个估计值的好坏程度,以便它们同时具有超过阈值的机会。
5.2 容斥
虽然我们已经确定了 n 个事件结合的概率,除非在 n = 2 的情况下,我们还没有确切机会的公式。对于 n = 2,我们有
n 个事件集合
让我们看看我们是否可以通过应用我们对两个事件的并集的了解来猜测更大的 n 的公式。
一种清晰的形式正在出现!如果我们有一些粗略和准备好的描述,那么将它们写出来会更容易。(XXX)
重要的是要注意,集合“1≤i<j≤n”指定所有无序的不同索引对。 如果索引是不同的,则其中一个必须小于另一个,因此它是指示集的一部分。 如果 i 和 j 在集合中,则 i <j,因此 i 和 j 是不同的。
以相同的方式,1≤i<j <k≤n 指定不同指数的所有无序三元组。以此类推。
高斯
根据我们在三个事件中看到的情况,我们将猜测 n 事件结合的可能性可以通过计算得出
包括所有事件的概率
排除所有双交叉点的概率
包括所有三重交叉点的概率
排除所有四重交叉点的概率; 以此类推。
一般包含 - 排除公式
对于事件 A1,A2,...,An,

如果你感到疑惑,你可以通过归纳证明这一点; 对于 n = 3 的情况,只需执行类似于上述步骤的步骤。 我们将在后面的章节中用不同的方法证明该公式。
现在,让我们接受并继续前进。
每个总和中的项数
要结束该部分,我们将计算包含 - 排除公式中每个总和中的术语数,因此我们知道应用它所需要完成的工作的范围。
这是再次参考的公式:

显然,第一个总和中有 n 个项。由于下一步将要清楚的原因,我们将其写为:

在第二个总和中,这些项数对应于从索引 1 到 n 中选择的不同的无序对。这个数字是

在第三个总和中,项数是三个组的数量

以此类推。
这表明在包含 - 排除公式中添加和减去了很多项。
但有时我们很幸运,许多项数都是相等的。然后简化了总和了。这有一个漂亮的例子,请继续阅读。
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)!次置换。
所以

请注意答案中没有 i。 无论你修复哪个位置,在该位置匹配的机会是 1 / n。 这形象化了直观的概念,即每个字母同样可能落入任何包络中,因此它落入匹配包络的机会是 1 / n。
现在修复任何一对位置 i≠j。要找到 P(在位置 i 和 j 处匹配),请扩展我们上面使用的方法:
将信件 i 放在信封 i 中,将信件 j 放入信封 j 中。
完成后,剩余的 n-2 封信进行(n−2)!次置换。
所以

通过归纳检验 k = 1,2,...,n,

无匹配情况
如果落在右边信封中的信件是好事件,则最糟糕的事件是每个信件都落在错误的信封中。这是没有匹配的事件,被称为紊乱。让我们找到紊乱的情况。
关键是要注意补充是一个联合,然后使用包含 - 排除公式。

事件 Ai与“位置 i 匹配”。
通过包含 - 排除公式和我们上面的计算,

如果这些款项看起来很令人毛骨悚然,那就再看看。 所添加的术语都没有索引(i,j 等)! 每个和包括多次添加常数值,因此等于总和中的项数的常数乘积。
第一个求和公式项数为 n,第二个求和公式的项数是

第三个求和公式的项数

以此类推

记住这点

所以紊乱的概率是(当 n 很大时)

在随机变量的语言中,令 Mn为 n 个元素的随机排列中的固定点(匹配)的数量。 然后,对于每个 n≥1,我们有一个确切的公式,表明 Mn为 0:

当 n 很大时,我们也有一个近似值:

粗略地看,当 n 很大时,n 个元素的所有排列中约 36.8%将所有元素移离其原始位置。
k 匹配
5.4 无替换抽样
考虑一组标记为$$1, 2 \ldots , n$$的$$n$$个个体。 在没有替换的情况下随机抽取的结果是所有元素的随机排列。 当您尝试评估两个样本是否来自相同的基础分布时,您在 Data8 中使用了随机排列。
让我们来思考$$(X_1, X_2, \ldots , X_n)$$的排列。对于任何 $$i_1, i_2, \ldots , i_n$$ 的 1 到 n 的排列,$$P(X_1 = i_1, X_2 = i_2, \ldots, X_n = i_n) = \frac{1}{n!}$$
注意,右边并不只是依赖于左边这种排列,参数$$X_1, X_2, \ldots , X_n$$是可变的。
相似性
对每个固定的 i,第 i 个参数 Xi 是一个 1 到 n 之间的整数。为了找到 Xi 的边缘分布,我们需要找到从 1 到 n 的每个 k 对应的 P(Xi=k)值,由于所有排列具有相同的可能性,即
使用一种现在很普遍的方法,把 k 放在 i 的位置上,让剩下 n-1 个元素随意排列,对于每个 i 而言,从 1 到 n 的 Xi 的分布都是一样的。
对于任意 2 个参数 i 和 j 而言,
同样的,右边概率的取值并不需要左边的 i 和 j 取特定值。
我们早在匹配问题中就见过这种概率值的问题。在那个问题中,我们找到了匹配后的概率值,比如$$P(X_i = i, X_j = j)$$。但答案并不取决于 i 和 j 的取值,只有在考虑两个方向时他们的值才会起作用。同理,在我们当下研究的这个问题中也是一样的。
范例:洗牌整齐的牌堆
假设洗完了一副标准扑克牌,所有排列组合的可能性都是一样的。
问题一:第 17 张牌是 A 的可能性有多大?
回答一.根据我们上面的计算,第 17 张牌可能是 52 张牌中的任意一张。里面有四张 A,所有概率值为 4/52。
同理,第 1 张牌或者第 32 张牌是 A 的可能性都为 4/52。根据相似性,所有这些非条件性的边缘分布的概率值都是相等的。如果这听起来很神秘的话,想象一下把发好的牌列首尾相连,你就挑不出哪张是第 1 张牌,哪张是第 17 张牌了。
问题二:如果第 32 张牌是 A,那么第 17 张牌是 A 的可能性有多大?
回答 2.根据我们上面计算的 Xi 和 Xj 的联合分布,答案是 3/51。如果换成第 2 张牌是 A,答案相同。
简单随机样本
简单随机样本是随机抽取的样本,不需要从有限总体中进行替换。样本是总体的一个随机子集,而不是总体的重新排布。如果你从 52 张标准扑克牌中抽取一份 5 张的随机样本,那么那么你拿到的就是子集的五张牌。这五张牌可以按任何顺序出现在你手里,但顺序无关紧要。重要的是这五张牌的集合。
为了找出你手上拿到特殊子集的五张牌的概率,首先得数出这五张牌如果不考虑顺序会有多少种组合数。
这五张牌总共有 52×51×50×49×48 种顺序。
为了得到这 5 张牌的图书组合,把其中一张放在位置 1;第 1 张牌可以有 5 个选择。然后再挑 1 张放在位置 4,以此类推。
所以出现特定牌组的概率是$$ \frac{5 \times 4 \times 3 \times 2 \times 1}{52 \times 51 \times 50 \times 49 \times 48} = \frac{5! 47!}{52!} = \frac{1}{\binom{52}{5}} $$。
这表明,在没有替换的情况下随机一张接一张地发 5 张牌, 相当于洗牌和抽出 5 张牌。
在 scipy 里的 misc 模块允许你计算出这些组合项。
from scipy import misc
misc.comb(52, 5)
2598960.0
有将近 260 万种组合。那是一个很大的数字。这有助于我们建立一个理论来理解这个问题以及其他的简单随机样本。在下个部分,我们会建立这个理论。在计算出从总体中抽出的简单随机样本的数量后,我们会结束这个部分。
假设有一个大小为$$N$$的总体(一个确定整数,而非一个随机变量),你想从中抽取一个大小为$$n \le N$$的简单随机样本。你能得到多少不同样本?
我们假设那个“样本”是$$n$$个个体的集合,可以以任何顺序出现。这就和扑克牌很像了。
简单随机样本的数量
一个类似的论点告诉我们简单随机样本的数量为$$ \binom{N}{n} $$,他们出现的可能性相同。
在一个简单随机样本中计算出好的元素
如果一个整体由两类个体组成,这两类按照惯例会被称为“成功或失败”或者“好和坏”。在这里“好”几乎总是代表着你在计算的个体的种类。例如,如果你在尝试数出在一场选举中一个特定的候选人有多少支持者,无论你抱有何种政治观点,那一类的支持者都会被标记成“好”。
假设一个总体为$$N$$的个体包含$$G$$个好的个体,你从中抽取一个大小为$$n$$的简单随机样本。有多少样本会包含$$g$$个好的元素?
包含$$g$$个好个体的样本数量可以通过乘法法则计算得出:
在整体中,从$$G$$个好个体中选出\(g\)个好个体。你有$$\binom{G}{g}$$种做法。
对于这些有$$g$$个好个体的每个选项而言,你总共有$$\binom{N-G}{n-g}$$个坏个体的选项。
所以包含$$g$$个好个体的样本总数是$$ \binom{G}{g}\binom{N-G}{n-g} $$个。
这些被称为超几何分布,因为这些公式和数学中的超几何序列有关。我们在这个课程中不会解决相关序列的问题,但我仍然可以使用这个令人印象深刻的名词。我们会在稍后的课程中涉及更多的相关的概率的问题。
技术笔记
如果你很谨慎的话,你需要通过尝试找出哪些价值为$$g$$来开始,这是应该在这里被考虑到的事情。因为这是在样本中好的元素的个数,我们知道$$g \le \min(n, G)$$。通过考虑样本中坏的元素的个数,我们知道$$n-g \le \min(n, N-G)$$,因此$$g \ge \max(0, n-N+G)$$。
但你其实不用担心这些技术细节。在计算不可能选项时,仅仅只需定义$$\binom{a}{b}$$为 0。比如$$\binom{5}{10}$$或者$$\binom{6}{-4}$$。如果在样本中得到$$g$$个好的元素是不可能的,那么用来计算概率为$$g$$的好的元素的超几何的算式会得到结果为 0。
六、随机计数
原文:prob140/textbook/notebooks/ch_6
译者:viviwong
自豪地采用谷歌翻译
本章所需 python 包
# 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
随机计数
随机计数构成了一类随机变量,它们在概率论中具有根本重要性。你已经看到了一些示例:\(n\)个元素的随机排列中的匹配个数(固定点数)就是一个“随机计数”的示例,简单随机抽样中的有效元素的个数也是如此。
一般情况是有许多次试验,每次试验都可能成功或失败。随机计数是所有试验中的成功的次数。
随机分布成功的次数取决于随机性的基本假设。在本章中将研究独立的、同分布的随机试验。匹配问题和简单随机抽样都不适合这个框架。但是,在某些条件下,将看到参数可以通过独立试验来近似地接近这两种情况。
最后,当试验次数本身是随机时,将发现随机计数的一些显著特性。数据科学包括许多基于随机化参数的强大方法。
从最简单的随机计数开始,即一个只有是 0 或 1 的计数。
指标和伯努利 \((p)\) 分布
考虑只有一次成功或一次失败的试验。因此,成功次数\(X\) 是 0-1 值随机变量,并且说它是具有伯努利 \((p)\) 分布,其中\(p = P(X = 1)\)是它成功的概率。
这个非常简单的随机计数\(X\)被称为试验成功的指标。
这是具有伯努利\((1/3)\)分布的随机变量\(X\)的概率直方图。
bern_1_3 = Table().values([0,1]).probability([2/3, 1/3])
Plot(bern_1_3)
plt.xlabel('Value of $X$')
plt.title('Bernoulli (1/3)');

计数就是数数添加 0 和 1
考虑\(n\)次试验,对于\(1 \le i \le n\),\(X_i\)是衡量第\(i\)次试验成功的指标。
求和\(S_n = X_1 + X_2 + \cdots + X_n\)是\(n\)次试验中的总成功次数。例如,如果\(n=3\)且\(X_1 = 0\),\(X_2 = 0\),\(X_3 = 1\),在三次试验中有一次成功,\(S_3 = 1\)。当你增加试验次数时,计数在\(X_i = 0\)的每个\(i\)处保持不变,计数在\(X_i = 1\)的每个\(i\)处增加 1 。
首先假设所有的\(X_i\)都是独立同分布的。也就是说,试验是相互独立的,并且在所有试验中,成功的机率是固定的。
为了加深这个例子在你脑海中的印象,把这些试验想象成有 7 个骰子,让\(X_i\) 表示第\(i\)次获得点数 6。每个\(X_i\)都服从伯努利\((1/6)\) 分布,所有\(X_i\)都是相互独立的。它们的总和\(S_7\) 是 7 次实验中出现 6 的次数。
二项分布
设\(X_1, X_2, \ldots , X_n\)为独立同分布的伯努利\((p)\)随机变量,\(S_n = X_1 + X_2 \ldots + X_n\)。正式的说法为:
- 假设试验成功/失败的总数固定为\(n\);
- 每次试验相互独立;
- 每次试验成功的概率为 \(p\).
- \(S_n\) 是总的成功次数.
本节的首要目标是找出\(S_n\)的分布。
在之前已经解决过的例子中,我们学会计算 7 个骰子中获得数字 6 的次数。 7 个骰子彼此独立,每次试验“成功”(获得数字 6)的机会是\(1/6\),\(S_7\)是出现数字 6 的次数。
任何随机变量找到其分布的第一步是找出变量所有可能的取值。在\(n\)次试验中,获得数字 6 的最小可能次数为 0,最大可能次数为 \(n\)。因此,\(S_n\)可能值的集合是\(\{0, 1, 2, \ldots , n\}\)。
因此,7 个骰子获得数字 6 个数可以是 0 到 7 范围内的任何整数。计算\(P(S_7 = 3)\)。
事件\(\{S_7 = 3\}\)发生的不同情形。一种方式可以为 SSSFFFF,其中 S 表示“成功”(或掷出“六”),F 表示失败。另一种是 SFFSSFF。等等。
现在注意到
由于是独立事件,任何顺序的三个 S 和四个 F 具有相同的概率。所以通过加法则,
因为\(\binom{7}{3}\) 算式,表示为从 7 个位置中选择 3 个位置,放置符号 S,其余 4 个位置用 F 填充。
类似的论证得出概率论中最重要一个分布。
二项 式\((n, p)\) 分布
设\(S_n\)是\(n\)次独立伯努利\((p)\)试验中的成功次数。\(S_n\)满足参数\(n\),\(p\)的二项式分布,定义如下
Parameters of a distribution are constants associated with it. The Bernoulli \((p)\) distribution has parameter \(p\). The binomial distribution defined above has parameters \(n\) and \(p\) and is referred to as the binomial \((n, p)\) distribution for short. You should check that the Bernoulli \((p)\) distribution is the same as the binomial \((1, p)\) distribution.
分布中的参数是与之相关的常量。伯努利\((p)\)分布有参数\(p\)。上面定义的二项式分布具有参数\(n\)和\(p\),并且简称为 B\((n, p)\)二项分布。可以看出\(p\)的伯努利分布是与 B\((1, p)\)二项分布同分布的。
在开始使用二项分布进行计算之前,观察一下。
- 概率的函数形式在表示成功和失败时是对称的,因为
这是“总的试验次数的阶乘\(n!\);除以成功次数的阶乘\(k!\)除以失败次数的阶乘\((n-k)!\);乘以成功概率的成功次数次方;乘以失败概率的失败次数次方。”
- 该公式对两端情况 \(k=0\)和\(k=n\)也是有意义的。可以在没有上面公式的情况下计算\(P(S_n = 0)\)。没有一次成功,所有的都失败,即\((1-p)^n\)。公式如下
在公式中考虑所有的因素;前两个因子都是 1.可以得出\(P(S_n = n) = p^n\),即所有试验成功的可能性。
请记住定义\(0! = 1\)。在某种程度上,\(\binom{n}{k}\)公式能正确地表示\(k=0\)时的情形。
- 概率分布的总和为 1.为了清楚认识这点,回想一下任何两个数字\(a\)和\(b\),
通过\((a+b)^n\)的二项式展开。数字 \(\binom{n}{k}\)是帕斯卡三角形项,和在数学课上看到的一样。
替换 \(a = p\)和\(b = 1-p\)并注意总和中的项恰好是我们在上面定义的二项式概率。因此概率的总和是
Python 中的二项式概型
SciPy是一个基于 Python 的科学计算库。 scipy的stats子模块在概率和统计上进行了大量计算。现在,在每个代码的开头导入它。
from scipy import stats
函数stats.binom.pmf按顺序传入三个参数:\(k\),\(n\)和\(p\)。它返回\(P(S_n = k)\)的数值,简言之,该函数返回\(k\)的二项式\((n, p)\)概型
缩写“pmf”代表“概率质量函数”,正如前面提到的,它是有限多值变量分布的另一种叫法。
通过二项式公式,7 个骰子中选出 3 个 6 的概率是\(\binom{7}{3}(1/6)^3(5/6)^4\),通过下面计算得出概率约为 8%。
stats.binom.pmf(3, 7, 1/6)
0.078142861225422938
给\(k\)值传入数组或列表,stats.binom.pmf将返回包含其所有概率的数组。
stats.binom.pmf([2, 3, 4], 7, 1/6)
array([ 0.23442858, 0.07814286, 0.01562857])
因此,要得出\(P(2 \le S_7 \le 4)\)的概率,可以使用
sum(stats.binom.pmf([2, 3, 4], 7, 1/6))
0.32820001714677649
二项式直方图
为了可视化二项式分布,使用prob140模块中的 Plot方法,首先使用 stats.binom.pmf来计算二项式概率。下面的图表绘制出\(S_7\)的分布。请注意如何从数组k中计算出\(S_7\)的所有可能取值概率。
n = 7
p = 1/6
k = np.arange(n+1)
binom_7_1_6 = stats.binom.pmf(k, n, p)
binom_7_1_6_dist = Table().values(k).probability(binom_7_1_6)
Plot(binom_7_1_6_dist)

毫无疑问,图表显示,掷 7 个骰子,得到 6 个 1 的可能性最大。
正如所料,这个分布是不对称的。但是当增加骰子个数时,出现数字 6 次数的分布上会发生一些有趣的事情。
n = 600
p = 1/6
k = np.arange(n+1)
binom_600_1_6 = stats.binom.pmf(k, n, p)
binom_600_1_6_dist = Table().values(k).probability(binom_600_1_6)
Plot(binom_600_1_6_dist)

这个分布接近于对称,尽管每个骰子出现数字 6 的概率只有 1/6。
另外注意,虽然掷一百次的可能取值范围从 0 到 600,但实际中可能取值在更小的范围。plt.xlim函数允许我们放大可能值的范围。下面代码中分号是为防止 Python 给出一个混乱图形。edges=True选项强制 Plot 绘制条形分隔线条;默认情况下,如果条形数量很大,它会停止这样做。
Plot(binom_600_1_6_dist, edges=True)
plt.xlim(70, 130);

但是,当\(n\)很大,二项式 \((n, p)\)分布是看起来不总是像钟形。
如果随机变量是 600 次独立试验中成功的次数,那么就会发生一些完全不同的事情,每次试验的成功率为 1/600。成功次数的分布是二项式\((600, 1/600)\),如下所示:
n = 600
p = 1/600
k = np.arange(n+1)
binom_600_1_600 = stats.binom.pmf(k, n, p)
binom_600_1_600_dist = Table().values(k).probability(binom_600_1_600)
Plot(binom_600_1_600_dist)

确实看不到这个图形!放大。当水平轴上设置坐标值时,考虑条形图以 0 为中心,-0.5 为起始点。
Plot(binom_600_1_600_dist, edges=True)
plt.xlim(-1, 10);

600 次独立试验,每次试验成功的概率为 1/600,最大的概率是没有成功或 1 次成功。还可能获得 2-4 次成功,但是任何超过 4 次成功的概率在图表的范围内几乎看不到。
显然,直方图的形状由\(n\)和\(p\)确定。在接下来的部分将仔细研究图形形状。但首先看一些使用二项分布的数值例子。
实例
在本节中,将在各种情况下使用二项分布。公式和代码足够简单。必须记住的是二项分布有效的前提条件。它是这样的分布:
- 事件发生(成功)的次数
- 独立试验次数已知
- 每次试验都有相同的成功概率。
因此,不要将它用于扑克牌无放回的抽取 A 的情形
示例 1:随机数生成器
随机数生成器随机重复生成 10 个数\(\{0, 1, 2, 3, 4, 5, 6, 7, 8, 9\}\)。
问题 1. 生成器运行 20 次。找出 0 出现两次以上的概率。
回答 1.
- 是否看到有事件发生?有的,0 表示“事件发生(成功)”。
- 独立试验次数已知?是的,\(n = 20\),并且随机事件是可以重复发生的。
- 每次试验的成功概率是否相同?是的,\(p = 0.1\)。
两种等价的解答:
如果手动完成数值计算,会发现第二种方式更快。但你不会这样做。你宁愿:
sum(stats.binom.pmf(np.arange(3, 21), 20, 0.1))
0.32307319481053343
或者,等价于,
1 - sum(stats.binom.pmf(np.arange(3), 20, 0.1))
0.32307319481053431
问题 2. 一个班级有七个助教和导师。他们相互独立的运行随机数生成器 20 次。最多 3 个人获得两次 0 的几率是多少?
回答 2. 不能将此视为一组,即一共运行\(7 \times 20 = 140\)次生成器,必须分别跟踪这 7 组 20 次运行中的每一组的情况。
那么现在什么是“试验”?是一名班级教员:助教或导师。一共有 7 个,其结果彼此独立。“事件发生(成功)”意味着“在 20 次运行中得到两个 0” 。希望获得最多三次成功的概率。
We're all set to use the binomial: \(n = 7\), \(k = 0, 1, 2, 3\), and \(p\) is the probability of getting two 0's in 20 runs. Hence
使用二项式: \(n = 7\), \(k = 0, 1, 2, 3\),而\(p\)是在 20 次运行中获得两个 0 的概率。于是
p = stats.binom.pmf(2, 20, 0.1)
sum(stats.binom.pmf(np.arange(4), 7, p))
0.89236130614839881
用数学公式,表示如下
示例 2: 正面和反面
抛硬币 10 次。
问题. 至少有 3 次正面和至少 3 次反面的概率是多少?
回答. 处理任何分布的第一步:确定事件发生可能值得集合。
出现 3 次,4 次,5 次,6 次和 7 次正面,现在答案很明显:
计算如下
sum(stats.binom.pmf(np.arange(3, 8), 10, 1/2))
0.89062500000000089
\(P(H \ge 3)\)是至少出现三次正面的概率,其中 \(H\)表示正面朝上,通过计算\(P(H \ge 3)\)来解决这个问题,但是这种计算方法是有问题的。为什么呢,\(T\)为 10 次投掷中的反面次数。然后
第一个概率很容易算出,但第二个概率根本不清楚。它不是\(P(T \ge 3)\),因为\(H\)和\(T\)并非独立:\(T = 10 - H\)。
示例 3: 当事件发生情况下的条件分布
已经掷了 24 次骰子。
问题. 掷骰子 24 次,出现一次 6 的条件下,在哪个位置出现“6”的概率分布。
回答. R 代表第几次出现 6 的事件,\(S\)为掷 24 次骰子中 6 出现的总次数。给定\(S = 1\),希望得到\(R\)的条件分布。
尝试找出概率分布时,始终从其可能的取值开始。出现 1 次 6,所以\(R\)可以是 1-24 范围内的任何值。
对于 \(k = 1, 2, \ldots 24\),
请注意解答中缺少\(k\)。得到了 1 次数字 6,所以数字 6 个出现的位置是均匀分布。
超几何分布
前面已经看过超几何概率。在本节中,将使用它们来定义随机计数的分布,并研究其与二项分布的关系。
作为对超几何的回顾,假设总数为定值\(N\),由这\(N\)个个体构成的某些特定组。称之为“成功”或“好元素”。例如,可能是以下内容:
- 选民群体,包括投票给特定候选人的群体
- 家庭群体,包括年收入低于 50,000 美元的群体
- 一副扑克和一套钻石
设\(N = G+B\) ,其中\(G\)是好元素的数量,\(B\)是不好地被描述为“坏”的剩余元素数量。
现在假设从总体中获取\(n\)个元素的简单随机样本(SRS)。
简单随机样本(SRS)中的好元素数量
设\(X\)是样本中好元素的个数。 那么\(X\)的分布是什么呢?
最大的\(X\)是\(\min(G, n)\)。最小的\(X\)是 0,但如果严谨一些,会发现实际上\(X\)不能小于\(\max(0, n-B)\)。
设\(g\)为\(X\)的可能值。然后,由于所有\(\binom{N}{n}\)样本都具有相同的可能性,
这就是超几何分布,总体大小\(N\),好元素的数量或“成功”数量为\(G\),样本大小为\(n\)。该名称源于这样一个事实,即术语是超几何系列中的系数,本课程中不会涉及这部分。
示例:五张牌扑克牌中 A 的数量
五张牌扑克牌中 A 的数量\(N_a\)具有超几何分布,总体大小为 52,总体中有四个好元素,随机样本量为 5。
使用stats.hypergeom.pmf函数计算超几何概率。第一个参数是所求概率的可能集值。后面的参数依次为,总体大小,好元素数量,简单随机样本大小。
k = np.arange(5)
N = 52 # 总体大小
G = 4 # 总体中良好元素的数量
n = 5 # 简单随机样本大小
stats.hypergeom.pmf(k, N, G, n)
array([ 6.58841998e-01, 2.99473636e-01, 3.99298181e-02,
1.73607905e-03, 1.84689260e-05])
这是扑克手中所有不同数量的 A 的概率。它们阅读起来有些困难,所以尝试四舍五入。
np.round(stats.hypergeom.pmf(k, N, G, n), 3)
array([ 0.659, 0.299, 0.04 , 0.002, 0. ])
5 张卡中的 A 出现的概率只可能是 0 或 1.可以使用Plot绘制分布的直方图。
ace_probs = stats.hypergeom.pmf(k, N, G, n)
ace_dist = Table().values(k).probability(ace_probs)
Plot(ace_dist)
plt.title('5 张牌中的 A 的数量');

桥牌中的红桃
以下是 13 张桥牌中红牌的数量分布:
k = np.arange(14)
N = 52
G = 26
n = 13
bridge_probs = stats.hypergeom.pmf(k, N, G, n)
bridge_dist = Table().values(k).probability(bridge_probs)
Plot(bridge_dist)
plt.title('13 张牌中的红牌数');

这个看起来很像二项式。事实上,二项式和超几何分布之间存在密切关系。
与二项式的关系
假设有如上所述的总体\(N = G+B\)个元素,重复进行了\(n\)次采样。然后,样本中的好元素的数量具有参数\(n\)和\(G/N\)的二项分布
如果在不放回的情况下进行抽样,那么好元素数量的分布是超几何的\((N, G, n)\)。
两种抽样之间唯一区别是随机化:有无放回的抽样。
如果总体\(N\)远远大于样本数\(n\),那么无论是放回还是没有放回区别不大。如果在抽样时只取出了很小一部分总体,那么对总体中的概率没有明显影响。
为了验证这个结论,通过计算来实现,绘制一些超几何分布和相应的二项式分布。更改以下代码中的参数。只要确保\(n\)远远小于\(N\)。
N = 100
G = 30
n = 10
k = np.arange(n+1)
hyp_probs = stats.hypergeom.pmf(k, N, G, n)
bin_probs = stats.binom.pmf(k, n, G/N)
hyp_dist = Table().values(k).probability(hyp_probs)
bin_dist = Table().values(k).probability(bin_probs)
Plots('Hypergeometric (100, 30, 10)', hyp_dist, 'Binomial (10, 0.3)', bin_dist)

它们非常接近,但是可以看出超几何分布更高更窄。在后面的章节中,将量化这种收窄的速度。
费希尔精确检验
回想一下在Date 8中分析的随机对照实验。肉毒杆菌毒素 A 一种非常有效的毒素,用于治疗患有慢性背痛的患者。
一共有 31 名患者参与了该研究。其中,15 名随机分配到治疗组,其余 16 名随机分配到对照组。治疗 8 周后,治疗组 15 例中有 11 例疼痛缓解,而对照组 16 例中有 2 例疼痛缓解。
换句话说,在 13 名背痛缓解的患者中,11 名在治疗组中,2 名在对照组中。这是否有利于治疗?
零假设认为治疗没有起到任何作用;两组之间的差异完全是由于患者被随机分配而导致病情被治疗和控制。
另一种假设认为治疗是有益的。
在零假设下,治疗没有起到任何作用,参与研究的 31 名患者,无论被分配到哪组,其中的 13 名患者都会有疼痛缓解。
为了求证数据更好地支持哪些假设,找到 P 值。在零假设下,就是一个概率,获取数据例如观察到的数据,甚至更多的数据。也就是说,P 值是在治疗组中获得 11 名或更多“疼痛缓解”患者的概率,只是概率。
为了找到 11 个或更多“疼痛缓解”患者最终在治疗组中出现的可能性,我们需要一个超几何概率:
- N = 31,患者数量
- G = 13,“疼痛缓解”患者的总数
- n = 15,治疗组的大小
- g = 11 或更高
sum(stats.hypergeom.pmf([11, 12, 13], 31, 13, 15))
0.00082997550460762949
这个 P 值非常小,这意味着数据支持第二种假设而不支持 null。治疗对病情有帮助。这与研究人员的结论以及在Data 8中的分析一致 - 但三种分析方法完全不同。
在Data 8中,通过汇集两组数据并且随机抽取样本,来模拟零假设下两组比例之间的差异。结论是基于经验的近似值 P。
此处的计算不需要求得精确的 P 值。
这种方法称为费希尔精确检验。它与罗纳德·费舍尔爵士做的检验一样,他对假设进行了测试,建议对 P 值做切分,等等。该方法可用于任意大小样本和任何具有二元结果的随机实验。
比值比
二项式\((n, p)\)概型涉及幂次和阶乘,当 n 很大时,这两者都很难计算。本节是关于整个分布的简化计算。结果有助于理解二项式直方图。
连续比值比
固定\(n\)和\(p\),\(P(k)\)为\(k\)的二项式\((n, p)\)概率。也就是说,\(P(k)\)为在\(n\)次独立试验中获得\(k\)次成功的概率,每次试验的成功概率为\(p\)。
\(k \ge 1\),定义第\(k\)个连续比值比为
了解这些有助于计算每一个\(P(k)\)而不必每次都计算幂次和阶乘,请注意这一点
等等。
这比使用二项式公式更有启发性?为了看到这一点,固定\(k \ge 1\)并计算\(R(k)\)比率。
首先,请注意 \(R(k)\)的公式很简单。例如,如果\(n \ge 3\),则很容易计算\(P(3)\)
没有涉及阶乘。
二项式直方图的形状
观察,比较\(R(k)\)和 1,直方图是上升,保持水平还是下降到\(k\)。
还要注意公式
比值\(R(k)\)是关于\(k\)的递减函数。在公式中, \(n\)和\(p\)是分布的参数是常数。 \(k\)是变量, \(k\)出现在分母中。
这意味着对于\(k\),一旦\(R(k) < 1\),对于所有较大的\(k\),它将保持小于 1。换句话说,一旦直方图开始下降,它将继续下降。它不能再上升。
这就是为什么二项式直方图要么不增加,要么不减少,或者它们上升和下降。但它们看起来不像海浪。它们不能上升,下来,再上升。
想象一下\(n = 23\)和\(p = 0.7\),这两个参数除了在这个例子中使用的选择之外没有任何意义。
n = 23
p = 0.7
k = range(n+1)
bin_23_7 = stats.binom.pmf(k, n, p)
bin_dist = Table().values(k).probability(bin_23_7)
Plot(bin_dist)

# 在这里将 k 定义为数组非常重要
# 这样就可以进行数组操作了
# 一次查找所有比率。
k = np.arange(1, n+1, 1)
((n - k + 1)/k)*(p/(1-p))
array([ 53.66666667, 25.66666667, 16.33333333, 11.66666667,
8.86666667, 7. , 5.66666667, 4.66666667,
3.88888889, 3.26666667, 2.75757576, 2.33333333,
1.97435897, 1.66666667, 1.4 , 1.16666667,
0.96078431, 0.77777778, 0.61403509, 0.46666667,
0.33333333, 0.21212121, 0.10144928])
Python 有助于告诉我们的是,1 处的不可见条比 0 处的不可见条大 53.666… 倍。之后比率降低但是它们仍然大于 1 到\(k = 16\)。直方图上升直到它在\(k = 16\)时达到峰值。你可以看到\(R(16) = 1.1666 > 1\)。然后比率降至 1 以下,因此直方图开始下降。
求解不等式\(R(k) \ge 1\)得出最大的 \(k\)是\((n+1)p\)的整数部分。在例子中,这里\(,k = 16\)因为
(n+1)*p
16.799999999999997
二项式模式
一种模式是离散分布具有最高概率的可能值。可能存在多个值,因此可能存在多种模式。
对于所有\(k\) ,使得\(R(k) \ge 1\),二项式直方图在\(k\)处上升或平坦。 \(R(k) \ge 1\)的最大\(k\)必须是一种模式;对于所有较大的\(k\),直方图将下降。
设\(q = 1-p\)。 \(R(k) \ge 1\)的每个值\(k\)必须满足
那是,
等价于
因此,\(R(k) \le 1\)的最大\(k\)是\((n+1)p\)的整数部分。这是二项式的一种模式。
因为比值比在\(k\)中是非递减的,所以存在多种模式的唯一情况就是如果存在\(k\)使得\(R(k) = 1\)。在这种情况下,\(P(k) = P(k-1)\),因此\(k\)和\(k-1\)都是模式。总结如下:
模式
二项式\((n, p)\)分布的模式是\((n+1)p\)的整数部分。如果\((n+1)p\)是整数,则\((n+1)p-1\)也是模式。
但事实上,\(np\)是一个更自然的计算。例如,如果计算一个硬币 100 次投掷的正面朝上次数,分布是二项式\((100, 1/2)\),很自然算出\(np = 50\)次正面。而不必担心 \(101 \times (1/2)\)。
当\(n\)很大时你不必担心,因为那时\(np\)和\((n+1)p\)非常接近。在后面的章节中,我们将研究一种情况,当 n 很大时,可以使用\(np\)来近似二项分布的图形。
小数定律
当\(n\)很大且\(p\)很小时,二项式\((n, p)\)分布的连续比值比有助于推导出分布的近似值。这种近似被称为“小数定律”,因为当成功的概率很小时,它近似于成功的概率分布:你只期望少量的成功。
例如,下面是二项式\((1000, 2/1000)\)分布。请注意,1000 很大,2/1000 非常小,\(1000 \times (2/1000) = 2\)是自然成功次数。
n = 1000
p = 2/1000
k = np.arange(16)
binom_probs = stats.binom.pmf(k, n, p)
binom_dist = Table().values(k).probability(binom_probs)
Plot(binom_dist)

虽然 1000 次试验中成功次数的可能取值在 0 到 1000 之间,但可能的值都很小,因为\(p\)很小。这就是为什么我们不打算计算超过\(k = 15\)的概率。
由于直方图全部在 0 附近,因此只有非常少的条形图概率明显。通过比二项式更简单的计算方式,确实可以找到相应值的近似概率。
如何做,从\(P(0)\)开始。
近似 \(P(0)\)
设\(n \to \infty\)和\(p_n \to 0\),使\(np_n \to \mu > 0\)。要确保\(p_n\)不会过快地变为 0 以至于\(np_n \to 0\),因为在这种情况下,当\(n\)很大时,所有概率都趋于在 0。
令 \(P_n(k)\)为二项式\((n, p_n)\)\(k\)次成功的概率
然后
如果无法直接获得极限值,请参考的指数近似求值:
当\(n\)很大时,因为\(p_n \sim 0\)和\(np_n \sim \mu\)。
近似\(P(k)\)
一般来说,对于固定的\(k > 1\),
当\(n\)很大时,因为\(k\)是常数,\(np_n \to \mu\),\(p_n \to 0\)和\(1-p_n \to 1k\)。通过归纳,对于每个固定的\(k\)有以下近似。
如果\(n\)很大,在所有假设的附加条件下。这是正式表述。
二项式的泊松近似
设\(n \to \infty\),\(p_n \to 0\),使\(np_n \to \mu > 0\)。令\(P_n(k)\) 为二项式\((n, p_n)\)\(k\)次成功的概率。然后对于每一个\(k\),\(0 \le k \le n\),
这叫做二项式的泊松近似。对于很大的\(n\),泊松分布的参数是\(\mu \sim np_n\)。
该分布以其发布人,法国数学家Siméon Denis Poisson (1781-1840)命名。
近似中的项与\(e^{\mu}\)的级数展开项成正比:
可以扩展到无限,但我们只会达到有限(很大)的\(n\)。现在能够处理具有无限取值的概率空间了。
这部分内容将在后面介绍。现在,看看推导出的近似值是否合适。
Python 中的泊松概型
使用stats.poisson.pmf跟用stats.binomial.pmf是一样的,但请记住泊松只有一个参数。
假设\(n = 1000\)且\(p = 2/1000\)。那么 3 次成功的二项式概率是
stats.binom.pmf(3, 1000, 2/1000)
0.18062773231746918
近似泊松分布的参数为\(1000 \times (2/1000) = 2\),因此对上述概率的泊松近似是
stats.poisson.pmf(3, 2)
0.18044704431548356
不错。比较整个分布,首先创建两个分布对象:
k = range(16)
bin_probs = stats.binom.pmf(k, 1000, 2/1000)
bin_dist = Table().values(k).probability(bin_probs)
poi_probs = stats.poisson.pmf(k, 2)
poi_dist = Table().values(k).probability(poi_probs)
绘制重叠直方图 prob140函数称为Plots(注意复数 s)。函数语法依次传入参数:该分布的字符串标签,后跟该分布,然后是第二个分布的字符串标签,然后是该分布。
Plots('Binomial (1000, 2/1000)', bin_dist, 'Poisson (2)', poi_dist)

它看起来好像只有一个直方图吗?那是因为非常近似!以下是两个直方图。
Plot(bin_dist)

Plot(poi_dist)

在实验中,使用总体变量差距来获得近似误差的边界。
此时要问的一个问题是,“嗯,这都非常好,但是使用 Python 中 stats.binom.pmf来计算精确的二项式概率时,为什么还要用近似值呢?”
部分原因是,如果函数包含参数,则只能通过计算某些特定参数的值来了解其组成方式。 在泊松概型下,很快就会看到它在一组无限取值上构成的强大分布。
七、泊松化
原文:prob140/textbook/notebooks/ch07
译者:YAOYI626
自豪地采用谷歌翻译
# 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
二项分布\((n,p)\)随机变量具有有限数量的值:它只能在 0 和\(n\)之间。 但是现在我们正在研究\(n\)变大时二项分布概率的行为,现在是时候从有限结果空间转向无限结果空间了。
在讨论无限多个值上的概率分布时,我们的第一个例子是来自于当\(n\)很大而\(p\)很小时我们为二项分布\((n,p)\)分布找到的近似值。 在这些假设下,我们看到了\(n\) i.i.d 中 k 成功的机会。 伯努利\((p)\)试验可以近似表示为
其中 \(\mu=np\)。
近似式中的项与\(e^\mu\)的级数展开式中的项成比例,但是\(e^\mu\)的级数展开式有无限项。 它并不止于 n,所以我们也不会。
在走得更远之前,我们需要小心一点。 首先,我们必须根据大量的可数结果来证明概率论的可加性公理:
如果事件\(A_1, A_2, \ldots\)是互斥的,那么
这被称为可数可加公理,与我们目前假设的有限加性公理形成对比。 它并非遵循有限可加性,但当然有限可加性也来自它。
在本课程中,我们不会涉及更深层次的有关可数可加性,和满足我们感兴趣的空间上的公理的概率函数存在的技术证明。 但是,在对概率理论进行更深入的理解之前,必须先研究这些技术方面。 如果你想这样做,一个好的开始是采用实分析然后测度理论。
在 Prob 140 中,您不必担心它。 假设我们所有的工作都与公理一致。
这是我们的第一个无限多个值的分布。
泊松分布
当随机变量\(X\)满足:
这些项与 \(e ^ {\mu}\) 的无限级数展开式中的项成比例。 这些项 $\frac {\mu ^ k} {k!} $ for \(k \ge 0\) 确定分布的形状。
比例常数是 \(e ^ { -\mu}\)。它不影响形状。 它只是确保概率合为 1。
泊松本来就是一种分布,它不必作为一种限制出现,虽然有时候这样想可以帮助理解。
对参数的解释
要理解泊松分布的参数 \(\mu\) ,第一步是概率只在 \(\mu\) 左右。这是 \(\mu = 3.74\) 的示例。 没有计算系统可以计算无限多的概率,所以我们刚刚计算泊松概率直到总和足够接近 1,即prob140库认为它是一个概率分布。
mu = 3.74
k = range(20)
poi_probs_374 = stats.poisson.pmf(k, mu)
poi_dist_374 = Table().values(k).probability(poi_probs_374)
Plot(poi_dist_374)
plt.title('Poisson (3.74)')

众数为 3。要找到该众数对应的公式,可以按照我们用在二项分布上的方法:计算连续比值的比,请注意它们正在减少,并查看它们交叉的位置 1。这是作为练习留给您的。 您的计算应该总结如下:
泊松分布的众数
泊松分布的众数是 \(\mu\) 的整数部分。也就是说,最可能的值是 \(\mu\) 舍入到整数。如果 \(\mu\) 是整数,则 \(\mu\) 和 \(\mu-1\) 都是众数。
mu = 4
k = range(20)
poi_probs_4 = stats.poisson.pmf(k, mu)
poi_dist_4 = Table().values(k).probability(poi_probs_4)
Plot(poi_dist_4)
plt.title('Poisson (4)');

累计分布函数 (c.d.f.)
经常地,我们需要得到概率 \(P(X>x)\) or \(P(X \leq x)\) 。例如,如果 \(X\) 服从泊松分布 Poisson \((4)\),求事件 \({X \leq 5}\) 的概率如下。
Plot(poi_dist_4, event=range(6))
plt.title('Poisson (4)');

任意变量的累积分布函数用来计算任意点“左边的面积”。如果把累积分布函数记为 \(F\) ,那么对任意 x 有:
后面的课程中我们将会对这个函数有更深的理解。但是现在,请注意 stats 让你可以直接计算它而不是使用 pmf 然后加和。这个函数叫做 stats.distribution_name.cdf ,其中 distribution_name 可以是 binom , poisson 或者其他 stats能识别的分布名称。第一个参数是 \(x\) ,接下来是按照特定顺序排列的其他参数。在泊松分布中,除了 \(x\) 外,只有一个参数 \(\mu\)。
对于服从泊松分布 Poisson \((4)\) 的随机变量 \(X\) ,\(P(X \leq 5)\) 即为上图的黄色区域,大约为 78.5%。
stats.poisson.cdf(5, 4)
0.78513038703040516
为了以防万一,你把可以把各个值概率加起来来检查答案是否与你所获得的答案相同:
sum(stats.poisson.pmf(np.arange(6), 4))
0.78513038703040505
二项分布的泊松化
数据科学家最常使用的分布族是根据对数据随机性的自然假设而产生的。 这些分布族具有良好的数学特性,可以对数据问题给出有启发性的答案。 其中包括二项分布族和泊松族。
在本节中,我们将研究 Poisson 族的一些更多属性,包括它与二项分布族的另一个显著联系。
离散泊松变量的和
设独立随机变量\(X\)和\(Y\)分别服从泊松分布 Poisson( \(\mu\) ) 和 Poisson( \(\lambda\) ),那么他们的和 \(S = X + Y\) 服从泊松分布 Poisson( \(\mu + \lambda\) )。
为了证明这一点,首先要注意的 \(S\) 的取值范围是非负整数。 对于非负整数 \(s\) ,通过 \(X\) 的值划分事件来找到 \(P(S = s)\) ,记住 X 和 Y 都必须是非负的,因为两者服从泊松分布。
通过 $(\mu + \lambda)^ s $的二项展开式。这是值为 $ s \(的 Poisson\)(\mu + \lambda)$概率公式。
这个结果的一个重要应用是,如果$ X_1,X_2,\ldots,X_n $是独立同分布的 Poisson \((\mu)\)变量,那么它们的和 $ X_1 + X_2 + \ldots + X_n $具有 Poisson \((n \mu)\)分布。
随机化伯努利试验数量
假设 $ N_H $ 是 100 次投掷硬币的首数,\(N_T\)是尾数。那么 $ N_H $和 $ N_T \(远非独立。它们是彼此的线性函数,因为\) N_T = 100 - N_H $。
任何固定数量的投掷都是如此:如果你知道首数,那么你也知道尾数。
在任何固定数量的伯努利试验中,成功次数和失败次数彼此依赖。如果你知道一个,你就会知道另一个。
然而,当试验数量本身是随机的而且服从泊松分布时,会发生一些重要的事情。在我们看到发生了什么之后,我们将能够理解它为何重要。
设$ N $服从泊松分布 Poisson \((\mu)\),设$ S \(成为\) N $ i.i.d 中的成功数。伯努利\((p)\)试验。更正式地说:
- 给定$ N = 0 \(,将\) S $定义为 0,概率为 1.鉴于没有进行试验,那么就没有成功。
- 对于$ n \ge 1 $,设 \(S\) 的在 \(N = n\) 的条件概率分布为二项分布 \((n, p)\) 。
然后$ N \(和\) S $的联合分布律由下式给出:
$ n = 0 $时,应检查公式是否正确。
我们可以适当地求和这个联合分布中的一些项,以获得$ S $的边缘分布。
一个成功的泊松数
$ S \(的取值范围是\) 0,1,2,\ldots \(没有上限,因为\) N \(的取值范围没有上限。对于\) s \ge 0 $,
因此$ S \(的分布是泊松参数\) \mu p $。
注意我们刚刚证明了什么。如果试验数$ n \(是固定的,你知道成功数量的分布是二项分布\)(n,p)$。但如果试验次数是随机的 Poisson \((\mu)\)分布,那么成功次数的分布是泊松\((\mu p)\)。这是泊松化二项分布中的一个重要步骤。
最棒的地方还没到,但让我们花一点时间以数字方式查看结果。假设你进行一个泊松分布 Poisson (12)的独立同分布的伯努利(1/3)试验。然后试验的次数最有可能在 12 左右,但你不能确切地说它会是什么,因为它是随机的。我们所展示的是成功的数量是泊松参数 12 \times \frac {1} {3} = 4 。
参数 4 不易直观理解。你最有可能看到大约 12 次试验,其中约 1/3 会成功,所以你最有可能看到 4 次成功。
成功和失败是独立的
是的,你没有看错。如果你运行泊松数为独立同分布的的伯努利试验,那么成功的数量和失败的数量独立。
随机化参数(在这种情况下是试验次数)会对随机变量之间的关系产生巨大影响。
让我们证明一下这个结果,然后我们看一下它的使用方式。
假设我们之前正在运行 \(N\) 独立同分布的伯努利(p)试验,其中 \(N\) 服从泊松分布 Poisson (\mu)。和以前一样,设 S 成为成功的数量。
现设 F 为失败次数。
那么 F 服从泊松分布 Poisson (\mu q),其中 q = 1-p 。接下来是在我们之前的论证中将“成功”重新定义为“失败”。
S 和 F 的联合分布是
这表明 S 和 F 是独立的。
总结:二项分布的泊松化
假设你进行$ N $ 次独立同分布的的伯努利\((p)\)试验,其中$ N $服从泊松分布 Poisson \((\mu)\)分布。设$ S \(为成功次数,\) F \(为失败次数,设\) q = 1-p $。那么:
- $ S $服从泊松分布 Poisson \((\mu p)\)。
- $ F $服从泊松分布 Poisson \((\mu q)\)。
- $ S \(和\) F $是独立的。
例如,假设人口中 90%的人属于 A 类,10%属于 B 类。假设你选择 N 人的样本,以便 N 服从泊松分布 Poisson (20)和选择是独立同分布的,然后在您的样本中,A 类人数服从泊松分布 Poisson (18),B 类中的数字服从泊松分布 Poisson (2),并且两个类别中的计数是独立的。
例如,每个类在样本中出现至少五次的机会是
大约是 5%。
(1 - stats.poisson.cdf(4, 18))*(1 - stats.poisson.cdf(4, 2))
0.052648585218160585
当分为两类时,泊松化已经非常了不起了,当有三个或更多类时,泊松化更加有助于简化计算,这一点我们将在下一节中看到。
多项式的泊松化
# 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
Bernoulli 试验有两种出现方式。但是其它许多试验以多种不同的方式出现,我们可能想要跟踪这些方式。骰子可以以六种不同的方式着陆。评委会成员可以拥有几种不同的教育水平之一。通常,个人可能属于几个类别之一。
多项分布是二项分布的扩展,以及每次重复试验有两种以上可能结果的情况。我们先在一个例子中看一下它,然后我们将一般地定义它。
一个盒子里有 2 张蓝色票,5 张绿色票和 3 张红色票。从中随机有放回地抽取十五次。为了找到画出 4 张蓝色,9 张绿色和 2 张红色票的机会,我们可以先编写 4 个 B,9 个 G 和 2 个 R 出现的所有排序方式。
每个这样的排序方式出现的概率都是 \(0.2 ^ 4 0.5 ^ 9 0.3 ^ 2\),所以我们只需要计算出所有的排序方式的总数就可以得到事件概率。
- 有 \(\binom {15} {4}\) 选择写 B 的地方。
- 对于这些方法中的每一种,都有 \(\binom {11} {9}\) 方式来选择其余 11 个位置中的 9 个来写 G。
- 剩下的 2 个地方写 R。
所以
注意这是如何通过引入第三类来简单地扩展二项分布概率公式。
类似地,或通过归纳正式,您可以将公式扩展到任何有限数量的类别或类别。
多项分布
\(n\) 为某个确定的正整数。假设我们正在进行 \(n\)个独立同分布的实验,每个试验的结果都是 \(k\) 类之一。对于每个 \(i = 1,2,\ldots,k\),让单次实验获得 Class $ i$ 的概率为\(p_i\) ,那么 \(\sum_ {i = 1} ^ k p_i = 1\)。
对于每个 \(i = 1,2,\ldots,k\),设 \(N_i\) 为结果为 \(i\) 的试验次数,那么\(\sum_ {i = 1} ^ k N_i = n\) 。
然后 \(N_1,N_2,\ldots,N_k\) 的* 联合*概率分布是
由下式给出:
其中对 \(1 \le i \le k\) 有 \(n_i \ge 0\),\(\sum_ {i = 1} ^ k n_i = n\) 。
当只有两个类时,则 \(k = 2\) ,公式简化为熟悉的二项分布公式,写成成功次数和失败次数的联合分布如下:
二项边际分布
无论有多少类,每个 \(N_i\) 的边际分布都是二项分布 ,\((n,p_i)\)。你不必对联和密度函数求和就可以解决这个问题。 \(N_i\) 是实验结果为 i 的数量;每次实验的结果为 \(i\) 的概率为 \(p_i\) ;共有 \(n\) 次实验。这就是其二项分布的参数设置。
泊松化
如果用服从泊松分布 Poisson$ (\mu)$ 随机数量的试验替换固定数量 \(n\) 的试验,那么多项分布得到的泊松化化如下:
- 对于每个 \(i = 1,2,\ldots,k\),\(N_i\) 服从泊松分布 Poisson \((\mu p_i)\)。
- \(k\) 类结果出现的次数 \(N_1,N_2,\ldots,N_k\) 是相互独立的。
因为之前已经给出了 \(k = 2\) 时的证明,我们不再扩展我们的证明。但是,我们将研究结果为何重要。
当试验次数固定时,\(N_1,N_2,\ldots,N_k\) 都以复杂的方式相互依赖。但是,当你将试验次数设为泊松随机变量时,计数 \(N_1,N_2,\ldots,N_k\) 的独立性可以让你快速计算样本中任何指定类别的概率。
例如,假设在你假设的人口中,分类如下:
- 1 级:20%
- 2 级:30%
- 3 级:50%
现在假设您进行 \(N\) 次独立实验,其中 \(N\) 服从泊松分布 Poisson \((20)\) 分布,那么每个类中至少有 3 次获得的机会约为 71.27%。
(1 - stats.poisson.cdf(2,4))*(1-stats.poisson.cdf(2,6))*(1-stats.poisson.cdf(2,10))
0.71270362753222372
答案的因数数量等于类的数量,这与容斥公式中每增加一个类,工作量就会增加很多不同,正如你在练习中看到的那样。
这有助于数据科学家处理诸如“我必须抽样多少次以便我看到每个类中至少有一次超过给定阈值的概率?”这样的问题。当然,答案取决于群体中类的分布,但允许试验次数为泊松随机变量可以使计算更容易处理。对于应用程序,请参阅
示例摘要和参考文献论文。注意。如果有大量的类别,那么即使具有固定但较大的样本容量,不同类别中的样本计数也几乎是独立的。 如果您知道某些计数,但是该信息对其他计数的分布没有太大影响。 在这种情况下,即使样本大小是固定的,如果将计数视为独立变量,也不会出错。
八、期望
8.0 期望概述
关于概率是如何分布在变量所有可能值的,随机变量的分布给我们提供了详细信息。但是通常我们只是想大致了解它们分布在数字线的位置。换句话来说,我们只是想知道分布中心的位置。
经历过多次“期中”考试的任何学生都知道,“中间”和“中心”这样的词语没有独特的含义。本章是关于随机变量的一种特殊“中心”。
示例
from datascience import *
from prob140 import *
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
%matplotlib inline
8.1 定义
随机变量 X 的期望,可以表示为 E(X),是由 X 经过概率加权所有可能值的平均值。这可以用两种等效的方式来计算。
在 X 的域上:
E(X) = \sum_{\text{all }x} xP(X=x)
在 X 的范围内:
E(X)=∑(all x)xP(X=x)
解释说明:
如果 X 具有有限多个可能的值,则上式的总和总是很好定义并且是有限的。如果 X 是有相当多的取值,比如由 1,2,3...索引的值,那么我们需要更加小心以确保公式可以得到被明确定义的数值。我们后续将很快涉及到这个问题。现在,我们先假设总和已经被明确定义。
假设总和定义明确,可以直接表明这两个公式会给出相同的答案。 显示它的一种方法是在所有不同的结果ω中,通过 X(ω)的不同值对第一个求和公式中的项进行分组。
第二个公式通常作为期望的“定义”给出,但第一个公式可以有助于理解期望的特性。 特别是,它表明如果两个随机变量具有相同的分布,那么它们也应该具有相同的期望。
重心
假设 X 具有以下给出的分布:
示例:
x = np.arange(1, 6) #创建 array([1, 2, 3, 4, 5])
probs = make_array(0.15, 0.25, 0.3, 0.2, 0.1)
example_dist = Table().values(x).probability(probs)
Plot(example_dist)

然后通过 X 的范围上的公式,我们得到 E(X)= 2.85。
ev_X = sum(x*probs)
ev_X
2.8499999999999996
你也可以调用 prob14 中的 ev 函数来计算期望 E(X):
example_dist.ev()
2.8500000000000005
期望我们通常也成为期望值,因此不论是该函数的名称还是我们的名称 ev_V,都是可以这么称呼的。但是请注意期望值不一定是随机变量的可能值。例如该随机变量的可能值就不是 2.85.
但那么期望值代表着什么呢?要想看到这一点,我们要使用 Plot 中的 show_ev = True 的参数,来可视化期望 E(X).
py(example_dist, show_ev=True)

如果你已经研究了一些物理学,你会发现我们用于期望的公式与系统的重心公式是相同的,其中权重等于从 1,2,3,4,5 这些可能值相应的概率。
因此,假设直方图是由纸板或一些刚性材料制成,并想象试图在水平轴上某处固定的铅笔尖上找到平衡点。 你需要将铅笔保持在 2.85 才能达到平衡。
期望可以看作是物理意义上的分布中心:它是分布的重心或质心。
长期平均成本曲线
当您在相同条件下一次又一次地生成变量时,您还可以将期望视为随机变量的长期平均值。适用于 prob140 分配对象的 sample_from_dist 方法允许您这样做。它随机抽样,从分布中替换,并返回一组采样值。 参数是样本大小。
您可以使用 emp_dist 函数将模拟值数组转换为分布对象,可以将其与 Plot 和其他 prob140 函数一起使用。 Plot 的 show_ave = True 参数可以显示模拟值的平均值。
示例
simulated_X = example_dist.sample_from_dist(10000)
emp_dist_X = emp_dist(simulated_X)
Plot(emp_dist_X, show_ave=True)
plt.title('Empirical Distribution');

X 的 10000 个模拟值的平均值非常接近 E(X),但不完全相等。
np.mean(simulated_X)
2.8502000000000001
这是由于您可以在经验直方图中看到:它看起来非常像 X 的概率直方图。大约 15%的模拟值是 1,大约 20%是 2,依此类推,所以平均值非常接近 2.85。
两个直方图的相似性是因为您在 Data8 中看到的平均定律,我们将在此课程中正式建立 。
现在我们有几种考虑期望的方法,让我们看看为什么它具有如此重要的意义。 我们将从直接使用定义开始计算一些期望。在后续章节中,我们将开发更强大的方法来计算和使用期望。
唯一性
这个小例子值得写出来因为它一直被使用。假设随机变量 X 实际上是一个常数 c,即假设 P(X = c)= 1。 然后 X 的分布将其所有质量放在单个值 c 上,并且 E(X)=c⋅1= c。 我们只写 E(c)= c。
伯努利和指标
如果 X 服从伯努利(p)分布,那么 P(X = 1)=p 和 P(X = 0)= 1-p。那么
E(X)=0⋅(1−p) + 1⋅p = p
如上所述,零/一值随机变量是其他变量的构建块,它们被称为指标。
假设 A 可以是任何事件,然后 A 的指标是随机变量 IA,如果 A 发生则为 1,如果 A 不发生则为 0。这样 IA就服从伯努利(P(A)) 分布,可以通过 E(IA)=P(A)该式计算。因此,每个概率都是一种期望。我们将在后面的部分中大量使用它。
X = [0, 1]
qp = [0.75, 0.25]
bern_1_3 = Table().values(x).probability(qp)
Plot(bern_1_3, show_ev=True)
plt.title('Bernoulli (0.25)')

整数区间的一致性
设 a 和 b 为两个整数,使 a <b。如果 X 在整数 a,a + 1,a + 2,...,b 上具有均匀分布,那么根据对称性,E(X)应该是在 a 和 b 中间位置的。这就是可以将概率直方图平衡的地方。所以有
$$ E(X) = \frac{a+b}{2} $$
例如,如果 X 在 1,2,...,n 上具有均匀分布,那么
E(X)=(n+1)/2
这种情况的一个例子是,如果 X 是骰子的一个的斑点数,那么 E(X)=3.5。
如果 X 在 0,1,2,...,n 上是均匀的,那么 E(X)=n/2。
x = np.arange(10)
probs = 0.1*np.ones(10)
unif_10 = Table().values(x).probability(probs)
Plot(unif_10, show_ev=True)
plt.title('Uniform on Integers 0, 1, 2, ..., 9')

泊松分布
设 X 具有泊松分布(μ),则

现在我们要对泊松分布的参数进行一个重要的新解释。我们之前看到它的接近形式,现在我们知道这也是分布的平衡点或期望,我们可以使用符号μ代表“均值”。
k = np.arange(15)
poi_2_probs = stats.poisson.pmf(k, 2)
dist_poi_2 = Table().values(k).probability(poi_2_probs)
Plot(dist_poi_2, show_ev=True)
plt.title('Poisson (2)')

存在性
如果 X 有相当多的值,那么用于定义期望的总和是无限的,因此被限制为求部分和。但并非所有部分和的序列都是有限的,因此并非所有随机变量都有期望。实际上,当和是绝对收敛时,E(X)才被很好地定义:
对于这个水平的课程来说,这有点技术性,在 Pro140 中,你几乎永远不必处理不存在的期望。请记住,期望并不总是有限的,甚至不是很明确。
这里有一个例子,你可以看到期望不能是有限的。 首先注意序列 1 / 2n,n = 1,2,3,...是概率分布,即通过对几何系列求和得到 1。
现在假设随机变量X具有 2,4,8,16 ...这些值,因此对于 n=1,2,3,...,P(X=2n)= 1/ 2n。然后对于每个可能的值X,乘积 xP(X= x)= 1。如果你试图添加无限多的 1,唯一合理的答案是无限。
当分布具有“质量漂移至无穷大”的速率时,就会发生这种期望的问题,这时的速率在概率直方图水平轴方向的任何位置上无法达到平衡。
8.2 可加性
# 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 scipy import misc
在简单的情况下,通过插入定义来计算期望可以起作用,但通常它可能很麻烦或缺乏洞察力。 可以证实,计算期望的最有力结果不是定义。它看起来相当 innocuous。
可加性
设 X 和 Y 是在相同概率空间上定义的两个随机变量,那么
E(X+Y) = E(X) + E(Y)
在我们更仔细地研究这个结果之前,请注意我们事先假设所有期望是存在的; 我们将在本课程中始终贯彻这个假设。
现在注意到没有关于 X 和 Y 之间关系的假设。它们可以是相关或独立的。无论如何,总和的期望是期望的总和。 这使得结果强有力。
从 X + Y 的定义和域空间的期望定义可以很容易地看出可加性。首先注意随机变量 X + Y 是由(X+Y)(ω)=X(ω)+Y(ω) for all ω∈Ω定义的函数。
因此,“由概率加权的 X + Y 的值”可写为(X+Y)(ω)⋅P(ω)=X(ω)P(ω)+Y(ω)P(ω)。
从两方面对所有ω∈Ω求和,以证明期望的可加性。
通过归纳,可加性扩展到任何有限数量的随机变量。如果 X1,X2,...,Xn 是在相同概率空间上定义的随机变量,那么 E(X1+X2+⋯+Xn)=E(X1)+E(X2)+⋯+E(Xn)。
如果你试图找到一个期望,那么使用可加性的方法是将随机变量写成一个简单变量的总和,这些变量的期望是你知道的或者可以很容易地计算出来的。 本节的其余部分包含此技术的示例。
样本总和
设 X1,X2,...,Xn 是服从均匀分布为μ的数字总体中随机抽取的样本,并且使样本总和为 Sn=X1+X2+⋯+Xn。 然后无论是否抽取样品,每个 Xi 都具有与种群相同的分布。如果样品被抽取的话,这显然是正确的,正如我们在前面的章节中看到的那样,如果样品没有被抽取,那么就是对称的。
因此和是否抽取样本是无关的,(待校对) E(Sn)=E(X1)+E(X2)+⋯+E(Xn)=nμ
线性函数规则
设 X 为随机变量,期望为 E(X),并且对于某一常数 a,设 Y = aX。 例如,当您将随机长度的单位从英寸更改为厘米时,则 a = 2.54(注:1 英寸(in)=2.54 厘米(cm))。
8.3 函数期望
一旦我们开始使用随机变量作为估计量,我们就会想知道估计值离期望值的差值有多大。例如,我们可能想知道一个随机变量\(X\)离数字 10 有多大差值。我们可以定义一个关于\(X\)的函数\(Y\)那么
它并不是一个线性函数。要找到\(E(Y)\),我们需要更多的方法。自始至终,我们将假定我们讨论的所有期望值都是明确的。
这一节是关于如何寻找一个在分布确定情况下,求取随机变量函数的期望值。
在下面的内容中,我们设\(X\)为一个随机变量,其分布(包括它的期望值)是已知的。
线性函数规则
设常量\(a\)和\(b\),对于线性函数\(Y=aX+b\)而言。在前面的部分中,我们展示了
这包括\(a=0\)的情况,这种情况下\(Y\)恒定为\(b\),因此期望值为\(b\)。
非线性函数规则
现在让\(Y=g(X)\),其中\(g\)代表任意函数。记住\(X\)是\(\Omega\)上的函数。所以定义随机变量\(Y\)的函数是一个组合:
这允许我们以三种等效方式书写\(E(Y)\):
在\(Y\)的范围内
在域\(\Omega\)的范围内
在\(X\)的范围内
如上所示,分组简单明了,所有的形式都是等价的。
第一个形式看起来最简单,但有一个问题:首先需要找到\(P(Y=Y)\)。
第二种形式涉及了很多不必要的细节。
第三种形式是常用的形式。它使用已知的\(X\)分布。要找到\(E(Y)\),、需要\(Y=g(X)\)中的函数\(g\):
—————取\(x\)的一般值\(x\)。
—————应用\(g\)到\(x\);则此\(g(x)\)是\(Y\)的一般值。
—————将\(g(x)\)乘以\(P(X=x)\),这是已知的。
—————为所有\(x\)执行此操作并相加,总和记为\(E(Y)\)。
这个方法最重要的一点是,我们不必先找到\(Y\)的分布,这节省了我们很多的工作。我们来看看在一些例子中,我们的方法是如何工作的。
Example 1: \(Y = |X-3|\)
设\(X\)服从之前我们用过的分布。
x = np.arange(1, 6)
probs = make_array(0.15, 0.25, 0.3, 0.2, 0.1)
dist = Table().values(x).probability(probs)
dist = dist.relabel('Value', 'x').relabel('Probability', 'P(X=x)')
dist
x|P(X=x)
1|0.15
2|0.25
3|0.3
4|0.2
5|0.1
设\(g\)函数为\(g(x)=| x-3 |\),设\(Y=g(x)\)。换句话说,\(Y=| X-3 |\)。
要计算\(E(Y)\),首先必须得到一列数值,即将\(X\)映射到\(Y\)后的值:
dist_with_Y = dist.with_column('g(x)',
np.abs(dist.column('x')-3)).move_to_end('P(X=x)')
dist_with_Y
x|g(x)|P(X=x)
1|2|0.15
2|1|0.25
3|0|0.3
4|1|0.2
5|2|0.1
要获得\(E(Y)\),找到适当的加权平均值:将 g(x)和 P(X=x)相乘,然后将计算所得的值相加得到总和。计算表明,\(E(Y)=0.95\)。
ev_Y = sum(dist_with_Y.column('g(x)') * dist_with_Y.column('P(X=x)'))
ev_Y
0.94999999999999996
Example 2: \(Y = \min(X, 3)\)
设\(X\)与之前的例子中取值相同,但现在设\(Y=\min(X,3)\)。我们要求出 E(Y)。我们知道 X$的分配情况:
dist
x|P(X=x)
1|0.15
2|0.25
3|0.3
4|0.2
5|0.1
要求出\(E(Y)\),我们可以逐行计算,并通过\(x\)的值计算出\(\min(x,3)\)的值,然后加权平均:
ev_Y = 1*0.15 + 2*0.25 + 3*0.3 + 3*0.2 + 3*0.1
ev_Y
2.45
Example 3: 泊松变量\(X\)的\(E(X^2)\)
设\(X\)具有 Poisson\((\mu)\)分布。你将在下一个部分中看到,\(E(X^2)\)的值是非常有用的。根据我们的非线性函数法则,
这个式子很难简化。\(k=0\)的条件是 0。在\(k\ge 1\)的每个条件中,分子中的一个\(k\)和分母中的一个\(k\)化解,分子中的另一个\(k\)仍然存在。如果这个因子\(k\)是\(-1\),那么它就可以化解分母中的\(k-1\)。
这将会推导出以下计算。无论\(X\)是什么,如果我们知道\(E(X)\)的值并且可以找到\(E(X(X-1))\)的值,那么我们可以使用加法来找到\(E(X^2)\),如下所示:
so $$ E(X^2) = E(X(X-1)) + E(X) $$
让我们看看是否可以通过应用非线性函数规则求解\(E(X(X-1))\)。
\begin{align} E(X(X-1)) &= \sum_{k=0}^\infty k(k-1) e^{-\mu} \frac{\mu^k}{k!} \ \ &= e^{-\mu} \mu^2 \sum_{k=2}^\infty \frac{\mu^{k-2}}{(k-2)!} \ \ &= e{-\mu}\mu2 e^\mu \ \ &= \mu^2 \end{align}
我们知道\(E(X) = \mu\), 所以
注意\(E(X^2)>(E(X))^2\)。这是一个普遍的真实例子。在后面,我们将看到它为什么重要。
现在,作为练习,看看你是否可以推导出\(E(X(X-1)(X-2))\),以及\(E(X^3)\)。
九、条件(续)
原文:prob140/textbook/notebooks/ch09
译者:YAOYI626
自豪地采用谷歌翻译
# 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 scipy import misc
在接下来的几章中,我们将逐步研究以时序为索引的随机过程。 我们已经研究了其中的一些——例如,一系列试验可以被认为是一个随时间变化的随机过程。
自然地,在已经知道目前值的情况下,我们会对未来的过程预测产生兴趣。 接下来,涉及条件概率的方法将会发挥作用。 我们已经了解了其中的一些方法,在本章中我们将进一步研究它们。
条件概率
本节中的理论并不新鲜。这是古老熟悉的乘法规则。我们将在有关时序索引随机过程的上下文中使用它,在某种方法中我们叫它早期条件作用。
赢得骰子游戏
假设 Jo 和 Bo 玩下面这个游戏。 Jo 掷骰子,然后 Bo 掷,然后 Jo 再掷,依此类推,直到第一次他们中的一个掷出点数 6。这个人就是胜利者。
问题。 Jo 获胜的几率是多少?
答案。在进行任何计算之前,请注意两个玩家的游戏并不对称。 Jo 拥有先行的优势,可以在第一轮获胜。所以 Jo 胜利的概率应该大于一半。
要确切了解概率的大小,请注意题设中存在自然递归或“更新”。为了赢得胜利,我们可以对前两次投掷进行条件化如下:
- Jo 在第一轮中获胜;
- 或着 Jo 在第 1 轮中掷出非 6 的点数,然后 Bo 在第 2 轮中也掷出非 6 的点数,然后游戏结束 Jo 获胜。
所以在时间 0 时(也就是说,在掷骰子之前),设 \(x\) 为 Jo 赢的概率。那么 \(x\) 满足一个等式:
这很容易算出答案。
比我们猜测的一半更大一些。
赌徒的破产:公平的硬币
设 \(a\) 和 \(b\) 是两个正整数。假设一个赌徒以 \(a\) 美元开始赌硬币:每次硬币正面落地,赌徒都会赢一美元。每次硬币反面落地,赌徒都会损失一美元。
现在假设赌徒有一个停止规则:当他的净收益为 \(b\) 美元或者他没有钱时,他就停止游戏,以先发生者为准。如果赌徒输光了所有钱,他就破产了。我们在这个例子中的目标是找到赌徒破产的概率。
每次掷硬币时我们都会记录赌徒的净收益。因此他将从 0 开始,并在他获得 \(b\) 或 \(-a\) 时停止,以先发生者为准。
将赌徒净增益的随机变化轨迹可视化为路径是个好主意。这是两张图,假设 \(a = 3\) 和 \(b = 7\) 。第一张图展示了赌徒净赚 \(b\) 的路径。第二个展示了赌徒的破产之路。
# NO CODE
a = 3
b = 7
tosses = make_array(1, 1, 1, -1, -1, 1, 1, 1, 1, -1, 1, 1, 1)
fortune = np.cumsum(np.append(0, tosses))
plt.scatter(np.arange(14), fortune, color='k')
plt.plot([0, 13.5], [-1*a, -1*a], lw=2, color='r')
plt.plot([0, 13.5], [b, b], lw=2, color='g')
plt.ylim(-3.5, 10.5)
plt.xlim(-0.2, 13.5)
plt.xticks(np.arange(0, 14, 1))
plt.yticks(np.arange(-3, 11))
plt.xlabel('Tosses')
plt.ylabel('Net Gain')
plt.title('$a = 3$, $b = 7$: A Path to Fortune');

#NO CODE
a = 3
b = 7
tosses = make_array(1,1,1,-1,-1,1,-1,-1,-1,-1,-1)
fortune = np.cumsum(np.append(0,tosses)
plt.scatter(np.arange(12),fortune,color ='k')
plt.plot([0,11.5],[ - 1 * a,-1 * a],lw = 2,color ='r')
plt.plot([0,11.5],[b,b],lw = 2,color ='g')
plt.ylim(-3.5,10.5)
plt.xlim(-0.2,11.5)
plt.xlabel( 'Tosses')
plt.ylabel('Net Gain')
plt.xticks(np.arange(0,12,1)
plt.yticks(np.arange(-3,11)
plt.title(' $a = 3$, $b = 7$:破产之路');

问题。赌徒破产的概率是多少?
答案。你可以从上面的路径看到,在第一步,赌徒的净增益将是-1 或 1,所以我们必须从第一步开始计算破产概率。
对于任意 \(k\),设 \(p_k\) 为在赌徒净收益已经为 \(k\) 的前提下他破产的概率。
我们现在求的概率是 \(p_0\)。
通过第一步的条件,我们得出 p_k 满足的一个等式:
易得“边界情况”为
将等式的左边写为 \(\frac {1} {2} p_k + \frac {1} {2} p_k\),并重新排列,我们可以得出
连续差相等,这意味着 \(p_k\) 是 \(k\) 的线性函数。
我们仍然假设 \(a = 3\) 和 \(b = 7\)。红线表示 \(p_0 = 0.7\)。
a = 3
b = 7
plt.scatter(np.arange(-3,8,1),np.arange(1,-0.1,-0.1),lw = 2,color ='darkblue')
plt.plot([0,0],[0,0.7],lw = 1,color ='r')
plt.plot([ - 3,0],[0.7,0.7],lw = 1,color ='r')
plt.ylim(-0.03,1.03)
plt.xticks(np.arange(-3, 8))
plt.yticks(np.arange(0, 1.1, 0.1))
plt.xlabel('$k$')
plt.ylabel('$p_k$', rotation=2)
plt.title('$a=3$, $b=7$, p=0.5: Chance of Ruin Starting With $\$k$')

对于一般的 \(a\) 和 \(b\),折线从 \(( - a,1)\) 开始,并且斜率为 \(-1 /(a + b)\)。所以
破产的概率为:
赌徒最终获得 \(b\) 美元的概率是
对于固定的 \(a\),上式是 \(b\)的递减函数。这和我们的直觉相符:对于固定的 \(a\), \(b\)越大,赌徒最终赚到 \(b\) 美元的难度就越大。
赌徒的破产:不公平的硬币
如果赌徒押注一枚硬币以 $p \ne 1/2 的价格出售,则方程式变为
其中 \(q = 1-p\),边界情况为
像上面一样重新排列它,可得:
这说明连续差异的比率是恒定的,等于 \(r = \frac {q} {p}\)。所以概率 \(p_k\) 是几何级数中以 \(r\) 为比例的项的总和。您可以检查它是否正确:
因此破产的可能性是
注意,如果 \(p <1/2\),then \(r> 1\),分子和分母都是负数。
这是一个破产概率的图表,如前所述 \(a = 3\) 和 \(b = 10\),但现在有一个硬币正面偏重,它以正面落地的概率 \(p = 0.6\)。毫不奇怪,随着初始资金的增加,在这枚硬币下的破产概率比公平硬币更大。即使赌徒只以 $3 美元开始,他的破产概率也不到 30%。
# NO CODE
a = 3
b = 10
p = 0.6
r = (1-p)/p
k = np.arange(-1*a, b+1)
ruin_probs = (r**(a+k) - r**(a+b))/(1 - r**(a+b))
p3 = ruin_probs.item(3)
plt.scatter(k, ruin_probs, lw=2, color='darkblue')
plt.plot([0, 0], [0, p3], lw=1, color='r')
plt.plot([-1*a, 0], [p3, p3], lw=1, color='r')
plt.ylim(-0.03, 1.03)
plt.xticks(np.arange(-1*a, b+1))
plt.yticks(np.arange(0, 1.1, 0.1))
plt.xlabel('$k$')
plt.ylabel('$p_k$', rotation=2)
plt.title('$a=3$, $b=7$, $p=0.6$: Chance of Ruin, Starting With $\$k$');

条件期望
# HIDDEN
from datascience import *
from prob140 import *
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
%matplotlib inline
设 \(T\) 为一个随机变量,\(S\) 为与 \(T\) 在同一空间中定义的随机变量。正如我们知道的,如果 \(S\) 和 \(T\) 相关,那么条件化 \(S\) 可能是寻找 \(T\) 概率的好方法。在本节中,我们将看到条件化 \(S\) 也是找到 \(T\) 期望的好方法。
我们将从一个简单的例子开始来说明这些想法。设$ T \(和\) S $的联合分配如下表所示。
t = [3,4]
s = [5,6,7]
pp = [0.1,0.2,0.3,0.1,0.2,0.1]
jd2 =表()。值('T',t,'S',s)。概率(pp)
jt_dist = jd2.to_joint()
jt_dist
| T=3 | T=4 | |
|---|---|---|
| S=7 | 0.3 | 0.1 |
| S=6 | 0.2 | 0.2 |
| S=5 | 0.1 | 0.1 |
\(S\) 如何参与 \(E(T)\) 的计算?
注意,要查找 \(E(T)\),您可以使用联合分布表和期望的定义,如下所示:
3 *(0.3 + 0.2 + 0.1)+ 4 *(0.1 + 0.2 + 0.1)
3.4
这相当于转到表格的每个单元格,用单元格中的概率加权该单元格中 \(T\)的值,然后再把它们相加。下面是另一种看待这种情况的方式。
设以 \(S\) 为条件:
jt_dist.conditional_dist('T', 'S')
| T=3 | T=4 | Sum | |
|---|---|---|---|
| Dist. of T | S=7 | 0.75 | 0.25 | 1.0 |
| Dist. of T | S=6 | 0.50 | 0.50 | 1.0 |
| Dist. of T | S=5 | 0.50 | 0.50 | 1.0 |
| Marginal of T | 0.60 | 0.40 | 1.0 |
三个条件分布中的每一个都是一个独立的分布。因此,它的直方图有一个平衡点,就像 \(T\) 的边际分布一样。
jt_dist.conditional_dist('T','S',show_ev = True)
您可以在对应于 \(T\) 分配的行中看到 \(E(T)= 3.4\)。并且您还可以在 \(S\) 的每个可能值下看到 $T $的条件期望值:
- \(~E(T \mid S = 5)= 3.5\)
- \(~E(T \mid S = 6)= 3.5\)
- \(~E(T \mid S = 7)= 3.25\)
$S $的函数的定义:对于 \(S\)的每个值 \(s\),该函数的结果为 \(E(T \mid S = s)\)。
ev_T_given_S = Table()。with_column(
's',s,
'E(T | S = s)',[3.5,3.5,3.25],
'P(S = s)',[0.2,0.4,0.4]
)
ev_T_given_S
| s | E(T | S = s) | P(S = s) |
|---|---|---|
| 5 | 3.5 | 0.2 |
| 6 | 3.5 | 0.4 |
| 7 | 3.25 | 0.4 |
\(S\) 的这个函数在给定 \(S\) 的情况下称为 \(T\) 的条件期望值,并表示为 \(E(T \mid S)\)。与期望值不同,条件期望是随机变量。
由于它是一个随机变量,它有一个期望值,我们可以使用非线性函数规则来计算。答案是您将认识到的数量。
ev = sum(ev_T_given_S.column('E(T | S = s)')* ev_T_given_S.column('P(S = s)')
ev
3.4000000000000004
这是正确的:它是 \(T\) 的期望值。
我们从中学到的是, \(E(T)\)是 \(T\)的条件期望的平均值,给定 \(S\) 的不同值,由这些值的概率加权。
简而言之, \(E(T)\)是 \(S\) 的预期条件期望 \(T\)。
条件期望作为随机变量
通常,假设 \(T\) 和 \(S\) 是概率空间上的两个随机变量。
然后对于 \(s\) 的每个固定值, \(T\) 具有给定 \(S = s\) 的条件分布。这是一个普通的分布,并有一个期望。这被称为 \(T\)的条件期望,给定 $S = s $并且表示为 \(E(T \mid S = s)\)。
所以对于每个 \(s\),有一个值 \(E(T \mid S = s)\)。这定义了随机变量 \(S\)的函数。它被称为 给定 \(S\) 下 \(T\)的条件期望,表示为 \(E(T \mid S)\)。
期望与条件期望之间的关键区别:
- \(E(T)\), \(T\)的预期,是一个实数。
- \(E(T \mid S)\),给定 \(S\) 的 \(T\) 的条件期望是 \(S\) 的函数,因此是一个随机变量。
由于 \(E(T \mid S)\) 是一个随机变量,它有一个期望。这个期望等于 \(E(T)\)。我们曾在一个例子中观察到了这个现象,现在这节是证明。
迭代期望
假设我们想求一个随机变量的期望,并且假设给出相关随机变量的值时我们很容易求出期望是什么。 迭代期望的规则说我们可以首先找到条件期望,用它来找到我们的答案。
形式上,设 S 和 T 为同一空间下的两个随机变量。且 E(T) = E(E(T \mid S)。
证明:
随机求和
设 \(X_1,X_2,\ldots\) 为独立同分布变量,且 \(E(X_1)= \mu_X\)。设 \(N\)是一个取值范围为非负整数的随机变量,它独立于 \(X\)的序列,且 \(E(N)= \mu_N\)。
定义随机总和 \(S\) 为
其中当 \(N = 0\) 时 \(S = 0\)。
请注意, \(S\) 是随机数字的总和。
问题。什么是 \(E(S)\)?
答案。如果 \(N\)是常数 10,那么答案将是 \(10 \mu_X\)。这是我们以 \(N\)为准的信号。以下是要遵循的步骤。
- 固定第一个条件,即 \(N\) 的值。给定 \(N = n\), \(S\) 是 \(n\) 个独立同分布变量的总和。那么
这是实数相等。请注意,对所有 \(n\) 都适用,包括 0。
- 接下来用随机变量表示法写出条件期望。
这是随机变量的相等。
- 现在使用迭代期望。
这是一个自然得出的答案。这就是加入的项的数量的期望值乘以每个项的期望大小。
这是关于通过条件计算期望的重要注意事项。自然的答案往往是正确的。
分支过程中的人口规模
在* Galton-Watson 分支过程*中,每个粒子都有一个随机数的后代。假设不同例子的后代数是均值为 \(\mu\) 的独立同分布变量。假设该过程从第 0 代中的一个粒子开始。
问题。假设没有死亡,那么在世代 0 到 \(n\)中预期的总粒子数是多少?
答案。设 \(T_k\) 为第 \(k\) 代的粒子数。我们假设 \(T_0 = 1\)。通过上面的例子,对 \(k> 1\),有
所以通过归纳,对于每个 \(k> 1\),\(T_k\) 的期望是
其实 k = 0 的结果也符合上式。所以对 n 代总粒子数的期望是
\mu 的值,即单个粒子的后代数的期望,决定了当 n 变大时这个总数期望的变化趋势。在粒子不会死亡的前提下,如果 \mu <1,当 n \to \infty 时,粒子总数的期望趋于一个正常数。但如果 \mu \ge 1 那么粒子总数的期望将会无限大。
条件期望的其他属性
条件期望的最重要属性是我们在本节中研究的迭代。但条件期望具有与期望类似的其他属性。 它们现在表示为随机变量的等式,而不是实数的等式。
浏览列表,你会发现它们都是自然且合理的。证明是常规的;我们不会在这里证明它们。
- 可加性。\(~E(T + U \mid S)= E(T \mid S)+ E(U \mid S)\)
- 线性变换。 \(~E(aT + b \mid S)= aE(T \mid S)+ b\)
另外两个属性形式化了这样一种观点,即给定的变量可以在条件期望中被视为常量。
- “常量”:设 \(g\)成为一个函数。然后 \(E(g(S)\mid S)= g(S)\)。
- “提出常数”: \(~E(g(S)T \mid S)= g(S)E(T \mid S)\)。
例如,
虽然我们真诚地希望你不会遇到这么奇怪的随机变量。
预计等待时间
# 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 scipy import misc
让我们通过条件得出一些期望。下面的所有计算都涉及早期条件下的随机过程。
等到 H 出现
一枚正面落地概率为 \(p\) 的硬币。我们称之为 \(p\) -coin。设 \(X\) 为 \(p\) -coin 第一次正面落地时的抛掷次数。如果像之前一样我们设 \(q = 1-p\),\(X\) 的分布可由下式给出
因为它的项与几何级数中的项形式相同,所以上式被称为 \(1,2,3,\ldots\) 上的几何分布 \((p)\)。下面是一种快速求出 \(E(X)\) 的方法,甚至不用分布的形式。
该方法基于用混合随机变量来表示 \(X\) 的方式:
- 概率为 1 时,必须至少进行一次抛掷。所以 \(X = 1 + Y\),其中 \(Y\) 是第一次抛掷之后的随机抛掷次数。
- 有 \(p\) 的概率第一次投掷是正面,这时 \(Y = 0\)。
- 剩下的概率为 \(q\),即第一次投掷出现反面,然后该过程独立于以前发生的事情重新开始。也就是说,有 \(q\) 的概率, \(Y = X ^ *\) 其中 \(X ^ *\) 是 \(X\) 的独立副本。
因此,通过可加性和平均条件期望,
解出 \(E(X)\):
“直到第一次成功的试验次数”为丰富的例子提供了框架,因为“试验”和“成功”都可以被定义为比投掷硬币和获得正面要复杂得多的设定。一个典型的例子是关于一位教授(或一只猴子)从字母表中的 26 个字母中随机独立抽取,看看他们是否得到了序列datascience。他们将以概率为 1,通过过高估计他们必须进行的抽取次数。
- 将“试验”定义为随机挑选的 11 个字母。
- 将“成功”定义为,随机挑选的 11 个字母组成序列
datascience。
第一次出现datascience为止的试验次数服从参数为 \(p = 1/26 ^ {11}\) 的几何分布,因此期望为 \(26 ^ {11}\)。这意味着可能共有 $26 ^ {11} $11 次抽取,这是一个高估,因为这是排序问题,而不是组合问题。例如,如果第一次包含 11 次抽取的试验以data结束并且下一个试验以science开头,那么你可以得到序列datascience并停止试验,但事实上在我们的计算中这两个块都被称为失败并且试验将继续。
datascience序列没什么特别之处。无论多长时间,你都可以用任何有限的字母代替它。你只需要用字符串的长度替换 11 即可。
等待两个面出现
假设我们抛出 $p $-coin 直到两个面都出现了。设 \(N\)为投掷数量。
问题。什么是 \(E(N)\)?
答案。我们可以通过调整第一次投掷来找到 \(E(N)\),就像我们在上一个例子中所做的那样。
- 概率为 1 时, \(N = 1 + M\) 其中 \(M\) 是第一次投掷之后所需的额外投掷次数。
- 第一次投掷是正面的概率为 \(p\),此时 \(M = W_T\),其中 \(W_T\) 服从几何分布 \((q)\)。
- 第一次投掷是反面的概率为 \(q\),此时 \(M = W_H\),其中 \(W_H\)服从几何分布 \((p)\)。
所以
等到 HH 出现
在 \(p\) -coin 的投掷中,设 \(W_ {HH}\)为抛掷的次数,直到连续出现两个正面。
问题。什么是 \(E(W_ {HH})\)?
**答案 1. **我们可以发现这有几种方法。一种方法是通过条件化前两次投掷。
- 第一次投掷是反面的概率为 \(p\),所以 \(W_ {HH} = 1 + W ^ \*\)其中 \(W ^ \*\)是 \(W_ {HH}\)的独立副本。
- 前两次投掷为 HT 的概率为 \(pq\), \(W_ {HH} = 2 + W ^ {\* \*}\)
其中 \(W ^ {\* \*}\)是 \(W_ {HH}\)的独立副本。 - 概率 \(p ^ 2\),前两个投掷是头, \(W_ {HH} = 2\)。
所以如果 \(x = E(W_{HH})\) 那么
所以
通过重复利用 \(p + q = 1\)。
**答案 2. **另一种方法是调整 \(X\),直到第一个正面出现的投掷次数。我们知道 \(E(X)= 1 / p\)。
注意 \(W_ {HH} = X + Y\),其中 \(Y\)是 \(X\)之后所需的额外投掷次数。
- \(X\)之后的第一次投掷出现正面的概率为 \(p\),此时 \(Y = 1\)。
- \(X\)之后的第一次投掷出现反面的概率为 \(q\),此时 \(Y = 1 + W ^ \*\)
其中 \(W ^ {\* \*}\)是 \(W_ {HH}\)的独立副本。 - 前两次投掷都出现正面的概率为 \(p ^ 2\),此时 \(W_ {HH} = 2\)。
所以,当 \(x = E(W_ {HH})\)时,有
所以
通过重复利用 \(p + q = 1\)代换。
**答案 2. **另一种方法是条件化 \(X\),即直到第一次出现正面的投掷次数。我们知道 \(E(X)= 1 / p\)。
注意 \(W_{HH} = X + Y\) 其中 \(Y\)是 \(X\)之后所需的额外投掷数。
- \(X\)之后的第一次投掷出现正面的概率为 \(p\),此时 \(Y = 1\)。
- \(X\)之后的第一次投掷出现反面的概率为 \(q\),此时 \(Y = 1 + W ^ \*\) 其中 \(W ^ \*\)是 \(W_ {HH}\)的独立副本。
所以,当 \(x = E(W_ {HH})\) 时,有
所以
像之前一样。
赌徒的破产:游戏持续时间
让我们用公平硬币和正整数 \(a < b\) 回到赌徒破产问题的设定。赌徒以 \(a\)美元开始赌注并投掷硬币,直到他的净收益达到 \(b\) 美元或他失去了所有的钱。设 \(T\)成为游戏的持续时间。
问题。游戏的预期持续时间是多少?
答案。设 \(E_k(T)\)表示游戏的预期持续时间,因为赌徒的净收益为 \(k\) 美元。我们想要 \(E_0(T)\)。
通过第一步条件化,我们得到 \(-a + 1 \le k \le b-1\),
边界情况
你可以检查函数 \(f(k)=(b-k)(k-a)\) 是否满足这个递归,因此 \(E_0(T)= ab\)。

有
都有
有
。
。
。
是互斥的(也就是对于所有
,
),那么:





浙公网安备 33010602011771号