22.6. 随机变量
在 Colab 中打开 Notebook
在 Colab 中打开 Notebook
在 Colab 中打开 Notebook
在 Colab 中打开 Notebook
在 SageMaker Studio Lab 中打开 Notebook

第 2.6 节中,我们学习了如何处理离散随机变量的基础知识,在我们的例子中,离散随机变量指的是那些取有限个可能值或整数的随机变量。在本节中,我们发展了*连续随机变量*的理论,即可以取任何实数值的随机变量。

22.6.1. 连续随机变量

连续随机变量是一个比离散随机变量要微妙得多的话题。一个恰当的类比是,技术上的飞跃堪比从数字列表相加到函数积分的飞跃。因此,我们需要花一些时间来发展这个理论。

22.6.1.1. 从离散到连续

为了理解在处理连续随机变量时遇到的额外技术挑战,让我们做一个思想实验。假设我们向一个飞镖靶扔飞镖,我们想知道它击中离靶心正好 \(2 \textrm{cm}\) 的概率。

首先,我们想象以一位数的精度进行测量,也就是说,为\(0 \textrm{cm}\)\(1 \textrm{cm}\)\(2 \textrm{cm}\)等设置区间。我们向飞镖靶投掷比如说\(100\)次飞镖,如果有\(20\)次落入了\(2\textrm{cm}\)的区间,我们得出结论,我们投掷的飞镖中有\(20\%\)击中了离靶心\(2 \textrm{cm}\)远的地方。

然而,仔细观察,这与我们的问题不符!我们想要的是精确相等,而这些区间包含了所有落在比如\(1.5\textrm{cm}\)\(2.5\textrm{cm}\)之间的飞镖。

我们并没有气馁,而是继续前进。我们测量得更精确,比如\(1.9\textrm{cm}\)\(2.0\textrm{cm}\)\(2.1\textrm{cm}\),现在看到\(100\)次飞镖中可能有\(3\)次击中了\(2.0\textrm{cm}\)的区间。因此我们得出结论,概率是\(3\%\)

然而,这并没有解决任何问题!我们只是把问题往后推了一位小数。让我们抽象一点。想象一下,我们知道前\(k\)位数字与\(2.00000\ldots\)匹配的概率,我们想知道它匹配前\(k+1\)位数字的概率。很合理地假设,第\({k+1}^{\textrm{th}}\)位数字基本上是从集合\(\{0, 1, 2, \ldots, 9\}\)中的一个随机选择。至少,我们无法想象一个有物理意义的过程,会使得离中心的微米数更倾向于以\(7\)结尾而不是\(3\)

这意味着,本质上我们每要求一位额外的精度,匹配的概率就会减少\(10\)倍。或者换句话说,我们期望

(22.6.1)\[P(\textrm{距离是}\; 2.00\ldots, \;\textrm{精确到}\; k \;\textrm{位} ) \approx p\cdot10^{-k}.\]

\(p\)基本上编码了前几位数字的情况,而\(10^{-k}\)处理其余部分。

请注意,如果我们知道位置精确到小数点后\(k=4\)位,这意味着我们知道值落在例如\([1.99995,2.00005]\)这个区间内,这是一个长度为\(2.00005-1.99995 = 10^{-4}\)的区间。因此,如果我们称这个区间的长度为\(\epsilon\),我们可以说

(22.6.2)\[P(\textrm{距离在}\; 2 \;\textrm{附近一个大小为}\; \epsilon\textrm{的区间内} ) \approx \epsilon \cdot p.\]

让我们再进一步。我们一直考虑点\(2\),但从未考虑过其他点。那里根本上没有什么不同,但值\(p\)很可能会不同。我们至少希望一个投掷飞镖的人更有可能击中像\(2\textrm{cm}\)这样靠近中心的点,而不是\(20\textrm{cm}\)。因此,值\(p\)不是固定的,而是应该依赖于点\(x\)。这告诉我们应该期望

(22.6.3)\[P(\textrm{距离在}\; x \;\textrm{附近一个大小为}\; \epsilon\textrm{的区间内} ) \approx \epsilon \cdot p(x).\]

确实,(22.6.3)精确地定义了*概率密度函数*。它是一个函数\(p(x)\),它编码了击中一个点附近相对于另一个点附近的相对概率。让我们可视化一下这样一个函数可能是什么样子。

%matplotlib inline
import torch
from IPython import display
from d2l import torch as d2l

torch.pi = torch.acos(torch.zeros(1)).item() * 2  # Define pi in torch

# Plot the probability density function for some random variable
x = torch.arange(-5, 5, 0.01)
p = 0.2*torch.exp(-(x - 3)**2 / 2)/torch.sqrt(2 * torch.tensor(torch.pi)) + \
    0.8*torch.exp(-(x + 1)**2 / 2)/torch.sqrt(2 * torch.tensor(torch.pi))

d2l.plot(x, p, 'x', 'Density')
../_images/output_random-variables_886f4c_3_0.svg
%matplotlib inline
from IPython import display
from mxnet import np, npx
from d2l import mxnet as d2l

npx.set_np()

# Plot the probability density function for some random variable
x = np.arange(-5, 5, 0.01)
p = 0.2*np.exp(-(x - 3)**2 / 2)/np.sqrt(2 * np.pi) + \
    0.8*np.exp(-(x + 1)**2 / 2)/np.sqrt(2 * np.pi)

d2l.plot(x, p, 'x', 'Density')
[22:06:14] ../src/storage/storage.cc:196: Using Pooled (Naive) StorageManager for CPU
../_images/output_random-variables_886f4c_6_1.svg
%matplotlib inline
import tensorflow as tf
from IPython import display
from d2l import tensorflow as d2l

tf.pi = tf.acos(tf.zeros(1)).numpy() * 2  # Define pi in TensorFlow

# Plot the probability density function for some random variable
x = tf.range(-5, 5, 0.01)
p = 0.2*tf.exp(-(x - 3)**2 / 2)/tf.sqrt(2 * tf.constant(tf.pi)) + \
    0.8*tf.exp(-(x + 1)**2 / 2)/tf.sqrt(2 * tf.constant(tf.pi))

d2l.plot(x, p, 'x', 'Density')
../_images/output_random-variables_886f4c_9_0.svg

函数值大的位置表示我们更有可能找到随机值的区域。函数值低的部分是我们不太可能找到随机值的区域。

22.6.1.2. 概率密度函数

现在让我们进一步研究这个问题。我们已经直观地看到了一个随机变量\(X\)的概率密度函数是什么,即密度函数是一个函数\(p(x)\),使得

(22.6.4)\[P(X \;\textrm{在}\; x \;\textrm{附近一个大小为}\; \epsilon\textrm{的区间内} ) \approx \epsilon \cdot p(x).\]

但这对于\(p(x)\)的性质意味着什么呢?

首先,概率永远不为负,因此我们应该期望\(p(x) \ge 0\)

其次,让我们想象一下,我们将\(\mathbb{R}\)切成无数个宽度为\(\epsilon\)的切片,比如切片为\((\epsilon\cdot i, \epsilon \cdot (i+1)]\)。对于每一个这样的切片,我们从(22.6.4)知道概率大约是

(22.6.5)\[P(X \;\textrm{在}\; x \;\textrm{附近一个大小为}\; \epsilon\textrm{的区间内} ) \approx \epsilon \cdot p(\epsilon \cdot i),\]

所以将它们全部相加,结果应该是

(22.6.6)\[P(X\in\mathbb{R}) \approx \sum_i \epsilon \cdot p(\epsilon\cdot i).\]

这不过是第 22.5 节中讨论的积分近似,因此我们可以说

(22.6.7)\[P(X\in\mathbb{R}) = \int_{-\infty}^{\infty} p(x) \; dx.\]

我们知道\(P(X\in\mathbb{R}) = 1\),因为随机变量必须取*某个*数值,所以我们可以得出结论,对于任何密度

(22.6.8)\[\int_{-\infty}^{\infty} p(x) \; dx = 1.\]

确实,进一步深入研究表明,对于任何\(a\)\(b\),我们看到

(22.6.9)\[P(X\in(a, b]) = \int _ {a}^{b} p(x) \; dx.\]

我们可以用之前相同的离散近似方法在代码中近似这个概率。在这种情况下,我们可以近似落在蓝色区域的概率。

# Approximate probability using numerical integration
epsilon = 0.01
x = torch.arange(-5, 5, 0.01)
p = 0.2*torch.exp(-(x - 3)**2 / 2) / torch.sqrt(2 * torch.tensor(torch.pi)) +\
    0.8*torch.exp(-(x + 1)**2 / 2) / torch.sqrt(2 * torch.tensor(torch.pi))

d2l.set_figsize()
d2l.plt.plot(x, p, color='black')
d2l.plt.fill_between(x.tolist()[300:800], p.tolist()[300:800])
d2l.plt.show()

f'approximate Probability: {torch.sum(epsilon*p[300:800])}'
../_images/output_random-variables_886f4c_15_0.svg
'approximate Probability: 0.773617148399353'
# Approximate probability using numerical integration
epsilon = 0.01
x = np.arange(-5, 5, 0.01)
p = 0.2*np.exp(-(x - 3)**2 / 2) / np.sqrt(2 * np.pi) + \
    0.8*np.exp(-(x + 1)**2 / 2) / np.sqrt(2 * np.pi)

d2l.set_figsize()
d2l.plt.plot(x, p, color='black')
d2l.plt.fill_between(x.tolist()[300:800], p.tolist()[300:800])
d2l.plt.show()

f'approximate Probability: {np.sum(epsilon*p[300:800])}'
../_images/output_random-variables_886f4c_18_0.svg
'approximate Probability: 0.7736172080039978'
# Approximate probability using numerical integration
epsilon = 0.01
x = tf.range(-5, 5, 0.01)
p = 0.2*tf.exp(-(x - 3)**2 / 2) / tf.sqrt(2 * tf.constant(tf.pi)) +\
    0.8*tf.exp(-(x + 1)**2 / 2) / tf.sqrt(2 * tf.constant(tf.pi))

d2l.set_figsize()
d2l.plt.plot(x, p, color='black')
d2l.plt.fill_between(x.numpy().tolist()[300:800], p.numpy().tolist()[300:800])
d2l.plt.show()

f'approximate Probability: {tf.reduce_sum(epsilon*p[300:800])}'
../_images/output_random-variables_886f4c_21_0.svg
'approximate Probability: 0.7736172080039978'

事实证明,这两个属性恰好描述了所有可能的概率密度函数(或简称*p.d.f.*)的空间。它们是非负函数\(p(x) \ge 0\),并且满足

(22.6.10)\[\int_{-\infty}^{\infty} p(x) \; dx = 1.\]

我们通过使用积分来解释这个函数,以获得我们的随机变量在特定区间内的概率

(22.6.11)\[P(X\in(a, b]) = \int _ {a}^{b} p(x) \; dx.\]

第 22.8 节中,我们将看到一些常见的分布,但让我们继续在抽象的层面上工作。

22.6.1.3. 累积分布函数

在上一节中,我们看到了 p.d.f. 的概念。在实践中,这是讨论连续随机变量的常用方法,但它有一个显著的缺陷:p.d.f. 的值本身不是概率,而是一个我们必须积分才能得到概率的函数。密度大于\(10\)并没有什么问题,只要它在长度超过\(1/10\)的区间上不大于\(10\)。这可能违反直觉,所以人们也常常从*累积分布函数*(c.d.f.)的角度思考,它*是*一个概率。

具体来说,通过使用(22.6.11),我们为一个具有密度\(p(x)\)的随机变量\(X\)定义 c.d.f.为

(22.6.12)\[F(x) = \int _ {-\infty}^{x} p(x) \; dx = P(X \le x).\]

让我们观察一些性质。

  • \(x\rightarrow -\infty\)时,\(F(x) \rightarrow 0\)

  • \(x\rightarrow \infty\)时,\(F(x) \rightarrow 1\)

  • \(F(x)\)是单调不减的(\(y > x \implies F(y) \ge F(x)\))。

  • 如果\(X\)是一个连续随机变量,则\(F(x)\)是连续的(没有跳跃)。

关于第四点,请注意如果\(X\)是离散的,比如说以\(1/2\)的概率取值\(0\)\(1\),那么这就不成立。在这种情况下

(22.6.13)\[\begin{split}F(x) = \begin{cases} 0 & x < 0, \\ \frac{1}{2} & x < 1, \\ 1 & x \ge 1. \end{cases}\end{split}\]

在这个例子中,我们看到了使用 c.d.f. 的一个好处,即能够在同一个框架下处理连续或离散的随机变量,甚至是两者的混合(抛硬币:如果正面朝上,返回一个骰子的点数;如果反面朝上,返回一个飞镖投掷离靶心的距离)。

22.6.1.4. 均值

假设我们正在处理一个随机变量\(X\)。分布本身可能很难解释。能够简明地总结随机变量的行为通常很有用。帮助我们捕捉随机变量行为的数字被称为*摘要统计*。最常见的是*均值*、*方差*和*标准差*。

*均值*编码了随机变量的平均值。如果我们有一个离散随机变量\(X\),它以概率\(p_i\)取值\(x_i\),那么均值由加权平均给出:将值乘以随机变量取该值的概率,然后求和

(22.6.14)\[\mu_X = E[X] = \sum_i x_i p_i.\]

我们应该(尽管要谨慎)这样解释均值:它告诉我们随机变量倾向于位于哪里。

作为一个我们将在本节中一直研究的极简例子,让我们假设\(X\)是一个随机变量,它以概率\(p\)取值\(a-2\),以概率\(p\)取值\(a+2\),并以概率\(1-2p\)取值\(a\)。我们可以使用(22.6.14)计算出,对于任何\(a\)\(p\)的可能选择,均值为

(22.6.15)\[\mu_X = E[X] = \sum_i x_i p_i = (a-2)p + a(1-2p) + (a+2)p = a.\]

因此我们看到均值是\(a\)。这与直觉相符,因为\(a\)是我们随机变量的中心位置。

因为它们很有用,我们总结一些属性。

  • 对于任何随机变量\(X\)和数字\(a\)\(b\),我们有\(\mu_{aX+b} = a\mu_X + b\)

  • 如果我们有两个随机变量\(X\)\(Y\),我们有\(\mu_{X+Y} = \mu_X+\mu_Y\)

均值对于理解随机变量的平均行为很有用,但是仅有均值甚至不足以获得完整的直观理解。每次销售盈利\(\$10 \pm \$1\)与每次销售盈利\(\$10 \pm \$15\)大相径庭,尽管它们的平均值相同。后者有更大的波动程度,因此代表了更大的风险。因此,为了理解随机变量的行为,我们至少还需要一个度量:一个衡量随机变量波动宽度的度量。

22.6.1.5. 方差

这让我们考虑随机变量的*方差*。这是一个衡量随机变量偏离其均值多远的定量度量。考虑表达式\(X - \mu_X\)。这是随机变量与其均值的偏差。这个值可以是正的也可以是负的,所以我们需要做些什么来使它为正,以便我们测量偏差的大小。

一个合理的尝试是看\(\left|X-\mu_X\right|\),这确实引出了一个有用的量,称为*平均绝对偏差*,但由于与数学和统计学的其他领域有联系,人们通常使用不同的解决方案。

特别是,他们看的是\((X-\mu_X)^2.\) 如果我们通过取均值来看这个量的典型大小,我们就得到了方差

(22.6.16)\[\sigma_X^2 = \textrm{Var}(X) = E\left[(X-\mu_X)^2\right] = E[X^2] - \mu_X^2.\]

(22.6.16)中的最后一个等式通过展开中间的定义并应用期望的性质而成立。

让我们来看我们的例子,其中\(X\)是这样一个随机变量:它以概率\(p\)取值为\(a-2\),以概率\(p\)取值为\(a+2\),以概率\(1-2p\)取值为\(a\)。在这种情况下,\(\mu_X = a\),所以我们只需要计算\(E\left[X^2\right]\)。这可以很容易地完成:

(22.6.17)\[E\left[X^2\right] = (a-2)^2p + a^2(1-2p) + (a+2)^2p = a^2 + 8p.\]

因此,根据(22.6.16),我们看到我们的方差是

(22.6.18)\[\sigma_X^2 = \textrm{Var}(X) = E[X^2] - \mu_X^2 = a^2 + 8p - a^2 = 8p.\]

这个结果也很有道理。\(p\)能取到的最大值是\(1/2\),这对应于通过抛硬币来选择\(a-2\)\(a+2\)。它的方差是\(4\),这对应于\(a-2\)\(a+2\)都离均值\(2\)个单位,并且\(2^2 = 4\)。在另一端,如果\(p=0\),这个随机变量总是取值\(0\),所以它根本没有方差。

下面我们列出一些方差的性质

  • 对于任何随机变量\(X\)\(\textrm{Var}(X) \ge 0\),并且\(\textrm{Var}(X) = 0\)当且仅当\(X\)是一个常数。

  • 对于任何随机变量\(X\)以及数字\(a\)\(b\),我们有\(\textrm{Var}(aX+b) = a^2\textrm{Var}(X)\)

  • 如果我们有两个*独立*的随机变量\(X\)\(Y\),我们有\(\textrm{Var}(X+Y) = \textrm{Var}(X) + \textrm{Var}(Y)\)

在解释这些值时,可能会有一点小问题。特别是,让我们想象一下,如果我们在整个计算过程中都跟踪单位,会发生什么。假设我们正在处理网页上给产品的星级评分。那么\(a\)\(a-2\)\(a+2\)都是以星为单位来衡量的。同样,均值\(\mu_X\)也是以星为单位(作为一个加权平均值)。然而,如果我们计算到方差,我们立刻会遇到一个问题,那就是我们要看\((X-\mu_X)^2\),它的单位是*平方星*。这意味着方差本身与原始测量值是不可比的。为了让它具有可解释性,我们需要回到我们的原始单位。

22.6.1.6. 标准差

这个摘要统计量总是可以通过对方差取平方根来得到!因此,我们定义*标准差*为

(22.6.19)\[\sigma_X = \sqrt{\textrm{Var}(X)}.\]

在我们的例子中,这意味着现在的标准差是\(\sigma_X = 2\sqrt{2p}\)。如果我们在我们的评论例子中处理星级单位,\(\sigma_X\)的单位也再次是星级。

我们之前为方差列出的性质可以为标准差重新陈述。

  • 对于任何随机变量\(X\)\(\sigma_{X} \ge 0\)

  • 对于任何随机变量\(X\)和数字\(a\)\(b\),我们有\(\sigma_{aX+b} = |a|\sigma_{X}\)

  • 如果我们有两个*独立*的随机变量\(X\)\(Y\),我们有\(\sigma_{X+Y} = \sqrt{\sigma_{X}^2 + \sigma_{Y}^2}\)

此时很自然地会问,“如果标准差的单位与我们原始随机变量的单位相同,它是否代表了我们可以就该随机变量绘制出来的东西?”答案是肯定的!事实上,就像均值告诉我们随机变量的典型位置一样,标准差给出了该随机变量变化的典型范围。我们可以用所谓的切比雪夫不等式来严格化这一点

(22.6.20)\[P\left(X \not\in [\mu_X - \alpha\sigma_X, \mu_X + \alpha\sigma_X]\right) \le \frac{1}{\alpha^2}.\]

或者用口头语来陈述,在\(\alpha=10\)的情况下,任何随机变量的\(99\%\)的样本都落在均值的\(10\)个标准差范围内。这为我们的标准摘要统计量提供了一个直接的解释。

为了看看这个陈述是多么微妙,让我们再看一下我们的运行示例,其中\(X\)是以概率\(p\)取值\(a-2\),以概率\(p\)取值\(a+2\),以及以概率\(1-2p\)取值\(a\)的随机变量。我们看到均值是\(a\),标准差是\(2\sqrt{2p}\)。这意味着,如果我们取\(\alpha=2\)的切比雪夫不等式(22.6.20),我们看到表达式是

(22.6.21)\[P\left(X \not\in [a - 4\sqrt{2p}, a + 4\sqrt{2p}]\right) \le \frac{1}{4}.\]

这意味着对于任何\(p\)的值,这个随机变量有\(75\%\)的时间会落在这个区间内。现在,请注意,当\(p \rightarrow 0\)时,这个区间也收敛到单一点\(a\)。但我们知道我们的随机变量只取值\(a-2, a\)\(a+2\),所以最终我们可以确定\(a-2\)\(a+2\)会落在这个区间之外!问题是,这在哪个\(p\)值时发生。所以我们想要求解:对于什么\(p\),有\(a+4\sqrt{2p} = a+2\),这在\(p=1/8\)时求解,这*正是*第一个可能发生这种情况的\(p\)值,而不会违反我们的声明,即分布中不超过\(1/4\)的样本会落在区间之外(左边\(1/8\),右边\(1/8\))。

让我们将此可视化。我们将以三个与概率成正比的高度的垂直条形图显示获得这三个值的概率。该区间将作为中间的水平线绘制。第一张图显示了当\(p > 1/8\)时的情况,此时区间安全地包含了所有点。

# Define a helper to plot these figures
def plot_chebyshev(a, p):
    d2l.set_figsize()
    d2l.plt.stem([a-2, a, a+2], [p, 1-2*p, p], use_line_collection=True)
    d2l.plt.xlim([-4, 4])
    d2l.plt.xlabel('x')
    d2l.plt.ylabel('p.m.f.')

    d2l.plt.hlines(0.5, a - 4 * torch.sqrt(2 * p),
                   a + 4 * torch.sqrt(2 * p), 'black', lw=4)
    d2l.plt.vlines(a - 4 * torch.sqrt(2 * p), 0.53, 0.47, 'black', lw=1)
    d2l.plt.vlines(a + 4 * torch.sqrt(2 * p), 0.53, 0.47, 'black', lw=1)
    d2l.plt.title(f'p = {p:.3f}')

    d2l.plt.show()

# Plot interval when p > 1/8
plot_chebyshev(0.0, torch.tensor(0.2))
../_images/output_random-variables_886f4c_27_0.svg
# Define a helper to plot these figures
def plot_chebyshev(a, p):
    d2l.set_figsize()
    d2l.plt.stem([a-2, a, a+2], [p, 1-2*p, p], use_line_collection=True)
    d2l.plt.xlim([-4, 4])
    d2l.plt.xlabel('x')
    d2l.plt.ylabel('p.m.f.')

    d2l.plt.hlines(0.5, a - 4 * np.sqrt(2 * p),
                   a + 4 * np.sqrt(2 * p), 'black', lw=4)
    d2l.plt.vlines(a - 4 * np.sqrt(2 * p), 0.53, 0.47, 'black', lw=1)
    d2l.plt.vlines(a + 4 * np.sqrt(2 * p), 0.53, 0.47, 'black', lw=1)
    d2l.plt.title(f'p = {p:.3f}')

    d2l.plt.show()

# Plot interval when p > 1/8
plot_chebyshev(0.0, 0.2)
../_images/output_random-variables_886f4c_30_0.svg
# Define a helper to plot these figures
def plot_chebyshev(a, p):
    d2l.set_figsize()
    d2l.plt.stem([a-2, a, a+2], [p, 1-2*p, p], use_line_collection=True)
    d2l.plt.xlim([-4, 4])
    d2l.plt.xlabel('x')
    d2l.plt.ylabel('p.m.f.')

    d2l.plt.hlines(0.5, a - 4 * tf.sqrt(2 * p),
                   a + 4 * tf.sqrt(2 * p), 'black', lw=4)
    d2l.plt.vlines(a - 4 * tf.sqrt(2 * p), 0.53, 0.47, 'black', lw=1)
    d2l.plt.vlines(a + 4 * tf.sqrt(2 * p), 0.53, 0.47, 'black', lw=1)
    d2l.plt.title(f'p = {p:.3f}')

    d2l.plt.show()

# Plot interval when p > 1/8
plot_chebyshev(0.0, tf.constant(0.2))
../_images/output_random-variables_886f4c_33_0.svg

第二张图显示,在\(p = 1/8\)时,区间恰好接触到两个点。这表明这个不等式是*紧*的,因为在保持不等式为真的情况下,不可能取更小的区间。

# Plot interval when p = 1/8
plot_chebyshev(0.0, torch.tensor(0.125))
../_images/output_random-variables_886f4c_39_0.svg
# Plot interval when p = 1/8
plot_chebyshev(0.0, 0.125)
../_images/output_random-variables_886f4c_42_0.svg
# Plot interval when p = 1/8
plot_chebyshev(0.0, tf.constant(0.125))
../_images/output_random-variables_886f4c_45_0.svg

第三张图显示,当\(p < 1/8\)时,区间只包含中心点。这并没有使不等式失效,因为我们只需要确保不超过\(1/4\)的概率落在区间之外,这意味着一旦\(p < 1/8\),位于\(a-2\)\(a+2\)的两个点可以被舍弃。

# Plot interval when p < 1/8
plot_chebyshev(0.0, torch.tensor(0.05))
../_images/output_random-variables_886f4c_51_0.svg
# Plot interval when p < 1/8
plot_chebyshev(0.0, 0.05)
../_images/output_random-variables_886f4c_54_0.svg
# Plot interval when p < 1/8
plot_chebyshev(0.0, tf.constant(0.05))
../_images/output_random-variables_886f4c_57_0.svg

22.6.1.7. 连续随机变量的均值和方差

以上都是关于离散随机变量的,但连续随机变量的情况类似。为了直观地理解其工作原理,想象一下我们将实数线分成长度为\(\epsilon\)的区间,由\((\epsilon i, \epsilon (i+1)]\)给出。一旦我们这样做,我们的连续随机变量就变得离散了,我们可以使用(22.6.14)来说

(22.6.22)\[\begin{split}\begin{aligned} \mu_X & \approx \sum_{i} (\epsilon i)P(X \in (\epsilon i, \epsilon (i+1)]) \\ & \approx \sum_{i} (\epsilon i)p_X(\epsilon i)\epsilon, \\ \end{aligned}\end{split}\]

其中\(p_X\)\(X\)的密度。这是\(xp_X(x)\)的积分的近似,所以我们可以得出结论:

(22.6.23)\[\mu_X = \int_{-\infty}^\infty xp_X(x) \; dx.\]

类似地,使用(22.6.16),方差可以写成

(22.6.24)\[\sigma^2_X = E[X^2] - \mu_X^2 = \int_{-\infty}^\infty x^2p_X(x) \; dx - \left(\int_{-\infty}^\infty xp_X(x) \; dx\right)^2.\]

上面关于均值、方差和标准差的一切,在这种情况下仍然适用。例如,如果我们考虑密度为

(22.6.25)\[\begin{split}p(x) = \begin{cases} 1 & x \in [0,1], \\ 0 & \textrm{其它}. \end{cases}\end{split}\]

我们可以计算

(22.6.26)\[\mu_X = \int_{-\infty}^\infty xp(x) \; dx = \int_0^1 x \; dx = \frac{1}{2}.\]

(22.6.27)\[\sigma_X^2 = \int_{-\infty}^\infty x^2p(x) \; dx - \left(\frac{1}{2}\right)^2 = \frac{1}{3} - \frac{1}{4} = \frac{1}{12}.\]

作为一个警告,让我们再看一个例子,称为*柯西分布*。这是一个p.d.f.由下式给出的分布

(22.6.28)\[p(x) = \frac{1}{1+x^2}.\]
# Plot the Cauchy distribution p.d.f.
x = torch.arange(-5, 5, 0.01)
p = 1 / (1 + x**2)

d2l.plot(x, p, 'x', 'p.d.f.')
../_images/output_random-variables_886f4c_63_0.svg
# Plot the Cauchy distribution p.d.f.
x = np.arange(-5, 5, 0.01)
p = 1 / (1 + x**2)

d2l.plot(x, p, 'x', 'p.d.f.')
../_images/output_random-variables_886f4c_66_0.svg
# Plot the Cauchy distribution p.d.f.
x = tf.range(-5, 5, 0.01)
p = 1 / (1 + x**2)

d2l.plot(x, p, 'x', 'p.d.f.')
../_images/output_random-variables_886f4c_69_0.svg

这个函数看起来很无害,事实上,查阅积分表会发现它下面的面积为1,因此它定义了一个连续随机变量。

为了看看哪里出了问题,让我们尝试计算它的方差。这将涉及使用(22.6.16)计算

(22.6.29)\[\int_{-\infty}^\infty \frac{x^2}{1+x^2}\; dx.\]

里面的函数看起来是这样的

# Plot the integrand needed to compute the variance
x = torch.arange(-20, 20, 0.01)
p = x**2 / (1 + x**2)

d2l.plot(x, p, 'x', 'integrand')
../_images/output_random-variables_886f4c_75_0.svg
# Plot the integrand needed to compute the variance
x = np.arange(-20, 20, 0.01)
p = x**2 / (1 + x**2)

d2l.plot(x, p, 'x', 'integrand')
../_images/output_random-variables_886f4c_78_0.svg
# Plot the integrand needed to compute the variance
x = tf.range(-20, 20, 0.01)
p = x**2 / (1 + x**2)

d2l.plot(x, p, 'x', 'integrand')
../_images/output_random-variables_886f4c_81_0.svg

这个函数显然在它下面的面积是无穷大的,因为它基本上是常数1,在零附近有一个小凹陷,事实上我们可以证明

(22.6.30)\[\int_{-\infty}^\infty \frac{x^2}{1+x^2}\; dx = \infty.\]

这意味着它没有一个明确定义的有限方差。

然而,更深入的研究揭示了一个更令人不安的结果。让我们尝试使用(22.6.14)来计算均值。使用换元法,我们看到

(22.6.31)\[\mu_X = \int_{-\infty}^{\infty} \frac{x}{1+x^2} \; dx = \frac{1}{2}\int_1^\infty \frac{1}{u} \; du.\]

里面的积分是对数的定义,所以这本质上是\(\log(\infty) = \infty\),所以也没有明确定义的平均值!

机器学习科学家定义他们的模型,使得我们大多数时候不需要处理这些问题,并且在绝大多数情况下处理具有明确定义的均值和方差的随机变量。然而,偶尔具有*重尾*的随机变量(即那些获得大值的概率大到足以使均值或方差等量未定义的随机变量)在模拟物理系统时是有用的,因此值得知道它们的存在。

22.6.1.8. 联合密度函数

以上工作都假设我们处理的是单个实值随机变量。但是如果我们处理的是两个或多个可能高度相关的随机变量呢?这种情况在机器学习中是常态:想象一下像\(R_{i, j}\)这样的随机变量,它编码了图像中坐标\((i, j)\)处像素的红色值,或者\(P_t\)是一个由时间\(t\)的股价给出的随机变量。附近的像素倾向于有相似的颜色,附近的时间倾向于有相似的价格。我们不能将它们视为独立的随机变量,并期望创建一个成功的模型(我们将在第 22.9 节中看到一个由于这样的假设而表现不佳的模型)。我们需要发展数学语言来处理这些相关的连续随机变量。

值得庆幸的是,利用第 22.5 节中的多重积分,我们可以发展出这样一种语言。假设,为简单起见,我们有两个可以相关的随机变量\(X, Y\)。那么,类似于单个变量的情况,我们可以问这样一个问题

(22.6.32)\[P(X \;\textrm{在}\; x \;\textrm{附近一个大小为}\; \epsilon \textrm{的区间内,并且}\; Y \;\textrm{在}\; y \;\textrm{附近一个大小为}\; \epsilon \textrm{的区间内}).\]

与单变量情况类似的推理表明,这应该近似于

(22.6.33)\[P(X \;\textrm{在}\; x \;\textrm{附近一个大小为}\; \epsilon \textrm{的区间内,并且}\; Y \;\textrm{在}\; y \;\textrm{附近一个大小为}\; \epsilon \textrm{的区间内}) \approx \epsilon^{2}p(x, y),\]

对于某个函数\(p(x, y)\)。这被称为\(X\)\(Y\)的联合密度。与我们在单变量情况下看到的相似的性质也适用于此。即

  • \(p(x, y) \ge 0\);

  • \(\int _ {\mathbb{R}^2} p(x, y) \;dx \;dy = 1\);

  • \(P((X, Y) \in \mathcal{D}) = \int _ {\mathcal{D}} p(x, y) \;dx \;dy\).

通过这种方式,我们可以处理多个、可能相关的随机变量。如果我们希望处理两个以上的随机变量,我们可以通过考虑\(p(\mathbf{x}) = p(x_1, \ldots, x_n)\)来将多元密度扩展到任意多个坐标。非负性和总积分为一的性质仍然成立。

22.6.1.9. 边缘分布

在处理多个变量时,我们常常希望能够忽略它们之间的关系,而只问:“这个变量是如何分布的?”这样的分布被称为*边缘分布*。

具体来说,假设我们有两个随机变量\(X, Y\),它们的联合密度由\(p _ {X, Y}(x, y)\)给出。我们将使用下标来表示密度是针对哪些随机变量的。寻找边缘分布的问题就是利用这个函数来找到\(p _ X(x)\)

与大多数事情一样,最好回到直观的图景来弄清楚应该是什么。回想一下,密度是函数\(p _ X\),使得

(22.6.34)\[P(X \in [x, x+\epsilon]) \approx \epsilon \cdot p _ X(x).\]

这里没有提到\(Y\),但如果我们只给定了\(p _{X, Y}\),我们就需要以某种方式包含\(Y\)。我们可以首先观察到这与下式相同

(22.6.35)\[P(X \in [x, x+\epsilon] \textrm{,并且 } Y \in \mathbb{R}) \approx \epsilon \cdot p _ X(x).\]

我们的密度没有直接告诉我们这种情况会发生什么,我们还需要在\(y\)上分成小区间,所以我们可以写成

(22.6.36)\[\begin{split}\begin{aligned} \epsilon \cdot p _ X(x) & \approx \sum _ {i} P(X \in [x, x+\epsilon] \textrm{,并且 } Y \in [\epsilon \cdot i, \epsilon \cdot (i+1)]) \\ & \approx \sum _ {i} \epsilon^{2} p _ {X, Y}(x, \epsilon\cdot i). \end{aligned}\end{split}\]
../_images/marginal.svg

图 22.6.1 通过沿概率数组的列求和,我们能够获得仅沿\(\mathit{x}\)轴表示的随机变量的边缘分布。

这告诉我们要沿着一系列正方形的密度值相加,如图 22.6.1所示。确实,在从两边消去一个epsilon因子,并认识到右边的和是关于\(y\)的积分后,我们可以得出结论

(22.6.37)\[\begin{split}\begin{aligned} p _ X(x) & \approx \sum _ {i} \epsilon p _ {X, Y}(x, \epsilon\cdot i) \\ & \approx \int_{-\infty}^\infty p_{X, Y}(x, y) \; dy. \end{aligned}\end{split}\]

因此我们看到

(22.6.38)\[p _ X(x) = \int_{-\infty}^\infty p_{X, Y}(x, y) \; dy.\]

这告诉我们,要获得边缘分布,我们对我们不关心的变量进行积分。这个过程通常被称为对不需要的变量进行*积分消除*或*边缘化*。

22.6.1.10. 协方差

在处理多个随机变量时,还有一个额外的摘要统计量很有用:*协方差*。它衡量两个随机变量一起波动的程度。

假设我们有两个随机变量\(X\)\(Y\),首先,假设它们是离散的,以概率\(p_{ij}\)取值为\((x_i, y_j)\)。在这种情况下,协方差定义为

(22.6.39)\[\sigma_{XY} = \textrm{Cov}(X, Y) = \sum_{i, j} (x_i - \mu_X) (y_j-\mu_Y) p_{ij}. = E[XY] - E[X]E[Y].\]

为了直观地理解这一点:考虑下面这对随机变量。假设\(X\)取值为\(1\)\(3\)\(Y\)取值为\(-1\)\(3\)。假设我们有以下概率

(22.6.40)\[\begin{split}\begin{aligned} P(X = 1 \; \textrm{且} \; Y = -1) & = \frac{p}{2}, \\ P(X = 1 \; \textrm{且} \; Y = 3) & = \frac{1-p}{2}, \\ P(X = 3 \; \textrm{且} \; Y = -1) & = \frac{1-p}{2}, \\ P(X = 3 \; \textrm{且} \; Y = 3) & = \frac{p}{2}, \end{aligned}\end{split}\]

其中\(p\)是我们可以选择的在\([0,1]\)区间内的参数。注意,如果\(p=1\),那么它们总是同时取到最小值或最大值;如果\(p=0\),它们保证同时取到相反的值(一个大时另一个小,反之亦然)。如果\(p=1/2\),那么四种可能性都是等可能的,两者应该没有关系。让我们计算协方差。首先,注意\(\mu_X = 2\)\(\mu_Y = 1\),所以我们可以用(22.6.39)来计算

(22.6.41)\[\begin{split}\begin{aligned} \textrm{Cov}(X, Y) & = \sum_{i, j} (x_i - \mu_X) (y_j-\mu_Y) p_{ij} \\ & = (1-2)(-1-1)\frac{p}{2} + (1-2)(3-1)\frac{1-p}{2} + (3-2)(-1-1)\frac{1-p}{2} + (3-2)(3-1)\frac{p}{2} \\ & = 4p-2. \end{aligned}\end{split}\]

\(p=1\)时(即它们同时达到最大正值或负值的情况),协方差为\(2\)。当\(p=0\)时(即它们是相反的情况),协方差为\(-2\)。最后,当\(p=1/2\)时(即它们不相关的情况),协方差为\(0\)。因此我们看到协方差衡量了这两个随机变量是如何相关的。

关于协方差的一个简短说明是,它只衡量这些线性关系。更复杂的关系,如\(X = Y^2\),其中\(Y\)是从\(\{-2, -1, 0, 1, 2\}\)中以等概率随机选择的,可能会被忽略。事实上,一个快速的计算表明,这些随机变量的协方差为零,尽管一个是另一个的确定性函数。

对于连续随机变量,情况大体相同。到目前为止,我们已经很习惯在离散和连续之间进行转换,所以我们将不加任何推导地提供(22.6.39)的连续模拟。

(22.6.42)\[\sigma_{XY} = \int_{\mathbb{R}^2} (x-\mu_X)(y-\mu_Y)p(x, y) \;dx \;dy.\]

为了可视化,让我们看一组具有可调协方差的随机变量。

# Plot a few random variables adjustable covariance
covs = [-0.9, 0.0, 1.2]
d2l.plt.figure(figsize=(12, 3))
for i in range(3):
    X = torch.randn(500)
    Y = covs[i]*X + torch.randn(500)

    d2l.plt.subplot(1, 4, i+1)
    d2l.plt.scatter(X.numpy(), Y.numpy())
    d2l.plt.xlabel('X')
    d2l.plt.ylabel('Y')
    d2l.plt.title(f'cov = {covs[i]}')
d2l.plt.show()
../_images/output_random-variables_886f4c_87_0.svg
# Plot a few random variables adjustable covariance
covs = [-0.9, 0.0, 1.2]
d2l.plt.figure(figsize=(12, 3))
for i in range(3):
    X = np.random.normal(0, 1, 500)
    Y = covs[i]*X + np.random.normal(0, 1, (500))

    d2l.plt.subplot(1, 4, i+1)
    d2l.plt.scatter(X.asnumpy(), Y.asnumpy())
    d2l.plt.xlabel('X')
    d2l.plt.ylabel('Y')
    d2l.plt.title(f'cov = {covs[i]}')
d2l.plt.show()
../_images/output_random-variables_886f4c_90_0.svg
# Plot a few random variables adjustable covariance
covs = [-0.9, 0.0, 1.2]
d2l.plt.figure(figsize=(12, 3))
for i in range(3):
    X = tf.random.normal((500, ))
    Y = covs[i]*X + tf.random.normal((500, ))

    d2l.plt.subplot(1, 4, i+1)
    d2l.plt.scatter(X.numpy(), Y.numpy())
    d2l.plt.xlabel('X')
    d2l.plt.ylabel('Y')
    d2l.plt.title(f'cov = {covs[i]}')
d2l.plt.show()
../_images/output_random-variables_886f4c_93_0.svg

让我们看看协方差的一些性质

  • 对于任何随机变量\(X\)\(\textrm{Cov}(X, X) = \textrm{Var}(X)\)

  • 对于任何随机变量\(X, Y\)和数字\(a\)\(b\)\(\textrm{Cov}(aX+b, Y) = \textrm{Cov}(X, aY+b) = a\textrm{Cov}(X, Y)\)

  • 如果\(X\)\(Y\)是独立的,那么\(\textrm{Cov}(X, Y) = 0\)

此外,我们可以用协方差来扩展我们之前看到的一个关系。回想一下,如果\(X\)\(Y\)是两个独立的随机变量,那么

(22.6.43)\[\textrm{Var}(X+Y) = \textrm{Var}(X) + \textrm{Var}(Y).\]

有了协方差的知识,我们可以扩展这个关系。实际上,一些代数可以表明,在一般情况下,

(22.6.44)\[\textrm{Var}(X+Y) = \textrm{Var}(X) + \textrm{Var}(Y) + 2\textrm{Cov}(X, Y).\]

这使我们能够将方差求和规则推广到相关的随机变量。

22.6.1.11. 相关性

就像我们在均值和方差的情况下所做的那样,现在让我们考虑单位。如果\(X\)以一个单位(比如英寸)来衡量,而\(Y\)以另一个单位(比如美元)来衡量,那么协方差就以这两个单位的乘积\(\textrm{英寸} \times \textrm{美元}\)来衡量。这些单位可能很难解释。在这种情况下,我们通常想要的是一个无单位的相关性度量。事实上,我们常常不关心确切的定量相关性,而是问相关性是否在同一方向上,以及关系的强度如何。

为了看看什么是有意义的,让我们做一个思想实验。假设我们将我们的随机变量从英寸和美元转换为英寸和美分。在这种情况下,随机变量\(Y\)乘以\(100\)。如果我们通过定义来计算,这意味着\(\textrm{Cov}(X, Y)\)将被乘以\(100\)。因此我们看到,在这种情况下,单位的变化使协方差改变了\(100\)倍。因此,为了找到我们单位不变的相关性度量,我们需要除以另一个也按\(100\)比例缩放的东西。事实上,我们有一个明确的候选者,那就是标准差!确实,如果我们定义*相关系数*为

(22.6.45)\[\rho(X, Y) = \frac{\textrm{Cov}(X, Y)}{\sigma_{X}\sigma_{Y}},\]

我们看到这是一个无单位的值。一点数学可以证明这个数字在\(-1\)\(1\)之间,\(1\)表示最大正相关,而\(-1\)表示最大负相关。

回到我们上面具体的离散例子,我们可以看到\(\sigma_X = 1\)\(\sigma_Y = 2\),所以我们可以使用(22.6.45)来计算这两个随机变量之间的相关性,看到

(22.6.46)\[\rho(X, Y) = \frac{4p-2}{1\cdot 2} = 2p-1.\]

现在这个值的范围在\(-1\)\(1\)之间,具有预期的行为,即\(1\)表示最相关,而\(-1\)表示最不相关。

再举一个例子,考虑\(X\)为任意随机变量,\(Y=aX+b\)\(X\)的任意线性确定性函数。那么,可以计算出

(22.6.47)\[\sigma_{Y} = \sigma_{aX+b} = |a|\sigma_{X},\]
(22.6.48)\[\textrm{Cov}(X, Y) = \textrm{Cov}(X, aX+b) = a\textrm{Cov}(X, X) = a\textrm{Var}(X),\]

因此通过(22.6.45)可知

(22.6.49)\[\rho(X, Y) = \frac{a\textrm{Var}(X)}{|a|\sigma_{X}^2} = \frac{a}{|a|} = \textrm{sign}(a).\]

因此我们看到,对于任何\(a > 0\),相关性为\(+1\),对于任何\(a < 0\),相关性为\(-1\),这说明相关性衡量的是两个随机变量相关的程度和方向性,而不是变化的尺度。

让我们再次绘制一组具有可调相关性的随机变量。

# Plot a few random variables adjustable correlations
cors = [-0.9, 0.0, 1.0]
d2l.plt.figure(figsize=(12, 3))
for i in range(3):
    X = torch.randn(500)
    Y = cors[i] * X + torch.sqrt(torch.tensor(1) -
                                 cors[i]**2) * torch.randn(500)

    d2l.plt.subplot(1, 4, i + 1)
    d2l.plt.scatter(X.numpy(), Y.numpy())
    d2l.plt.xlabel('X')
    d2l.plt.ylabel('Y')
    d2l.plt.title(f'cor = {cors[i]}')
d2l.plt.show()
../_images/output_random-variables_886f4c_99_0.svg
# Plot a few random variables adjustable correlations
cors = [-0.9, 0.0, 1.0]
d2l.plt.figure(figsize=(12, 3))
for i in range(3):
    X = np.random.normal(0, 1, 500)
    Y = cors[i] * X + np.sqrt(1 - cors[i]**2) * np.random.normal(0, 1, 500)

    d2l.plt.subplot(1, 4, i + 1)
    d2l.plt.scatter(X.asnumpy(), Y.asnumpy())
    d2l.plt.xlabel('X')
    d2l.plt.ylabel('Y')
    d2l.plt.title(f'cor = {cors[i]}')
d2l.plt.show()
../_images/output_random-variables_886f4c_102_0.svg
# Plot a few random variables adjustable correlations
cors = [-0.9, 0.0, 1.0]
d2l.plt.figure(figsize=(12, 3))
for i in range(3):
    X = tf.random.normal((500, ))
    Y = cors[i] * X + tf.sqrt(tf.constant(1.) -
                                 cors[i]**2) * tf.random.normal((500, ))

    d2l.plt.subplot(1, 4, i + 1)
    d2l.plt.scatter(X.numpy(), Y.numpy())
    d2l.plt.xlabel('X')
    d2l.plt.ylabel('Y')
    d2l.plt.title(f'cor = {cors[i]}')
d2l.plt.show()
../_images/output_random-variables_886f4c_105_0.svg

下面列出一些相关的性质。

  • 对于任何随机变量\(X\)\(\rho(X, X) = 1\)

  • 对于任何随机变量\(X, Y\)和数字\(a\)\(b\)\(\rho(aX+b, Y) = \rho(X, aY+b) = \rho(X, Y)\)

  • 如果\(X\)\(Y\)是独立的且方差不为零,那么\(\rho(X, Y) = 0\)

最后,您可能会觉得其中一些公式很熟悉。确实,如果我们假设\(\mu_X = \mu_Y = 0\)并将所有内容展开,我们会看到

(22.6.50)\[\rho(X, Y) = \frac{\sum_{i, j} x_iy_ip_{ij}}{\sqrt{\sum_{i, j}x_i^2 p_{ij}}\sqrt{\sum_{i, j}y_j^2 p_{ij}}}.\]

这看起来像是项的乘积之和除以项之和的平方根。这正是两个向量\(\mathbf{v}, \mathbf{w}\)之间夹角的余弦公式,其中不同坐标由\(p_{ij}\)加权

(22.6.51)\[\cos(\theta) = \frac{\mathbf{v}\cdot \mathbf{w}}{\|\mathbf{v}\|\|\mathbf{w}\|} = \frac{\sum_{i} v_iw_i}{\sqrt{\sum_{i}v_i^2}\sqrt{\sum_{i}w_i^2}}.\]

确实,如果我们将范数与标准差联系起来,将相关性与夹角的余弦联系起来,那么我们从几何学中获得的许多直觉都可以应用于思考随机变量。

22.6.2. 小结

  • 连续随机变量是可以取连续值的随机变量。它们有一些技术上的困难,使得它们比离散随机变量更难处理。

  • 概率密度函数允许我们处理连续随机变量,它给出了一个函数,在该函数下某个区间上的面积给出了在该区间中找到样本点的概率。

  • 累积分布函数是观察到随机变量小于给定阈值的概率。它可以提供一个有用的替代观点,统一了离散和连续变量。

  • 均值是随机变量的平均值。

  • 方差是随机变量与其均值之差的平方的期望值。

  • 标准差是方差的平方根。它可以被认为是衡量随机变量可能取值范围的度量。

  • 切比雪夫不等式允许我们通过给出一个明确的区间来使这种直觉得到严谨的证明,该区间在大多数情况下包含了随机变量。

  • 联合密度使我们能够处理相关的随机变量。我们可以通过对不需要的随机变量进行积分来边缘化联合密度,从而得到所需随机变量的分布。

  • 协方差和相关系数提供了一种衡量两个相关随机变量之间任何线性关系的方法。

22.6.3. 练习

  1. 假设我们有一个随机变量,其密度函数为当\(x \ge 1\)\(p(x) = \frac{1}{x^2}\),否则\(p(x) = 0\)。那么\(P(X > 2)\)是多少?

  2. 拉普拉斯分布是一个随机变量,其密度由\(p(x) = \frac{1}{2}e^{-|x|}\)给出。这个函数的均值和标准差是多少?提示:\(\int_0^\infty xe^{-x} \; dx = 1\)\(\int_0^\infty x^2e^{-x} \; dx = 2\)

  3. 我在街上走到你面前说:“我有一个均值为\(1\),标准差为\(2\)的随机变量,我观察到\(25\%\)的样本取值大于\(9\)。”你相信我吗?为什么相信或不相信?

  4. 假设您有两个随机变量\(X, Y\),其联合密度由当\(x, y \in [0,1]\)\(p_{XY}(x, y) = 4xy\),否则\(p_{XY}(x, y) = 0\)。那么\(X\)\(Y\)的协方差是多少?