Skip to content

第二章 预备知识

2.6 概率

对于我们从工厂收到的真实骰子,我们需要检查它是否有瑕疵。检查骰子的唯一方法是多次投掷并记录结果。对于每个骰子,我们将观察到 {1,,6} 中的一个值。对于每个值,一种自然的方法是将它出现的次数除以投掷的总次数,即此事件(event)概率的估计值。大数定律(law of large numbers)告诉我们:随着投掷次数的增加,这个估计值会越来越接近真实的潜在概率。让我们用代码试一试!

首先导入需要的软件包:

python
%matplotlib inline
import torch
from torch.distributions import multinomial
from d2l import torch as d2l

说明:

  • %matplotlib inline 可以让图片在 Jupyter Notebook 的元素块内展示
  • multinomial 是一个多项分布的模块

matplotlib 中文不显示怎么办

查看 matplotlib 配置文件路径:

python
import matplotlib
 
print(matplotlib.matplotlib_fname())  # 此处输出的就是配置文件的路径

得到结果:

bash
d:\Program\Miniconda\envs\d2l\lib\site-packages\matplotlib\mpl-data\matplotlibrc

进去后来到 264 行,将 #font.sans-serif 第一个加上 SimHei 即可,同理,可以在 #font.serif 第一个加上 SimSun,分别是黑体和宋体。

在统计学中,我们把从概率分布中抽取样本的过程称为抽样(sampling)。笼统来说,可以把分布(distribution)看作对事件的概率分配,稍后我们将给出的更正式定义。将概率分配给一些离散选择的分布称为 多项分布(multinomial distribution)。显然,掷骰子就是一个多项分布,它将每个 1/6 分配给离散的 1~6 这 6 个数。

从这个概率分布中,我们抽取样本,等价于掷一次骰子。我们只需传入一个概率向量,输出是另一个相同长度的向量:它在索引 i 处的值是采样结果中 i 出现的次数。

python
fair_probs = torch.ones([6]) / 6
multinomial.Multinomial(1, fair_probs).sample()

说明:fair_probs 给出了概率分布,这是一个平均分布。而多项分布的 对象 为:

python
torch.distributions.multinomial.Multinomial(
    total_count=1, probs=None, logits=None, validate_args=None)

这个对象是由 total_count 和(probslogits,注意二者不能同时存在)参数化的多项分布,

Released under the MIT License.