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

恳请大佬批评指正。

相关推荐
weixin19970108016几秒前
[特殊字符] 1688开放平台API Sign签名算法详解(Java / Python / PHP 实现)
java·python·算法
EQUINOX116 分钟前
【ch03】Coding-attention-mechanisms
人工智能·深度学习·机器学习
skywalk816321 分钟前
记录段言的开发过程
开发语言·学习·编程
知识分享小能手21 分钟前
Hadoop学习教程,从入门到精通, MapReduce分布式计算框架 — 完整知识点与代码案例(4)
hadoop·学习·mapreduce
TickDB27 分钟前
Python 调用实时行情 API:ticker 返回成功后,如何校验字段再入库或展示
python·websocket·行情数据 api
老饼讲解-BP神经网络32 分钟前
具体说说-RBF神经网络-newrbe函数和newrb函数的区别
人工智能·深度学习·神经网络
AC赳赳老秦34 分钟前
OpenClaw 助力技术面试:自动生成面试题、模拟面试、整理面试知识点
开发语言·python·面试·职场和发展·自动化·deepseek·openclaw
Hali_Botebie38 分钟前
PyTorch 2.x核心变革torch.compile(),Triton 是其中最重要的 kernel 生成方式之一
人工智能·pytorch·python
机器学习之心1 小时前
198种组合算法+优化CNN-LSTM+SHAP分析+新数据预测+多输出!深度学习可解释分析,强烈安利,粉丝必备
深度学习·算法·cnn-lstm·shap分析·198种组合算法
我登哥MVP1 小时前
VS Code 安装 Claude Code 并接入 DeepSeek V4 Model
人工智能·python·node.js·agent·codex·deepseek·claude code