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

恳请大佬批评指正。

相关推荐
AIFQuant15 分钟前
Python实时外汇行情接入实战:WebSocket与REST K线查询
开发语言·python·websocket
babe小鑫38 分钟前
生物统计学专业校招:SAS、R、Python学习顺序实用指南
python·学习·r语言
vx_Biye_Design40 分钟前
springboot游泳馆系统93765-计算机课程设计、毕业设计
java·javascript·spring boot·后端·python·spring·课程设计
固定资产管理系统软件1 小时前
该去哪里找专业靠谱的智慧智能设备固定资产管理系统?
人工智能·python
ctlover1 小时前
LangChain 概述
python·langchain
David猪大卫1 小时前
【C++修炼】哈希表的实现
数据结构·c++·笔记·学习·算法·哈希算法·散列表
专业程序开发源1 小时前
springbootLivehouse票务系统-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·课程设计·pygame
李高钢1 小时前
Python Django 框架入门:从零搭建你的第一个 Web 应用
前端·python·django
辣知1 小时前
辣知·化智53 榆林石峁遗址的石城文明
学习
2601_966949651 小时前
从轮询到策略消费:量化系统如何高效处理五档盘口数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash