利用pytorch深度学习框架验证骰子的合格性
利用pytorch深度学习框架验证骰子的合格性
骰子生产的合格性可以用概率来表达,比如每个面出现的概率大概都是1/6
。
import torch
from d2l import torch as d2l
from torch.distributions import multinomial # 多次扔骰子出现每个面的概率服从多项式分布
fair_probs = torch.ones([6])/6 # 每个面的概率
- 进行一组实验的一次抽样
multinomial.Multinomial(1,fair_probs).sample()
- 进行一组实验的10次抽样
multinomial.Multinomial(10,fair_probs).sample()
张量里的元素对应每个面出现的次数,
3
代表出现0
的次数为3
- 进行一组实验的10000次抽样
counts = multinomial.Multinomial(10000,fair_probs).sample()
可以看到随着抽样次数增加,每个面出现的次数趋于相等,也就是每个面出现的概率越接近
- 进行500组实验,每组抽取10个样本
counts = multinomial.Multinomial(10,fair_probs).sample((500,))#进行500组实验,每组抽取10个样本
将结果按照x轴累加
cum_counts = counts.cumsum(dim=0)
- 将概率估计随着实验组数增加可视化
estimates = cum_counts/cum_counts.sum(dim=1,keepdims=True)
cum_counts.sum(dim=1,keepdims=True)
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()
可以看到随着实验组数增加,每个面的概率趋于
1/6