动手学深度学习(pytorch)学习记录5-基本概率论[学习记录]

注:本代码在jupyter notebook上运行
封面图片来源

基本概率论

给自己的注:在Python中,%matplotlib inline 是一个IPython魔术命令(magic command),主要用于Jupyter Notebook或IPython环境中,用于控制matplotlib绘图的显示方式。当你在Jupyter Notebook中运行这个命令时,它会使得matplotlib生成的图表直接嵌入到Notebook的输出中,而不是在新的窗口中打开。

python 复制代码
%matplotlib inline
import torch
from torch.distributions import multinomial
# from d2l import torch as d2l

在统计学中,我们把从概率分布中抽取样本的过程称为抽样(sampling)。 笼统来说,可以把分布(distribution)看作对事件的概率分配, 稍后我们将给出的更正式定义。 将概率分配给一些离散选择的分布称为多项分布(multinomial distribution)。

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

python 复制代码
fair_probs = torch.ones([6]) / 6
print(fair_probs)
python 复制代码
fair_probs = torch.ones([6]) / 6 # 传入的概率向量,每个元素都是0.1667
multinomial.Multinomial(1, fair_probs).sample()
# 骰子每一个面的概率都是0.1667,从中取一个
# 每个面都有可能被抽到,重复执行代码,1出现的位置会有变化

在估计一个骰子的公平性时,我们希望从同一分布中生成多个样本。 如果用Python的for循环来完成这个任务,速度会慢得惊人。 因此我们使用深度学习框架的函数同时抽取多个样本,得到我们想要的任意形状的独立样本数组。

python 复制代码
# 一次抽取10个样本
multinomial.Multinomial(10, fair_probs).sample()

现在我们知道如何对骰子进行采样,我们可以模拟1000次投掷。 然后统计1000次投掷后,每个数字被投中了多少次,计算相对频率,以作为真实概率的估计。

python 复制代码
# 将结果存储为32位浮点数以进行除法
counts = multinomial.Multinomial(1000, fair_probs).sample()
counts / 1000  # 相对频率作为估计值

因为我们是从一个公平的骰子中生成的数据,我们知道每个结果都有真实的概率, 大约是1667,所以上面输出的估计值看起来不错。

我们也可以看到这些概率如何随着时间的推移收敛到真实概率。 让我们进行500组实验,每组抽取10个样本。

python 复制代码
counts = multinomial.Multinomial(10, fair_probs).sample((500,)) # 500组实验,每组抽取10个样本
cum_counts = counts.cumsum(dim=0) # 逐行累计求和,得到每个面的累积计数 
estimates = cum_counts / cum_counts.sum(dim=1, keepdims=True)# 每个实验的独立概率估计

from matplotlib import pyplot as plt

plt.figure(figsize=(6, 4.5)) # 设置图形窗口大小
# d2l.set_figsize((6, 4.5))
for i in range(6):
    plt.plot(estimates[:, i].numpy(),
                 label=("P(die=" + str(i + 1) + ")"))# 设置每条线的标签
plt.axhline(y=0.167, color='black', linestyle='dashed') # 设置一条y = 0.167的虚线
plt.gca().set_xlabel('Groups of experiments') # x坐标名称
plt.gca().set_ylabel('Estimated probability') # y坐标名称
plt.legend(); # 添加图例


本人学习地址https://zh-v2.d2l.ai/

恳请大佬批评指正。

相关推荐
Uzuki3 小时前
LLM 指标 | PPL vs. BLEU vs. ROUGE-L vs. METEOR vs. CIDEr
深度学习·机器学习·llm·vlm
hui函数4 小时前
Flask电影投票系统全解析
后端·python·flask
壹Y.5 小时前
非线性规划学习笔记
学习·数学建模
项目題供诗6 小时前
React学习(十二)
javascript·学习·react.js
闲人编程6 小时前
Python第三方库IPFS-API使用详解:构建去中心化应用的完整指南
开发语言·python·去中心化·内存·寻址·存储·ipfs
计算机编程小咖6 小时前
《基于大数据的农产品交易数据分析与可视化系统》选题不当,毕业答辩可能直接挂科
java·大数据·hadoop·python·数据挖掘·数据分析·spark
艾莉丝努力练剑6 小时前
【C语言16天强化训练】从基础入门到进阶:Day 7
java·c语言·学习·算法
自强的小白7 小时前
学习Java24天
java·学习
zhangfeng11337 小时前
以下是基于图论的归一化切割(Normalized Cut)图像分割工具的完整实现,结合Tkinter界面设计及Python代码示
开发语言·python·图论
flashlight_hi8 小时前
LeetCode 分类刷题:2529. 正整数和负整数的最大计数
python·算法·leetcode