动手学深度学习(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/

恳请大佬批评指正。

相关推荐
青春不朽5126 分钟前
Scikit-learn 入门指南
python·机器学习·scikit-learn
进击的小头15 分钟前
FIR滤波器实战:音频信号降噪
c语言·python·算法·音视频
zy_destiny22 分钟前
【工业场景】用YOLOv26实现4种输电线隐患检测
人工智能·深度学习·算法·yolo·机器学习·计算机视觉·输电线隐患识别
别了,李亚普诺夫25 分钟前
数字测速方法和PID控制
笔记·学习·电机
乔江seven25 分钟前
【python轻量级Web框架 Flask 】2 构建稳健 API:集成 MySQL 参数化查询与 DBUtils 连接池
前端·python·mysql·flask·web
放氮气的蜗牛28 分钟前
从头开始学习AI:第五章 - 多分类与正则化技术
人工智能·学习·分类
雍凉明月夜30 分钟前
深度学习之目标检测yolo算法Ⅴ-YOLOv8
深度学习·yolo·目标检测
2501_9416527742 分钟前
改进YOLOv5-BiFPN-SDI实现牙齿龋齿检测与分类_深度学习_计算机视觉_原创
深度学习·yolo·分类
2301_8107301044 分钟前
python第四次作业
数据结构·python·算法
马剑威(威哥爱编程)1 小时前
Libvio.link爬虫技术解析:搞定反爬机制
爬虫·python