简单地说,机器学习就是做出预测。
第一个例子:根据照片区分猫和狗
首先,问题的难度可能取决于图像的分辨率。
虽然人类很容易以160×160像素的分辨率识别猫和狗, 但它在40×40像素上变得具有挑战性,而且在10×10像素下几乎是不可能的。
换句话说,我们在很远的距离(从而降低分辨率)区分猫和狗的能力可能会变为猜测。
如果完全肯定图像是一只猫,我们说标签是"猫"的概率,表示为(=“猫”)等于1。
第二个例子:给出一些天气监测数据,预测明天北京下雨的概率。 如果是夏天,下雨的概率是0.5。
在这两种情况下,我们都不确定结果,但这两种情况之间有一个关键区别。
在第一种情况中,图像实际上是狗或猫二选一。
在第二种情况下,结果实际上是一个随机的事件。
因此,概率是一种灵活的语言,用于说明我们的确定程度
大数定律(law of large numbers): 随着投掷次数的增加,这个估计值会越来越接近真实的潜在概率
首先,导入必要的软件包。
%matplotlib inline
import torch
from torch.distributions import multinomial
from d2l import torch as d2l
在统计学中,把从概率分布中抽取样本的过程称为抽样(sampling)。
可以把分布(distribution)看作是对事件的概率分配
将概率分配给一些离散选择的分布称为多项分布(multinomial distribution)。
为了抽取一个样本,即掷骰子,我们只需传入一个概率向量。
输出是另一个相同长度的向量:它在索引处的值是采样结果中出现的次数。
fair_probs = torch.ones([6]) / 6
multinomial.Multinomial(1, fair_probs).sample()
tensor([0., 0., 0., 1., 0., 0.])
在估计一个骰子的公平性时,我们希望从同一分布中生成多个样本。
如果用Python的for循环来完成这个任务,速度会慢得惊人。
因此我们使用深度学习框架的函数同时抽取多个样本,得到我们想要的任意形状的独立样本数组。
multinomial.Multinomial(10, fair_probs).sample()
tensor([0., 0., 4., 0., 4., 2.])
我们可以模拟1000次投掷。 然后,我们可以统计1000次投掷后,每个数字被投中了多少次。
具体来说,我们计算相对频率,以作为真实概率的估计。
# 将结果存储为32位浮点数以进行除法
counts = multinomial.Multinomial(1000, fair_probs).sample()
counts / 1000 # 相对频率作为估计值
tensor([0.1610, 0.1500, 0.1530, 0.1620, 0.1790, 0.1950])
因为我们是从一个公平的骰子中生成的数据,我们知道每个结果都有真实的概率16, 大约是0.167,所以上面输出的估计值看起来不错。
我们也可以看到这些概率如何随着时间的推移收敛到真实概率。 让我们进行500组实验,每组抽取10个样本。
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();
每条实线对应于骰子的6个值中的一个,并给出骰子在每组实验后出现值的估计概率。 当我们通过更多的实验获得更多的数据时,这6条实体曲线向真实概率收敛。
注意,离散(discrete)随机变量(如骰子的每一面) 和连续(continuous)随机变量(如人的体重和身高)之间存在微妙的区别。
现实生活中,测量两个人是否具有完全相同的身高没有太大意义。 如果我们进行足够精确的测量,你会发现这个星球上没有两个人具有完全相同的身高。
在这种情况下,询问某人的身高是否落入给定的区间,比如是否在1.79米和1.81米之间更有意义。
在这些情况下,我们将这个看到某个数值的可能性量化为密度(density)。
高度恰好为1.80米的概率为0,但密度不是0。 在任何两个不同高度之间的区间,我们都有非零的概率。
举个例子:
图像包含数百万像素,因此有数百万个随机变量。
在许多情况下,图像会附带一个标签(label),标识图像中的对象。 也可以将标签视为一个随机变量。
我们甚至可以将所有元数据视为随机变量,例如位置、时间、光圈、焦距、ISO、对焦距离和相机类型。
所有这些都是联合发生的随机变量。 当我们处理多个随机变量时,会有若干个变量是我们感兴趣的。