PyTorch教程-2.6. 概率统计

电子说

1.3w人已加入

描述

不管怎样,机器学习都是关于不确定性的。在监督学习中,我们希望在给定已知事物(特征)的情况下预测未知事物(目标)。根据我们的目标,我们可能会尝试预测目标的最可能值。或者我们可以预测与目标的预期距离最小的值。有时我们不仅希望预测特定值,而且希望量化我们的不确定性。例如,给定一些描述患者的特征,我们可能想知道有多大可能他们将在明年心脏病发作。在无监督学习中,我们经常关心不确定性。要确定一组测量值是否异常,了解一个人在感兴趣的总体中观察值的可能性有多大是有帮助的。此外,在强化学习中,我们希望开发能够在各种环境中智能行动的智能体。这需要推理环境可能会如何变化,以及人们可能期望在响应每个可用操作时遇到什么奖励。

概率是与不确定性推理有关的数学领域。给定某个过程的概率模型,我们可以推断各种事件的可能性。使用概率来描述可重复事件(如抛硬币)的频率是相当没有争议的。事实上,频率论学者坚持只适用于此类可重复事件的概率解释。相比之下,贝叶斯学者更广泛地使用概率语言来形式化我们在不确定性下的推理。贝叶斯概率具有两个独特的特征:(i) 将置信度分配给不可重复的事件,例如,概率是 多少月亮是奶酪做的?(ii) 主观性——虽然贝叶斯概率为人们应该如何根据新证据更新他们的信念提供了明确的规则,但它允许不同的个体以不同的先验信念开始。 统计数据帮助我们向后推理,从收集和组织数据开始,然后退回到我们可能对生成数据的过程得出的推论。每当我们分析数据集,寻找我们希望可以表征更广泛人群的模式时,我们都在运用统计思维。大多数课程、专业、论文、职业、部门、公司和机构都致力于研究概率和统计。虽然本节仅涉及表面,但我们将为您提供开始构建模型所需的基础。

 

%matplotlib inline
import random
import torch
from torch.distributions.multinomial import Multinomial
from d2l import torch as d2l

 

 

%matplotlib inline
import random
from mxnet import np, npx
from mxnet.numpy.random import multinomial
from d2l import mxnet as d2l

npx.set_np()

 

 

%matplotlib inline
import random
import jax
import numpy as np
from jax import numpy as jnp
from d2l import jax as d2l

 

 

No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)

 

 

%matplotlib inline
import random
import tensorflow as tf
from tensorflow_probability import distributions as tfd
from d2l import tensorflow as d2l

 

2.6.1. 一个简单的例子:抛硬币

想象一下,我们计划抛硬币并想要量化我们看到正面(与反面)的可能性有多大。如果硬币是公平的,那么两种结果(正面和反面)的可能性都相同。此外,如果我们打算抛硬币n次,那么我们期望看到的正面部分应该与预期的反面部分完全匹配。一种直观的方式是通过对称性来看待这一点:对于每一个可能的结果nh 头和nt=(n−nh)尾巴,有一个同样可能的结果nt头和nh尾巴。请注意,这只有在我们平均期望看到的情况下才有可能1/2抛出头和1/2出现尾巴。当然,如果你多次进行这个实验n=1000000抛掷每一个,你可能永远看不到试验在哪里nh=nt确切地。

形式上,数量1/2被称为概率,在这里它捕捉到任何给定的抛掷都会出现正面的确定性。概率在之间分配分数0和1到感兴趣的结果,称为事件。这里感兴趣的事件是 heads我们表示相应的概率 P(heads). 的概率1表示绝对确定性(想象一个双面都是正面的骗局硬币)和概率0表示不可能(例如,如果两边都是反面)。频率nh/n和nt/n不是概率而是统计。概率是 数据生成过程的理论量。在这里,概率1/2是硬币本身的属性。相比之下,统计数据是作为观察数据的函数计算的经验量。我们对概率和统计量的兴趣密不可分。我们经常设计称为估计器的特殊统计数据,在给定数据集的情况下,它会产生 模型参数(如概率)的估计值。此外,当这些估计量满足称为一致性的良好属性时,我们的估计将收敛到相应的概率。反过来,这些推断的概率说明了我们将来可能遇到的来自同一人群的数据的可能统计特性。

假设我们偶然发现了一枚真实的硬币,但我们并不知道它的真实价值P(heads). 要用统计方法调查这个数量,我们需要(i)收集一些数据;(ii) 设计一个估算器。这里的数据采集很容易;我们可以多次抛硬币并记录所有结果。形式上,从一些底层随机过程中绘制实现称为采样。正如您可能已经猜到的那样,一种自然的估计量是观察到的正面朝上数与抛掷总次数之间的分数。

现在,假设硬币实际上是公平的,即 P(heads)=0.5. 为了模拟公平硬币的抛掷,我们可以调用任何随机数生成器。以概率抽取事件样本的一些简单方法0.5. 例如 Python random.random在区间内产生数字[0,1]其中躺在任何子区间的概率[a,b]⊂[0,1]等于b−a. 因此我们可以通过0测试返回的1浮点数0.5是否大于0.5

 

num_tosses = 100
heads = sum([random.random() > 0.5 for _ in range(100)])
tails = num_tosses - heads
print("heads, tails: ", [heads, tails])

 

 

heads, tails: [48, 52]

 

 

num_tosses = 100
heads = sum([random.random() > 0.5 for _ in range(100)])
tails = num_tosses - heads
print("heads, tails: ", [heads, tails])

 

 

heads, tails: [47, 53]

 

 

num_tosses = 100
heads = sum([random.random() > 0.5 for _ in range(100)])
tails = num_tosses - heads
print("heads, tails: ", [heads, tails])

 

 

heads, tails: [44, 56]

 

 

num_tosses = 100
heads = sum([random.random() > 0.5 for _ in range(100)])
tails = num_tosses - heads
print("heads, tails: ", [heads, tails])

 

 

heads, tails: [49, 51]

 

更一般地,我们可以通过调用多项式函数,将第一个参数设置为抽奖次数,将第二个参数设置为与每个可能结果相关的概率列表。为了模拟公平硬币的十次抛掷,我们分配概率向量,将索引 0 解释为正面,将索引 1 解释为反面。该函数返回一个长度等于可能结果数(此处为 2)的向量,其中第一个分量告诉我们正面出现的次数,第二个分量告诉我们反面出现的次数。[0.5, 0.5]

 

fair_probs = torch.tensor([0.5, 0.5])
Multinomial(100, fair_probs).sample()

 

 

tensor([44., 56.])

 

 

fair_probs = [0.5, 0.5]
multinomial(100, fair_probs)

 

 

array([46, 54], dtype=int64)

 

 

fair_probs = [0.5, 0.5]
# jax.random does not have multinomial distribution implemented
np.random.multinomial(100, fair_probs)

 

 

array([46, 54])

 

 

fair_probs = tf.ones(2) / 2
tfd.Multinomial(100, fair_probs).sample()

 

 


 

每次运行此采样过程时,您都会收到一个新的随机值,该值可能与之前的结果不同。除以投掷次数即可得出数据中每种结果出现的频率。请注意,这些频率,就像它们要估计的概率一样,总和为1.

 

Multinomial(100, fair_probs).sample() / 100

 

 

tensor([0.5300, 0.4700])

 

 

multinomial(100, fair_probs) / 100

 

 

array([0.53, 0.47])

 

 

np.random.multinomial(100, fair_probs) / 100

 

 

array([0.5, 0.5])

 

 

tfd.Multinomial(100, fair_probs).sample() / 100

 

 


 

在这里,即使我们的模拟硬币是公平的(我们 自己设置概率),正面和反面的计数可能并不相同。那是因为我们只抽取了有限数量的样本。如果我们自己不进行模拟,而只看到结果,我们怎么知道硬币是否有轻微的不公平,或者是否可能偏离[0.5, 0.5]1/2只是小样本的产物?让我们看看模拟10000投掷时会发生什么。

 

counts = Multinomial(10000, fair_probs).sample()
counts / 10000

 

 

tensor([0.4970, 0.5030])

 

 

counts = multinomial(10000, fair_probs).astype(np.float32)
counts / 10000

 

 

array([0.4952, 0.5048])

 

 

counts = np.random.multinomial(10000, fair_probs).astype(np.float32)
counts / 10000

 

 

array([0.5009, 0.4991], dtype=float32)

 

 

counts = tfd.Multinomial(10000, fair_probs).sample()
counts / 10000

 

 


 

一般来说,对于重复事件(如抛硬币)的平均值,随着重复次数的增加,我们的估计肯定会收敛到真实的潜在概率。这种现象的数学证明称为大数定律和中心极限定理告诉我们,在许多情况下,随着样本量的增加n 增长,这些错误应该以(1/n). 让我们通过研究随着抛掷次数从1增加到10000.

 

counts = Multinomial(1, fair_probs).sample((10000,))
cum_counts = counts.cumsum(dim=0)
estimates = cum_counts / cum_counts.sum(dim=1, keepdims=True)
estimates = estimates.numpy()

d2l.set_figsize((4.5, 3.5))
d2l.plt.plot(estimates[:, 0], label=("P(coin=heads)"))
d2l.plt.plot(estimates[:, 1], label=("P(coin=tails)"))
d2l.plt.axhline(y=0.5, color='black', linestyle='dashed')
d2l.plt.gca().set_xlabel('Samples')
d2l.plt.gca().set_ylabel('Estimated probability')
d2l.plt.legend();

 

pytorch

 

counts = multinomial(1, fair_probs, size=10000)
cum_counts = counts.astype(np.float32).cumsum(axis=0)
estimates = cum_counts / cum_counts.sum(axis=1, keepdims=True)

d2l.set_figsize((4.5, 3.5))
d2l.plt.plot(estimates[:, 0], label=("P(coin=heads)"))
d2l.plt.plot(estimates[:, 1], label=("P(coin=tails)"))
d2l.plt.axhline(y=0.5, color='black', linestyle='dashed')
d2l.plt.gca().set_xlabel('Samples')
d2l.plt.gca().set_ylabel('Estimated probability')
d2l.plt.legend();

 

pytorch

 

counts = np.random.multinomial(1, fair_probs, size=10000).astype(np.float32)
cum_counts = counts.cumsum(axis=0)
estimates = cum_counts / cum_counts.sum(axis=1, keepdims=True)

d2l.set_figsize((4.5, 3.5))
d2l.plt.plot(estimates[:, 0], label=("P(coin=heads)"))
d2l.plt.plot(estimates[:, 1], label=("P(coin=tails)"))
d2l.plt.axhline(y=0.5, color='black', linestyle='dashed')
d2l.plt.gca().set_xlabel('Samples')
d2l.plt.gca().set_ylabel('Estimated probability')
d2l.plt.legend();

 

pytorch

 

counts = tfd.Multinomial(1, fair_probs).sample(10000)
cum_counts = tf.cumsum(counts, axis=0)
estimates = cum_counts / tf.reduce_sum(cum_counts, axis=1, keepdims=True)
estimates = estimates.numpy()

d2l.set_figsize((4.5, 3.5))
d2l.plt.plot(estimates[:, 0], label=("P(coin=heads)"))
d2l.plt.plot(estimates[:, 1], label=("P(coin=tails)"))
d2l.plt.axhline(y=0.5, color='black', linestyle='dashed')
d2l.plt.gca().set_xlabel('Samples')
d2l.plt.gca().set_ylabel('Estimated probability')
d2l.plt.legend();

 

pytorch

每条实线对应于硬币的两个值之一,并给出了我们估计的概率,即在每组实验后硬币出现该值的概率。黑色虚线给出了真实的潜在概率。随着我们通过进行更多实验获得更多数据,曲线会向真实概率收敛。您可能已经开始看到一些困扰统计学家的更高级问题的形状:这种收敛发生的速度有多快?如果我们已经测试了同一家工厂生产的许多硬币,我们如何整合这些信息?

2.6.2. 更正式的待遇

我们已经走得很远了:提出概率模型、生成合成数据、运行统计估计器、凭经验评估收敛性以及报告错误指标(检查偏差)。然而,为了走得更远,我们需要更加精确。

在处理随机性时,我们表示一组可能的结果 S并将其称为样本空间或结果空间。在这里,每个元素都是一个不同的可能结果。在滚动单个硬币的情况下, S={heads,tails}. 对于单个模具,S={1,2,3,4,5,6}. 掷两枚硬币时,可能的结果是 {(heads,heads),(heads,tails),(tails,heads),(tails,tails)}. 事件是样本空间的子集。例如,事件“第一次抛硬币正面朝上”对应于集合 {(heads,heads),(heads,tails)}. 每当结果z随机实验满足 z∈A, 然后是事件A已经发生了。对于单次掷骰子,我们可以定义事件“看到一个 5”(A={5}) 和“看到一个奇数” (B={1,3,5}). 在这种情况下,如果骰子出现 5,我们会说两者A和B发生。另一方面,如果z=3, 然后A没有发生但是 B做过。

概率函数将事件映射到实际值 P:A⊆S→[0,1]. 事件的概率A在给定的样本空间 S, 表示P(A),满足以下属性:

任何事件的概率A是一个非负实数,即P(A)≥0;

整个样本空间的概率为1, IE, P(S)=1;

对于任何可数的事件序列 A1,A2,…是互斥的(Ai∩Aj=∅对全部i≠j),其中任何一个发生的概率等于它们各自概率的总和,即 P(⋃i=1∞Ai)=∑i=1∞P(Ai).

这些概率论公理由Kolmogorov ( 1933 )提出 ,可用于快速推导出许多重要结果。例如,紧随其后的是任何事件的概率A 或其补充 A′occurring 为 1(因为 A∪A′=S). 我们也可以证明P(∅)=0因为 1=P(S∪S′)=P(S∪∅)=P(S)+P(∅)=1+P(∅). 因此,任何事件的概率A 及其补充A′同时发生的是 P(A∩A′)=0. 通俗地说,这告诉我们不可能事件发生的概率为零。

2.6.3. 随机变量

当我们谈论诸如掷骰子出现赔率或第一次抛硬币出现正面等事件时,我们正在调用随机变量的概念。形式上,随机变量是从基础样本空间到一组(可能很多)值的映射。您可能想知道随机变量与样本空间有何不同,因为两者都是结果的集合。重要的是,随机变量可能比原始样本空间粗糙得多。我们可以定义一个二进制随机变量,如“大于 0.5”,即使基础样本空间是无限的,例如,线段之间0和1. 此外,多个随机变量可以共享相同的底层样本空间。例如,“我家的警报是否响起”和“我的房子是否被盗”都是共享基础样本空间的二元随机变量。因此,知道一个随机变量取的值可以告诉我们一些关于另一个随机变量的可能值的信息。知道警报响了,我们可能会怀疑房子可能被盗了。

随机变量取的每个值都对应于基础样本空间的一个子集。因此出现随机变量 X取值v, 表示为X=v, 是一个事件 并且P(X=v)表示它的概率。有时这种符号会变得笨拙,当上下文清晰时我们可能会滥用符号。例如,我们可能会使用P(X)泛指 分布_X,即告诉我们概率的函数X取任何给定值。其他时候我们写这样的表达式P(X,Y)=P(X)P(Y),作为表达对随机变量的所有值都成立的陈述的简写 X和Y可以采取,即,对于所有i,j它认为P(X=i and Y=j)=P(X=i)P(Y=j). 其他时候,我们通过写作滥用符号P(v)当随机变量从上下文中明确时。由于概率论中的事件是样本空间的一组结果,我们可以指定随机变量取值的范围。例如,P(1≤X≤3)表示事件的概率{1≤X≤3}.

请注意,离散随机变量(如掷硬币或掷骰子)与连续随机变量之间存在细微差别 那些,比如从人群中随机抽取的一个人的体重和身高。在这种情况下,我们很少真正关心某人的确切身高。此外,如果我们进行足够精确的测量,我们会发现地球上没有两个人的身高完全相同。事实上,通过足够精细的测量,您醒来和入睡时的身高永远不会相同。询问某人身高 1.801392782910287192 米的确切概率毫无意义。相反,我们通常更关心能够说出某人的身高是否落在给定的区间内,比如 1.79 到 1.81 米之间。在这些情况下,我们使用概率密度. 恰好 1.80 米的高度没有概率,但密度非零。为了得到分配给一个区间的概率,我们必须 对该区间的密度进行积分。

2.6.4. 多个随机变量

你可能已经注意到,我们甚至不能通过最后一节而不做涉及多个随机变量之间相互作用的陈述(回想一下P(X,Y)=P(X)P(Y)). 大多数机器学习都与这种关系有关。在这里,样本空间将是感兴趣的人群,例如与企业进行交易的客户、互联网上的照片或生物学家已知的蛋白质。每个随机变量将代表不同属性的(未知)值。每当我们从总体中抽取一个个体时,我们都会观察到每个随机变量的实现。因为随机变量取的值对应于可能重叠、部分重叠或完全不相交的样本空间子集,所以了解一个随机变量取的值可以使我们更新我们对另一个随机变量的可能取值的信念. 如果一个病人走进医院,我们观察到他们呼吸困难并且失去了嗅觉,

当处理多个随机变量时,我们可以构建对应于变量可以共同取值的每种组合的事件。为每个组合分配概率的概率函数(例如A=a和B=b) 称为联合概率函数,它简单地返回分配给样本空间相应子集的交集的概率。分配给随机变量的事件的联合概率A和B取值a和b,分别表示为P(A=a,B=b), 其中逗号表示“和”。请注意,对于任何值a和b, 它认为P(A=a,B=b)≤P(A=a)和 P(A=a,B=b)≤P(B=b), 因此A=a和B=b 即将发生,A=a必须发生并且 B=b也必须发生。有趣的是,联合概率告诉我们所有我们可以从概率意义上了解这些随机变量,并且可以用来推导出许多其他有用的量,包括恢复个体分布P(A)和P(B). 恢复 P(A=a)我们简单总结一下P(A=a,B=v)在所有值 v随机变量B可以采取: P(A=a)=∑vP(A=a,B=v).

比例P(A=a,B=b)P(A=a)≤1事实证明非常重要。它被称为条件概率,并通过“∣“ 象征, P(B=b∣A=a)=P(A=a,B=b)/P(A=a). 它告诉我们与事件相关的新概率B=b,一旦我们以事实为条件A=a发生。我们可以将此条件概率视为仅将注意力限制在与相关联的样本空间子集上A=a然后重新归一化,使所有概率总和为 1。条件概率实际上是概率,因此遵守所有公理,只要我们以同一事件为条件所有条件,从而将注意力限制在同一样本空间。例如,对于不相交的事件B 和B′, 我们有 P(B∪B′∣A=a)=P(B∣A=a)+P(B′∣A=a).

使用条件概率的定义,我们可以推导出著名的贝叶斯定理。通过构造,我们有 P(A,B)=P(B∣A)P(A)和P(A,B)=P(A∣B)P(B). 结合两个方程式产生 P(B∣A)P(A)=P(A∣B)P(B)因此

(2.6.1)P(A∣B)=P(B∣A)P(A)P(B).

这个简单的等式具有深远的意义,因为它允许我们颠倒条件反射的顺序。如果我们知道如何估计 P(B∣A),P(A), 和P(B), 那么我们可以估计 P(A∣B). 我们经常发现直接估计一项而不是另一项更容易,贝叶斯定理可以在这里提供帮助。例如,如果我们知道特定疾病的症状流行率,以及疾病和症状的总体流行率,我们就可以根据症状确定某人患该病的可能性。在某些情况下,我们可能无法直接访问P(B),例如症状的普遍性。在这种情况下,贝叶斯定理的简化版本就派上用场了:

(2.6.2)P(A∣B)∝P(B∣A)P(A).

因为我们知道P(A∣B)必须归一化为1, IE,∑aP(A=a∣B)=1,我们可以用它来计算

(2.6.3)P(A∣B)=P(B∣A)P(A)∑aP(B∣A=a)P(A=a).

在贝叶斯统计中,我们认为观察者拥有一些(主观的)先验信念,即先验编码的可用假设的合理性 P(H),以及一个似然函数,表示一个人有多大可能观察到针对类别中每个假设收​​集的证据的任何值 P(E∣H). 然后贝叶斯定理被解释为告诉我们如何更新初始先验 P(H)鉴于现有证据E产生后验信念 P(H∣E)=P(E∣H)P(H)P(E). 非正式地,这可以表述为“后验等于先验概率除以证据”。现在,因为证据P(E)对于所有假设都是相同的,我们可以通过简单地对假设进行归一化来摆脱困境。

注意∑aP(A=a∣B)=1也允许我们 边缘化随机变量。也就是说,我们可以从联合分布中删除变量,例如P(A,B). 毕竟我们有

(2.6.4)∑aP(B∣A=a)P(A=a)=∑aP(B,A=a)=P(B).

独立性是另一个非常重要的概念,它构成了统计学中许多重要思想的支柱。简而言之,如果以值为条件,则两个变量是独立的A不会导致与相关联的概率分布发生任何变化 B反之亦然。更正式地说,独立性表示为 A⊥B, 要求P(A∣B)=P(A)因此,P(A,B)=P(A∣B)P(B)=P(A)P(B). 独立性通常是一个适当的假设。例如,如果随机变量A表示抛一枚公平硬币和随机变量的结果B表示抛掷另一个的结果,然后知道是否A出现正面应该不会影响概率B出现了。

当独立性在我们从某些基础分布中连续抽取的数据中保持不变时(允许我们做出强有力的统计结论)或者当它在我们数据中的各种变量中保持不变时特别有用,允许我们使用编码这种独立性结构的更简单的模型. 另一方面,估计随机变量之间的依赖关系通常是学习的真正目的。我们特别关心在给定症状的情况下估计疾病的概率,因为我们认为疾病和症状不是独立的。

请注意,因为条件概率是适当的概率,独立性和依赖性的概念也适用于它们。两个随机变量A和B 在给定第三个变量的情况下是条件独立的C当且仅当 P(A,B∣C)=P(A∣C)P(B∣C). 有趣的是,两个变量通常可以是独立的,但在以第三个变量为条件时变得依赖。这通常发生在两个随机变量 A和B对应于某些第三个变量的原因 C. 例如,骨折和肺癌在普通人群中可能是独立的,但如果我们以住院为条件,那么我们可能会发现骨折与肺癌呈负相关。那是因为骨折解释了为什么有人在医院,从而降低了他们患肺癌的可能性。

相反,两个相关的随机变量可以在第三个条件下变得独立。当两个原本不相关的事件有一个共同的原因时,通常会发生这种情况。鞋码和阅读水平在小学生中高度相关,但如果我们以年龄为条件,这种相关性就会消失。

2.6.5. 一个例子

让我们来测试一下我们的技能。假设医生对患者进行 HIV 检测。该测试相当准确,如果患者健康但报告他患病,则测试失败的概率仅为 1%。此外,如果患者确实感染了 HIV,它永远不会检测不到 HIV。我们用D1∈{0,1}以表明诊断(0如果负和1如果是正数)和 H∈{0,1}来表示 HIV 状态。

条件概率 H=1 H=0
P(D1=1∣H) 1个 0.01
P(D1=0∣H) 0 0.99

请注意,列总和均为 1(但行总和不是),因为它们是条件概率。如果检测结果呈阳性,我们来计算患者感染 HIV 的概率,即 P(H=1∣D1=1). 直觉上这将取决于疾病的普遍程度,因为它会影响误报的数量。假设人口相当健康,例如, P(H=1)=0.0015. 要应用贝叶斯定理,我们需要应用边缘化来确定

(2.6.5)P(D1=1)=P(D1=1,H=0)+P(D1=1,H=1)=P(D1=1∣H=0)P(H=0)+P(D1=1∣H=1)P(H=1)=0.011485.

这导致我们

(2.6.6)P(H=1∣D1=1)=P(D1=1∣H=1)P(H=1)P(D1=1)=0.1306.

换句话说,尽管使用了非常准确的测试,但患者实际感染 HIV 的可能性只有 13.06%。正如我们所见,概率可能是违反直觉的。患者收到这样可怕的消息该怎么办?患者可能会要求医生进行另一项测试以获得清晰度。第二个测试有不同的特点,不如第一个好。

条件概率 H=1 H=0
P(D2=1∣H) 0.98 0.03
P(D2=0∣H) 0.02 0.97

不幸的是,第二次测试也呈阳性。让我们通过假设条件独立来计算调用贝叶斯定理的必要概率:

(2.6.7)P(D1=1,D2=1∣H=0)=P(D1=1∣H=0)P(D2=1∣H=0)=0.0003,P(D1=1,D2=1∣H=1)=P(D1=1∣H=1)P(D2=1∣H=1)=0.98.

现在我们可以应用边缘化来获得两个测试都返回阳性的概率:

(2.6.8)P(D1=1,D2=1)=P(D1=1,D2=1,H=0)+P(D1=1,D2=1,H=1)=P(D1=1,D2=1∣H=0)P(H=0)+P(D1=1,D2=1∣H=1)P(H=1)=0.00176955.

最后,在两项测试均为阳性的情况下,患者感染 HIV 的概率为

(2.6.9)P(H=1∣D1=1,D2=1)=P(D1=1,D2=1∣H=1)P(H=1)P(D1=1,D2=1)=0.8307.

也就是说,第二次测试让我们更加确信并非一切都很好。尽管第二次测试的准确性远低于第一次,但它仍然显着改善了我们的估计。假设这两个测试是条件独立的,这对于我们生成更准确的估计的能力至关重要。以我们两次运行相同测试的极端情况为例。在这种情况下,我们期望两次的结果相同,因此再次运行相同的测试不会获得额外的洞察力。精明的读者可能已经注意到,诊断的行为就像一个隐藏在众目睽睽之下的分类器,随着我们获得更多特征(测试结果),我们判断患者是否健康的能力也会增强。

2.6.6. 期望

通常,做出决策不仅需要查看分配给单个事件的概率,还需要将它们组合成有用的集合,从而为我们提供指导。例如,当随机变量采用连续标量值时,我们通常关心知道平均期望值是多少。这个数量正式称为 期望。如果我们正在进行投资,第一个感兴趣的数量可能是我们可以预期的回报,对所有可能的结果进行平均(并按适当的概率加权)。例如,假设一项投资有 50% 的可能性完全失败,有 40% 的可能性它可能提供 2× 返回,并且有 10% 的概率它可能提供 10× 返回 10×. 为了计算预期回报,我们将所有回报相加,将每个回报乘以它们发生的概率。这产生了期望 0.5⋅0+0.4⋅2+0.1⋅10=1.8. 因此预期回报为 1.8×.

一般来说,随机变量的 期望(或平均值)X定义为

(2.6.10)E[X]=Ex∼P[x]=∑xxP(X=x).

同样,对于我们获得的密度E[X]=∫xdp(x). 有时我们对某些函数的期望值感兴趣 x. 我们可以将这些期望计算为

(2.6.11)Ex∼P[f(x)]=∑xf(x)P(x) and Ex∼P[f(x)]=∫f(x)p(x)dx

分别用于离散概率和密度。回到上面的投资例子,f可能是 与回报相关的效用(幸福)。行为经济学家早就注意到,人们将更大的负效用与亏损联系起来,而不是从相对于他们的基线赚取一美元所获得的效用。此外,金钱的价值往往是次线性的。拥有 10 万美元与零美元可以在支付房租、吃得好、享受优质医疗保健与遭受无家可归的痛苦之间产生差异。另一方面,拥有 200k 相对于 100k 的收益就不那么显着了。这样的推理激发了“金钱的效用是对数”的陈词滥调。

如果与总损失相关的效用为 -1,与 1、2 和 10 的回报相关的效用分别为 1、2 和 4,则投资的预期幸福感为 0.5⋅(−1)+0.4⋅2+0.1⋅4=0.7(预计效用损失 30%)。如果这确实是你的效用函数,你最好还是把钱存在银行里。

对于财务决策,我们可能还想衡量一项投资的风险有多大。在这里,我们不仅关心预期值,还关心实际值相对于该值的变化幅度。请注意,我们不能只期望实际值和预期值之间的差异。这是因为对差异的期望是期望的差异,因此 E[X−E[X]]=E[X]−E[E[X]]=0. 然而,我们可以看看这种差异的任何非负函数的期望。随机变量的方差 是通过查看方差的期望值来计算的:

(2.6.12)Var[X]=E[(X−E[X])2]=E[X2]−E[X]2.

这里的平等通过扩大 (X−E[X])2=X2−2XE[X]+E[X]2并对每个学期都抱有期望。方差的平方根是另一个有用的量,称为标准差。虽然方差和标准差传达相同的信息(其中一个可以从另一个计算),但标准差具有很好的特性,即它以与随机变量表示的原始数量相同的单位表示。

最后,随机变量函数的方差被类似地定义为

(2.6.13)Varx∼P[f(x)]=Ex∼P[f2(x)]−Ex∼P[f(x)]2.

回到我们的投资示例,我们现在可以计算投资的方差。它由 0.5⋅0+0.4⋅22+0.1⋅102−1.82=8.36. 就所有意图和目的而言,这是一项风险投资。请注意,根据数学惯例,均值和方差通常被称为 μ和σ2. 每当我们使用它来参数化高斯分布时,这尤其常见。

就像我们为标量 随机变量引入期望和方差一样,我们也可以为向量值随机变量这样做。期望很容易,因为我们可以按元素应用它们。例如, μ=defEx∼P[x] 有坐标μi=Ex∼P[xi]. 协方差更复杂。我们通过对随机变量与其均值之差的外积进行期望来解决该问题。

(2.6.14)Σ=defCovx∼P[x]=Ex∼P[(x−μ)(x−μ)⊤].

这个矩阵Σ称为协方差矩阵。查看其效果的一种简单方法是考虑一些向量 v大小与x. 它遵循

(2.6.15)v⊤Σv=Ex∼P[v⊤(x−μ)(x−μ)⊤v]=Varx∼P[v⊤x].

像这样,Σ允许我们计算任何线性函数的方差x通过一个简单的矩阵乘法。非对角线元素告诉我们坐标是如何相关的:值为 0 表示不相关,其中较大的正值表示它们的相关性更强。

2.6.7. 讨论

在机器学习中,有很多事情是不确定的!我们可以不确定给定输入的标签值。我们可以不确定参数的估计值。我们甚至可以不确定到达部署的数据是否来自与训练数据相同的分布。

通过任意不确定性,我们表示问题固有的不确定性,并且由于观察到的变量无法解释的真正随机性。通过认知不确定性,我们表示模型参数的不确定性,我们希望通过收集更多数据来减少这种不确定性。关于硬币正面朝上的概率,我们可能存在认知上的不确定性,但即使我们知道了这个概率,我们也会对未来任何抛掷的结果产生不确定性。无论我们观察某人抛硬币多长时间,我们都不会超过或低于 50% 确定下一次抛硬币会正面朝上。这些术语归功于机械建模方面的文献,(参见例如Der Kiureghian 和 Ditlevsen(2009)对不确定性量化 这一方面的审查)。值得注意的是,这些术语构成了轻微的语言滥用。认知一词指的是与知识有关的任何事物 ,因此在哲学意义上,所有不确定性都是认知的。

我们看到,从一些未知概率分布中抽样数据可以为我们提供可用于估计数据生成分布参数的信息。也就是说,这可能的速度可能非常慢。在我们的抛硬币示例(以及许多其他示例)中,我们只能设计以以下速率收敛的估计器1/n, 在哪里n是样本量(例如,投掷次数)。这意味着通过从 10 次观察到 1000 次观察(通常是一项非常容易完成的任务),我们看到不确定性减少了 10 倍,而接下来的 1000 次观察的帮助相对较小,仅减少了 1.41 倍。这是机器学习的一个持久特征:虽然通常很容易获得收益,但它需要大量数据,并且通常需要大量计算才能获得更多收益。有关大规模语言模型这一事实的实证回顾,请参阅 Revels等人。(2016 年)。

我们还改进了统计建模的语言和工具。在此过程中,我们学习了条件概率和统计学中最重要的方程之一——贝叶斯定理。它是通过似然项对数据传递的信息进行解耦的有效工具P(B∣A)这解决了观察的好坏B匹配参数选择A和先验概率P(A)它决定了一个特定选择的合理性A排在第一位。特别是,我们看到了如何根据测试的有效性和疾病本身的流行程度(即我们的先验)应用此规则来分配诊断概率。

最后,我们介绍了第一组关于特定概率分布影响的重要问题,即期望和方差。虽然概率分布不仅仅有线性和二次期望,但这两个已经提供了大量关于分布可能行为的知识。例如,切比雪夫不等式 指出P(|X−μ|≥kσ)≤1/k2, 在哪里 μ是期待,σ2是分布的方差,并且k>1是我们选择的置信度参数。它告诉我们,从一个分布中抽取的样本至少有 50% 的概率落在[−2σ,2σ] 区间以期望为中心。

2.6.8. 练习

举一个例子,观察更多的数据可以将结果的不确定性降低到任意低的水平。

举一个例子,观察更多的数据只会将不确定性减少到一定程度,然后就不会再减少了。解释为什么会出现这种情况,以及您预计这一点会出现在哪里。

我们凭经验证明了收敛于抛硬币的均值。计算我们在绘制后看到头部的概率估计的方差n样品。

方差如何与观测值数量成比例?

使用 Chebyshev 不等式限制与期望的偏差。

它与中心极限定理有何关系?

假设我们画n样本xi来自具有零均值和单位方差的概率分布。计算平均值 zm=defm−1∑i=1mxi. 我们能否将切比雪夫不等式应用于每个zm独立?为什么不?

给定两个概率事件P(A)和 P(B), 计算上界和下界 P(A∪B)和 P(A∩B). 提示:使用维恩图来描绘情况。

假设我们有一系列随机变量,比如A, B, 和C, 在哪里B只取决于A, 和C只取决于B, 你能简化联合概率吗P(A,B,C)?提示:这是一个马尔可夫链。

在第 2.6.5 节中,假设两个测试的结果不是独立的。特别假设任一测试本身的假阳性率为 10%,假阴性率为 1%。也就是说,假设 P(D=1∣H=0)=0.1然后 P(D=0∣H=1)=0.01. 此外,假设对于 H=1(感染)测试结果是条件独立的,即 P(D1,D2∣H=1)=P(D1∣H=1)P(D2∣H=1)但对于健康患者来说,结果是通过以下方式耦合的 P(D1=D2=1∣H=0)=0.02.

计算联合概率表D1和 D2, 给定H=0根据你目前掌握的信息。

推导患者为阳性的概率(H=1) 在一次测试返回正面之后。您可以假设相同的基线概率P(H=1)=0.0015像之前一样。

推导患者为阳性的概率(H=1) 在两次测试返回正面之后。

假设你是一家投资银行的资产经理,你可以选择股票si投资。您的投资组合需要加起来1有重量αi对于每只股票。这些股票的平均回报率 μ=Es∼P[s]和协方差 Σ=Covs∼P[s].

计算给定投资组合的预期回报 α.

如果你想最大化投资组合的回报,你应该如何选择你的投资?

计算投资组合的方差。

制定一个最大化回报的优化问题,同时将方差限制在上限。这是获得诺贝尔奖的Markovitz 作品集 (Mangram,2013 年)。要解决它,您将需要一个二次规划求解器,这超出了本书的范围。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分