2.6. 概率¶ Open the notebook in SageMaker Studio Lab
简单地说,机器学习就是做出预测。
根据病人的临床病史,我们可能想预测他们在下一年心脏病发作的概率。 在飞机喷气发动机的异常检测中,我们想要评估一组发动机读数为正常运行情况的概率有多大。 在强化学习中,我们希望智能体(agent)能在一个环境中智能地行动。 这意味着我们需要考虑在每种可行的行为下获得高奖励的概率。 当我们建立推荐系统时,我们也需要考虑概率。 例如,假设我们为一家大型在线书店工作,我们可能希望估计某些用户购买特定图书的概率。 为此,我们需要使用概率学。 有完整的课程、专业、论文、职业、甚至院系,都致力于概率学的工作。 所以很自然地,我们在这部分的目标不是教授整个科目。 相反,我们希望教给读者基础的概率知识,使读者能够开始构建第一个深度学习模型, 以便读者可以开始自己探索它。
现在让我们更认真地考虑第一个例子:根据照片区分猫和狗。 这听起来可能很简单,但对于机器却可能是一个艰巨的挑战。 首先,问题的难度可能取决于图像的分辨率。
如
图2.6.1所示,虽然人类很容易以
现在考虑第二个例子:给出一些天气监测数据,我们想预测明天北京下雨的概率。 如果是夏天,下雨的概率是0.5。
在这两种情况下,我们都不确定结果,但这两种情况之间有一个关键区别。 在第一种情况中,图像实际上是狗或猫二选一。 在第二种情况下,结果实际上是一个随机的事件。 因此,概率是一种灵活的语言,用于说明我们的确定程度,并且它可以有效地应用于广泛的领域中。
2.6.1. 基本概率论¶
假设我们掷骰子,想知道看到1的几率有多大,而不是看到另一个数字。
如果骰子是公平的,那么所有六个结果
然而现实生活中,对于我们从工厂收到的真实骰子,我们需要检查它是否有瑕疵。
检查骰子的唯一方法是多次投掷并记录结果。
对于每个骰子,我们将观察到
首先,我们导入必要的软件包。
在统计学中,我们把从概率分布中抽取样本的过程称为抽样(sampling)。 笼统来说,可以把分布(distribution)看作对事件的概率分配, 稍后我们将给出的更正式定义。 将概率分配给一些离散选择的分布称为多项分布(multinomial distribution)。
为了抽取一个样本,即掷骰子,我们只需传入一个概率向量。
输出是另一个相同长度的向量:它在索引
[07:15:31] ../src/storage/storage.cc:196: Using Pooled (Naive) StorageManager for CPU
array([0, 0, 0, 1, 0, 0], dtype=int64)
tensor([0., 0., 1., 0., 0., 0.])
<tf.Tensor: shape=(6,), dtype=float32, numpy=array([0., 1., 0., 0., 0., 0.], dtype=float32)>
在估计一个骰子的公平性时,我们希望从同一分布中生成多个样本。 如果用Python的for循环来完成这个任务,速度会慢得惊人。 因此我们使用深度学习框架的函数同时抽取多个样本,得到我们想要的任意形状的独立样本数组。
<tf.Tensor: shape=(6,), dtype=float32, numpy=array([3., 0., 2., 2., 2., 1.], dtype=float32)>
现在我们知道如何对骰子进行采样,我们可以模拟1000次投掷。 然后,我们可以统计1000次投掷后,每个数字被投中了多少次。 具体来说,我们计算相对频率,以作为真实概率的估计。
array([0.162, 0.149, 0.178, 0.17 , 0.166, 0.175])
tensor([0.1550, 0.1820, 0.1770, 0.1710, 0.1600, 0.1550])
<tf.Tensor: shape=(6,), dtype=float32, numpy=array([0.171, 0.162, 0.17 , 0.168, 0.164, 0.165], dtype=float32)>
因为我们是从一个公平的骰子中生成的数据,我们知道每个结果都有真实的概率
我们也可以看到这些概率如何随着时间的推移收敛到真实概率。 让我们进行500组实验,每组抽取10个样本。
counts = np.random.multinomial(10, fair_probs, size=500)
cum_counts = counts.astype(np.float32).cumsum(axis=0)
estimates = cum_counts / cum_counts.sum(axis=1, keepdims=True)
d2l.set_figsize((6, 4.5))
for i in range(6):
d2l.plt.plot(estimates[:, i].asnumpy(),
label=("P(die=" + str(i + 1) + ")"))
d2l.plt.axhline(y=0.167, color='black', linestyle='dashed')
d2l.plt.gca().set_xlabel('Groups of experiments')
d2l.plt.gca().set_ylabel('Estimated probability')
d2l.plt.legend();
counts = multinomial.Multinomial(10, fair_probs).sample((500,))
cum_counts = counts.cumsum(dim=0)
estimates = cum_counts / cum_counts.sum(dim=1, keepdims=True)
d2l.set_figsize((6, 4.5))
for i in range(6):
d2l.plt.plot(estimates[:, i].numpy(),
label=("P(die=" + str(i + 1) + ")"))
d2l.plt.axhline(y=0.167, color='black', linestyle='dashed')
d2l.plt.gca().set_xlabel('Groups of experiments')
d2l.plt.gca().set_ylabel('Estimated probability')
d2l.plt.legend();
counts = tfp.distributions.Multinomial(10, fair_probs).sample(500)
cum_counts = tf.cumsum(counts, axis=0)
estimates = cum_counts / tf.reduce_sum(cum_counts, axis=1, keepdims=True)
d2l.set_figsize((6, 4.5))
for i in range(6):
d2l.plt.plot(estimates[:, i].numpy(),
label=("P(die=" + str(i + 1) + ")"))
d2l.plt.axhline(y=0.167, color='black', linestyle='dashed')
d2l.plt.gca().set_xlabel('Groups of experiments')
d2l.plt.gca().set_ylabel('Estimated probability')
d2l.plt.legend();
counts = paddle.distribution.Multinomial(10, paddle.to_tensor(fair_probs)).sample((500,1))
cum_counts = counts.cumsum(axis=0)
cum_counts = cum_counts.squeeze(axis=1)
estimates = cum_counts / cum_counts.sum(axis=1, keepdim=True)
d2l.set_figsize((6, 4.5))
for i in range(6):
d2l.plt.plot(estimates[:, i],
label=("P(die=" + str(i + 1) + ")"))
d2l.plt.axhline(y=0.167, color='black', linestyle='dashed')
d2l.plt.gca().set_xlabel('Groups of experiments')
d2l.plt.gca().set_ylabel('Estimated probability')
d2l.plt.legend()
<matplotlib.legend.Legend at 0x7fb768648df0>
每条实线对应于骰子的6个值中的一个,并给出骰子在每组实验后出现值的估计概率。
当我们通过更多的实验获得更多的数据时,这
2.6.1.1. 概率论公理¶
在处理骰子掷出时,我们将集合
概率(probability)可以被认为是将集合映射到真实值的函数。
在给定的样本空间
对于任意事件
,其概率从不会是负数,即 ;整个样本空间的概率为
,即 ;对于互斥(mutually exclusive)事件(对于所有
都有 )的任意一个可数序列 ,序列中任意一个事件发生的概率等于它们各自发生的概率之和,即 。
以上也是概率论的公理,由科尔莫戈罗夫于1933年提出。
有了这个公理系统,我们可以避免任何关于随机性的哲学争论;
相反,我们可以用数学语言严格地推理。
例如,假设事件
2.6.1.2. 随机变量¶
在我们掷骰子的随机实验中,我们引入了随机变量(random
variable)的概念。
随机变量几乎可以是任何数量,并且它可以在随机实验的一组可能性中取一个值。
考虑一个随机变量
请注意,离散(discrete)随机变量(如骰子的每一面) 和连续(continuous)随机变量(如人的体重和身高)之间存在微妙的区别。 现实生活中,测量两个人是否具有完全相同的身高没有太大意义。 如果我们进行足够精确的测量,最终会发现这个星球上没有两个人具有完全相同的身高。 在这种情况下,询问某人的身高是否落入给定的区间,比如是否在1.79米和1.81米之间更有意义。 在这些情况下,我们将这个看到某个数值的可能性量化为密度(density)。 高度恰好为1.80米的概率为0,但密度不是0。 在任何两个不同高度之间的区间,我们都有非零的概率。 在本节的其余部分中,我们将考虑离散空间中的概率。 连续随机变量的概率可以参考深度学习数学附录中随机变量 的一节。
2.6.2. 处理多个随机变量¶
很多时候,我们会考虑多个随机变量。 比如,我们可能需要对疾病和症状之间的关系进行建模。 给定一个疾病和一个症状,比如“流感”和“咳嗽”,以某个概率存在或不存在于某个患者身上。 我们需要估计这些概率以及概率之间的关系,以便我们可以运用我们的推断来实现更好的医疗服务。
再举一个更复杂的例子:图像包含数百万像素,因此有数百万个随机变量。 在许多情况下,图像会附带一个标签(label),标识图像中的对象。 我们也可以将标签视为一个随机变量。 我们甚至可以将所有元数据视为随机变量,例如位置、时间、光圈、焦距、ISO、对焦距离和相机类型。 所有这些都是联合发生的随机变量。 当我们处理多个随机变量时,会有若干个变量是我们感兴趣的。
2.6.2.1. 联合概率¶
第一个被称为联合概率(joint probability)
2.6.2.2. 条件概率¶
联合概率的不等式带给我们一个有趣的比率:
2.6.2.3. 贝叶斯定理¶
使用条件概率的定义,我们可以得出统计学中最有用的方程之一:
Bayes定理(Bayes’ theorem)。 根据乘法法则(multiplication
rule )可得到
请注意,这里我们使用紧凑的表示法:
其中
2.6.2.4. 边际化¶
为了能进行事件概率求和,我们需要求和法则(sum rule),
即
这也称为边际化(marginalization)。 边际化结果的概率或分布称为边际概率(marginal probability) 或边际分布(marginal distribution)。
2.6.2.5. 独立性¶
另一个有用属性是依赖(dependence)与独立(independence)。
如果两个随机变量
由于
2.6.2.6. 应用¶
我们实战演练一下! 假设一个医生对患者进行艾滋病病毒(HIV)测试。
这个测试是相当准确的,如果患者健康但测试显示他患病,这个概率只有1%;
如果患者真正感染HIV,它永远不会检测不出。
我们使用
条件概率 |
||
---|---|---|
1 |
0.01 |
|
0 |
0.99 |
请注意,每列的加和都是1(但每行的加和不是),因为条件概率需要总和为1,就像概率一样。
让我们计算如果测试出来呈阳性,患者感染HIV的概率,即
因此,我们得到
换句话说,尽管使用了非常准确的测试,患者实际上患有艾滋病的几率只有13.06%。 正如我们所看到的,概率可能是违反直觉的。
患者在收到这样可怕的消息后应该怎么办? 很可能,患者会要求医生进行另一次测试来确定病情。 第二个测试具有不同的特性,它不如第一个测试那么精确, 如 表2.6.2所示。
条件概率 |
||
---|---|---|
0.98 |
0.03 |
|
0.02 |
0.97 |
不幸的是,第二次测试也显示阳性。让我们通过假设条件独立性来计算出应用Bayes定理的必要概率:
现在我们可以应用边际化和乘法规则:
最后,鉴于存在两次阳性检测,患者患有艾滋病的概率为
也就是说,第二次测试使我们能够对患病的情况获得更高的信心。 尽管第二次检验比第一次检验的准确性要低得多,但它仍然显著提高我们的预测概率。
2.6.3. 期望和方差¶
为了概括概率分布的关键特征,我们需要一些测量方法。
一个随机变量
当函数
在许多情况下,我们希望衡量随机变量
方差的平方根被称为标准差(standard deviation)。
随机变量函数的方差衡量的是:当从该随机变量分布中采样不同值
2.6.4. 小结¶
我们可以从概率分布中采样。
我们可以使用联合分布、条件分布、Bayes定理、边缘化和独立性假设来分析多个随机变量。
期望和方差为概率分布的关键特征的概括提供了实用的度量形式。