【Dive into Deep Learning / 动手学深度学习】第二章 - 第六节:概率

目录

  • 前言
  • 2.6. 概率
    • 2.6.1. 模拟扔骰子
    • 2.6.2. 处理多个随机变量
      • 2.6.2.1. 联合概率
      • 2.6.2.2. 条件概率
      • 2.6.2.3. 贝叶斯定理
      • 2.6.2.4. 边际化
    • 2.6.3. 期望和方差
  • 结语
  • 参考文献

前言

Hello!
非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~
 
自我介绍 ଘ(੭ˊᵕˋ)੭
昵称:海轰
标签:程序猿|C++选手|学生
简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖、省奖…已保研。
学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!
 
唯有努力
 

知其然 知其所以然!

 
本文仅记录自己感兴趣的内容

2.6. 概率

2.6.1. 模拟扔骰子

  1. 导包
%matplotlib inline
import torch
from torch.distributions import multinomial
from d2l import torch as d2l
  1. 生成一个多项式分布,再采样
fair_probs = torch.ones([6]) / 6
multinomial.Multinomial(1, fair_probs).sample()

# tensor([1., 0., 0., 0., 0., 0.])

解释:torch.distributions.multinomial.Multinomial()

【Dive into Deep Learning / 动手学深度学习】第二章 - 第六节:概率_第1张图片


fair_probs = torch.ones([6]) / 6 理解为生成一个向量,其中概率都为1/6,对应扔数字1-6概率都为1/6
【Dive into Deep Learning / 动手学深度学习】第二章 - 第六节:概率_第2张图片
multinomial.Multinomial(1, fair_probs)理解为依据fair_probs这个概率向量,实验一次(扔一次骰子)

multinomial.Multinomial(1, fair_probs).sample()就是再multinomial.Multinomial(1, fair_probs)的基础上进行采样(看看具体扔出的数字是哪一个)

在这里插入图片描述


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

# tensor([0.1550, 0.1810, 0.1760, 0.1830, 0.1480, 0.1570])

counts = multinomial.Multinomial(1000, fair_probs).sample()表示,依据概率fair_probs,扔1000次骰子,再统计每个数字扔出的次数

在这里插入图片描述

上图中数字1扔出了187次,数字2扔出了145次…

counts / 1000也就是求1000次实验中每个数字被扔出的概率


  1. 绘图
counts = multinomial.Multinomial(10, fair_probs).sample((500,))
cum_counts = counts.cumsum(dim=0)
estimates = cum_counts / cum_counts.sum(dim=1, keepdims=True)

d2l.set_figsize((6, 4.5))
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();

【Dive into Deep Learning / 动手学深度学习】第二章 - 第六节:概率_第3张图片
counts = multinomial.Multinomial(10, fair_probs).sample((500,))理解为以概率fair_probs进行10次实验,生成一个多项式分布,然后再此基础上,采样500次(相当于进行了500组实验,每组需要扔10次骰子

【Dive into Deep Learning / 动手学深度学习】第二章 - 第六节:概率_第4张图片


cum_counts = counts.cumsum(dim=0):进行累加(按照行进行累加,第二行=第二行 + 第一行…)
【Dive into Deep Learning / 动手学深度学习】第二章 - 第六节:概率_第5张图片


cum_counts.sum(dim=1, keepdims=True),对每一行进行求和

【Dive into Deep Learning / 动手学深度学习】第二章 - 第六节:概率_第6张图片
如果没有参数keepdims=True,则为

【Dive into Deep Learning / 动手学深度学习】第二章 - 第六节:概率_第7张图片
简单的说,就是keepdims=True后,可以使得结果维度与原来数据保持一致(注意下图中的中括号!)
【Dive into Deep Learning / 动手学深度学习】第二章 - 第六节:概率_第8张图片


estimates = cum_counts / cum_counts.sum(dim=1, keepdims=True)

【Dive into Deep Learning / 动手学深度学习】第二章 - 第六节:概率_第9张图片

2.6.2. 处理多个随机变量

2.6.2.1. 联合概率

在这里插入图片描述

2.6.2.2. 条件概率

在这里插入图片描述

2.6.2.3. 贝叶斯定理

【Dive into Deep Learning / 动手学深度学习】第二章 - 第六节:概率_第10张图片

P ( A , B ) P(A, B) P(A,B)是指同时为 A 、 B A、B AB的概率

由公式

  • P ( A , B ) = P ( B ∣ A ) P ( A ) P(A,B) = P(B | A) P(A) P(A,B)=P(BA)P(A)
  • P ( A , B ) = P ( A ∣ B ) P ( B ) P(A,B) = P(A | B) P(B) P(A,B)=P(AB)P(B)

推出

  • P ( B ∣ A ) P ( A ) = P ( A ∣ B ) P ( B ) P(B | A) P(A) = P(A | B) P(B) P(BA)P(A)=P(AB)P(B)

P ( B ) P(B) P(B)移项得

【Dive into Deep Learning / 动手学深度学习】第二章 - 第六节:概率_第11张图片

2.6.2.4. 边际化

【Dive into Deep Learning / 动手学深度学习】第二章 - 第六节:概率_第12张图片

2.6.3. 期望和方差

【Dive into Deep Learning / 动手学深度学习】第二章 - 第六节:概率_第13张图片

结语

学习资料:http://zh.d2l.ai/

文章仅作为个人学习笔记记录,记录从0到1的一个过程

希望对您有一点点帮助,如有错误欢迎小伙伴指正

在这里插入图片描述

参考文献

  • https://blog.csdn.net/weixin_42179158/article/details/123097338
  • https://zhuanlan.zhihu.com/p/268162211

你可能感兴趣的:(机器学习,深度学习,人工智能)