花书《深度学习》代码实现:02 概率部分:概率密度函数+期望+常见概率分布代码实现

1 概率

1.1 概率与随机变量

  • 频率学派概率 (Frequentist Probability):认为概率和事件发⽣的频率相关。
  • 贝叶斯学派概率 (Bayesian Probability):认为概率是对某件事发⽣的确定程度,可以理解成是确信的程度。
  • 随机变量 (Random Variable):⼀个可能随机取不同值的变量。例如:抛掷⼀枚硬币,出现正⾯或者反⾯的结果

2 概率分布

2.1 概率质量函数

2.1.1 定义

对于离散型变量,我们先定义⼀个随机变量,然后⽤~符号来说明它遵循的分布:x∼P(x),函数P是随机变量x的PMF。

2.1.2 举例

⼀个离散型x有k个不同的值,我们可以假设x是均匀分布的(也就是将它的每个值视为等可能的),通过将它的PMF设为

对于所有的i都成⽴。

2.2 概率密度函数

研究的对象是连续型时,可以引⼊同样的概念。

2.2.1 定义

如果⼀个函数 p 是概率密度函数:

2.2.2 举例

在 (a; b) 上的均匀分布:

 分母表示在(a,b)内为1,否则为0。

2.3 累积分布函数(Cummulative Distribution Function) 

累积分布函数表示对小于 x 的概率的积分:

2.4 代码实现:均匀分布

# 函数功能:返回范围内的均匀分布import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import uniform# 生成样本
fig, ax = plt.subplots(1, 1)
r = uniform.rvs(loc=0, scale=1, size=1000)
ax.hist(r, density=True, histtype='stepfilled', alpha=0.5)# numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
# (返回的是 [start, stop]之间的均匀分布)
# start:返回样本数据开始点
# stop:返回样本数据结束点
# num:生成的样本数据量,默认为50
# endpoint:True则包含stop;False则不包含stop
# retstep:即如果为True,则结果会给出数据间隔
# dtype:输出数组类型
# axis:0(默认)或-1# 均匀分布 pdf
x = np.linspace(uniform.ppf(0.01), uniform.ppf(0.99), 100)
ax.plot(x, uniform.pdf(x), 'r-', lw=5, alpha=0.8, label='uniform pdf')
plt.show()

 2.5 条件概率与条件独立

2.5.1 边缘概率 (Marginal Probability)

如果已知⼀组变量的联合概率分布,但想了解其中⼦集的概率分布。这种定义在子集上的概率分布被称为边缘概率分布。

2.5.2 条件概率(Conditional Probability)

在很多情况下,我们感兴趣的是某个事件,在给定其他事件发⽣时出现的概率。这种概率叫做条件概率。

 2.5.3 条件概率的链式法则 (Chain Rule of Conditional Probability)

任何多维随机变量的联合概率分布,都可以分解成只有⼀个变量的条件概率相乘形式

2.5.4 独立性 (Independence)

两个随机变量 x 和 y,如果它们的概率分布可以表⽰成两个因⼦的乘积形式,并且⼀个因⼦只包含 x 另⼀个因⼦只包含y,我们就称这两个随机变量是相互独⽴的。

2.5.5 条件独立性 (Conditional Independence)

如果关于 x 和 y 的条件概率分布对于 z 的每⼀个值都可以写成乘积的形式,那么这两个随机变量 x 和y 在给定随机变量 z 时是条件独⽴的。

 2.6 随机变量的度量

2.6.1 期望

期望(Expectation):函数f关于概率分布P(x)或p(x)的期望表⽰为由概率分布产⽣x,再计算f作⽤到x上后f(x)的平均值。

期望是线性的:

2.6.2 离散型随机变量的期望

通过求和得到:
 

2.6.3 连续型随机变量的期望

连续型随机变量可以通过求积分:

 2.6.4 方差(Variance)

衡量的是当我们对 x 依据它的概率分布进⾏采样时,随机变量 x 的函数值会呈现多⼤的差异,描述采样得到的函数值在期望上下的波动程度:

2.6.5 标准差 (Standard Deviation)

将⽅差开平⽅即为标准差。

2.6.6 协方差

⽤于衡量两组值之间的线性相关程度:

 独⽴⽐零协⽅差要求更强,因为独立还排除了非线性的相关。

2.7 代码实现:协方差

import numpy as npx = np.array([1,2,3,4,5,6,7,8,9])
y = np.array([9,8,7,6,5,4,3,2,1])
Mean = np.mean(x)
Var = np.var(x) # 默认总体方差
Var_unbias = np.var(x, ddof=1) # 样本方差(无偏方差)
Cov = np.cov(x,y)print("平均值:",Mean) #  5.0
print("总体方差:",Var) # 6.666666666666667
print("样本方差(无偏方差):",Var_unbias) # 7.5
print("协方差:",Cov) # [[ 7.5 -7.5] [-7.5  7.5]]

3 常见概率分布

3.1 伯努利分布 (两点分布) (Bernoulli Distribution)

3.1.1 定义

 3.1.2 代码实现:伯努利分布

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import bernoullidef plot_distribution(X, axes=None):""" 给定随机变量,绘制 PDF, PMF, CDF"""if axes is None:fig, axes = plt.subplots(1, 2, figsize=(10, 3))x_min, x_max = X.interval(0.99)x = np.linspace(x_min, x_max, 1000)if hasattr(X.dist, 'pdf'): # 判断有没有 pdf,即是不是连续分布axes[0].plot(x, X.pdf(x), label="PDF")axes[0].fill_between(x, X.pdf(x), alpha=0.5) # alpha 是透明度, alpha=0 表示 100% 透明, alpha=100 表示完全不透明else: # 离散分布x_int = np.unique(x.astype(int))axes[0].bar(x_int, X.pmf(x_int), label="PMF") # pmf 和 pdf 是类似的axes[1].plot(x, X.cdf(x), label="CDF")for ax in axes:ax.legend()return axesfig, axes = plt.subplots(1, 2, figsize=(10, 3)) # 画布
p = 0.3
X = bernoulli(p) # 伯努利分布
plot_distribution(X, axes=axes)
plt.show()possibility = 0.3
def trials(n_samples):samples = np.random.binomial(n_samples, possibility) # 成功的次数proba_zero = (n_samples-samples)/n_samplesproba_one = samples/n_samplesreturn [proba_zero, proba_one]fig, axes = plt.subplots(1, 2, figsize=(10, 3))# 一次试验, 伯努利分布
n_samples = 1
axes[0].bar([0, 1], trials(n_samples), label="Bernoulli")# n 次试验, 二项分布
n_samples = 1000
axes[1].bar([0, 1], trials(n_samples), label="Binomial")for ax in axes:ax.legend()
plt.show()

 

3.2 范畴分布 (分类分布) (Multinoulli Distribution) 

3.2.1 定义

范畴分布是指在具有 k 个不同值的单个离散型随机变量上的分布

3.2.2 代码实现:范畴分布 (分类分布) 

import numpy as np
import matplotlib.pyplot as pltdef k_possibilities(k):"""随机产生一组 10 维概率向量"""res = np.random.rand(k)_sum = sum(res)for i, x in enumerate(res):res[i] = x / _sumreturn resfig, axes = plt.subplots(1, 2, figsize=(10, 3))# 一次试验, 范畴分布
k, n_samples = 10, 1
samples = np.random.multinomial(n_samples, k_possibilities(k)) # 各维度“成功”的次数
axes[0].bar(range(len(samples)), samples/n_samples, label="Multinoulli")# n 次试验, 多项分布
n_samples = 1000
samples = np.random.multinomial(n_samples, k_possibilities(k))
axes[1].bar(range(len(samples)), samples/n_samples, label="Multinomial")for ax in axes:ax.legend()
plt.show()

3.3 高斯分布 (正态分布)

3.3.1 定义

 中⼼极限定理 (Central Limit Theorem) 认为,⼤量的独⽴随机变量的和近似于⼀个正态分布,因此可以认为噪声是属于正态分布的。

3.3.2 代码实现:正态分布

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import normdef plot_distribution(X, axes=None):""" 给定随机变量,绘制 PDF, PMF, CDF"""if axes is None:fig, axes = plt.subplots(1, 2, figsize=(10, 3))x_min, x_max = X.interval(0.99)x = np.linspace(x_min, x_max, 1000)if hasattr(X.dist, 'pdf'): # 判断有没有 pdf,即是不是连续分布axes[0].plot(x, X.pdf(x), label="PDF")axes[0].fill_between(x, X.pdf(x), alpha=0.5) # alpha 是透明度, alpha=0 表示 100% 透明, alpha=100 表示完全不透明else: # 离散分布x_int = np.unique(x.astype(int))axes[0].bar(x_int, X.pmf(x_int), label="PMF") # pmf 和 pdf 是类似的axes[1].plot(x, X.cdf(x), label="CDF")for ax in axes:ax.legend()return axesfig, axes = plt.subplots(1, 2, figsize=(10, 3)) # 画布
mu, sigma = 0, 1
X = norm(mu, sigma) # 标准正态分布
plot_distribution(X, axes=axes)
plt.show()

3.4 多元高斯分布 (多元正态分布)

3.4.1 定义

 3.4.2 代码实现:

import numpy as np
from scipy.stats import multivariate_normal
import matplotlib.pyplot as pltx, y = np.mgrid[-1:1:.01, -1:1:.01]
pos = np.dstack((x, y))fig = plt.figure(figsize=(4,4))
axes = fig.add_subplot(111)mu = [0.5, -0.2] # 均值
sigma = [[2.0, 0.3], [0.3, 0.5]] # 协方差矩阵
X = multivariate_normal(mu, sigma) # 多元高斯分布axes.contourf(x, y, X.pdf(pos))
plt.show()

3.5 指数分布 (Exponential Distribution) 

3.5.1 定义

是用于在x=0处获得最⾼的概率的分布,其中λ>0是分布的⼀个参数,常被称为率参数。

3.5.2 代码实现:指数分布

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import expondef plot_distribution(X, axes=None):""" 给定随机变量,绘制 PDF, PMF, CDF"""if axes is None:fig, axes = plt.subplots(1, 2, figsize=(10, 3))x_min, x_max = X.interval(0.99)x = np.linspace(x_min, x_max, 1000)if hasattr(X.dist, 'pdf'): # 判断有没有 pdf,即是不是连续分布axes[0].plot(x, X.pdf(x), label="PDF")axes[0].fill_between(x, X.pdf(x), alpha=0.5) # alpha 是透明度, alpha=0 表示 100% 透明, alpha=100 表示完全不透明else: # 离散分布x_int = np.unique(x.astype(int))axes[0].bar(x_int, X.pmf(x_int), label="PMF") # pmf 和 pdf 是类似的axes[1].plot(x, X.cdf(x), label="CDF")for ax in axes:ax.legend()plt.show()return axesfig, axes = plt.subplots(1, 2, figsize=(10, 3))# 定义 scale = 1 / lambda
X = expon(scale=1)
# 指数分布plot_distribution(X, axes=axes)

3.6 拉普拉斯分布(Laplace Distribution)

3.6.1 定义

 这也是可以在⼀个点获得⽐较⾼的概率的分布。

3.6.2 代码实现:拉普拉斯分布

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import laplacedef plot_distribution(X, axes=None):""" 给定随机变量,绘制 PDF, PMF, CDF"""if axes is None:fig, axes = plt.subplots(1, 2, figsize=(10, 3))x_min, x_max = X.interval(0.99)x = np.linspace(x_min, x_max, 1000)if hasattr(X.dist, 'pdf'): # 判断有没有 pdf,即是不是连续分布axes[0].plot(x, X.pdf(x), label="PDF")axes[0].fill_between(x, X.pdf(x), alpha=0.5) # alpha 是透明度, alpha=0 表示 100% 透明, alpha=100 表示完全不透明else: # 离散分布x_int = np.unique(x.astype(int))axes[0].bar(x_int, X.pmf(x_int), label="PMF") # pmf 和 pdf 是类似的axes[1].plot(x, X.cdf(x), label="CDF")for ax in axes:ax.legend()plt.show()return axesfig, axes = plt.subplots(1, 2, figsize=(10, 3))
mu, gamma = 0, 1X = laplace(loc=mu, scale=gamma)
plot_distribution(X, axes=axes)

3.5  Dirac 分布

 4 常用函数的有用性质

4.1 logistic sigmoid 函数

logistic sigmoid函数通常⽤来产⽣伯努利分布中的参数ϕ,因为它的范围是(0;1),处在ϕ的有效取值范围内。

sigmoid函数在变量取绝对值⾮常⼤的正值或负值时会出现饱和现象,意味着函数会变得很平,并且对输⼊的微⼩改变会变得不敏感。

4.2 softplus 函数

softplus函数可以⽤来产⽣正态分布的β和σ参数,因为它的范围是(0,∞)。当处理包含sigmoid函数的表达式时它也经常出现。

softplus函数名来源于它是另外⼀个函数的平滑(或软化)形式,这个函数是:

 4.3 代码实现: logistic sigmoid函数 + softplus函数

import numpy as np
import matplotlib.pyplot as pltx = np.linspace(-10, 10, 100)
sigmoid = 1/(1 + np.exp(-x))
softplus = np.log(1 + np.exp(x))
fig, axes = plt.subplots(1, 2, figsize=(10, 3))axes[0].plot(x, sigmoid, label='sigmoid')
axes[1].plot(x, softplus, label='softplus')
for ax in axes:ax.legend()
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469119.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内存泄露Lowmemorykiller分析

01 前言 最近疫苗事情非常火热,这件事情让我对刘强东有点刮目相看,我们需要更多的人关注曝光此类问题 02 正文 Android Kernel 会定时执行一次检查,杀死一些进程,释放掉内存。Low memory killer 是定时进行检查。Low memory killer 主要是通过进程的oom_adj 来判定进程的…

TabError: inconsistent use of tabs and spaces in indentation

本文使用PyCharm的格式化代码功能解决TabError: inconsistent use of tabs and spaces in indentation。 1、提出问题: 当把代码从别处复制进来PyCharm,然后运行报错:TabError: inconsistent use of tabs and spaces in indentation 2、 分…

python 默认参数_有趣的 Python 特性 3 | 当心默认可变参数这个大猪蹄子。

本文字数:1575 字阅读本文大概需要:4 分钟写在之前Python 提供了很多让使用者觉得舒服至极的功能特性,但是随着不断的深入学习和使用 Python,我发现其中存在着许多玄学的输出与之前预想的结果大相径庭,这个对于初学者来…

AI-无损检测方向速读:基于深度学习的表面缺陷检测方法综述

1 表面缺陷检测的概念 表面缺陷检测是机器视觉领域中非常重要的一项研究内容, 也称为 AOI (Automated optical inspection) 或 ASI (Automated surface inspection),它是利用机器视觉设备获取图像来判断采集图像中是否存在缺陷的技术。 1.1 传统检测的缺陷(非CNN)…

【完美解决】RuntimeError: one of the variables needed for gradient computation has been modified by an inp

正文在后面,往下拉即可~~~~~~~~~~~~ 欢迎各位深度学习的小伙伴订阅的我的专栏 Pytorch深度学习理论篇实战篇(2023版)专栏地址: 💛Pytorch深度学习理论篇(2023版)https://blog.csdn.net/qq_39237205/category_12077968.html 💚Pyt…

python正则表达式入门_Python中的正则表达式教程

本文http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 正则表达式经常被用到,而自己总是记不全,转载一份完整的以备不时之需。 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具&am…

解决ImportError: cannot import name ‘NoReturn‘报错

1、问题描述: 复现论文时,报错:ImportError: cannot import name ‘NoReturn‘ 尝试 pip install 安装 发现并没有这么简单 2、导致问题的原因 Python版本(3.6.1)与pip版本(21.2.3)不匹配。…

码农,你的35岁?

码农的35岁 最近经常听到关于这个话题的讨论 从深圳没有房到深圳4套房的同事 很突然 大家意识到自己在慢慢变老 好了 先放个图上来 当你老了的时候 更多的人敢对你提意见了 包括HR,包括老板,包括同事 然而 在年轻的时候,老板叫我们往东&#xff0…

删除win7多余的系统还原点_【Win7封装教程2019版】系列(二)必要的系统调整

这个系列更新就来说下必要的系统调整,因为在优化和清理之前,需要先对系统做一些必要的调整,以便让接下来的封装工作开展的更顺畅。本教程所有系列所有步骤都是连续连贯的,都有先后顺序的,请按照顺序来做。为了防止出现…

Bootloader传参数到Kernel

01 前言 这几天一直在考虑准备写点什么东西,本来想介绍下文件系统,不过文件系统是概念性的东西比较多,我自己也是看书摘抄的多,Bootloader传参数到Kernel,这个在我们开发中会经常遇到。 bootloader有什么用? 我突然想到,小时候去河里炸鱼,我们要自制鱼雷,把烟花里面…

python语法基础知识案例_Python 语法速览与实战清单

本文是对于 现代 Python 开发:语法基础与工程实践的总结,更多 Python 相关资料参考 Python 学习与实践资料索引;本文参考了 Python Crash Course - Cheat Sheets,pysheeet 等。本文仅包含笔者在日常工作中经常使用的,并…

dubbo管理控制台安装和使用

关于dubbo的配置使用已经配置好了简单的示例,下面先记录下dubbo管理控制台的安装和使用(用的zookeeper的注册中心),在网上找了些按照示例 dubbo管理控制台开源部分主要包含: 提供者 路由规则 动态配置 访问控制 权…

RuntimeError: CUDA error (10): invalid device ordinal

一、Python Error 在 Pytorch 读取参数时,报错 RuntimeError: cuda runtime error (10) : invalid device ordinal。 二、解决方法 造成这个错误的原因主要是本地只有一个 GPU (GPU:0),而程序中使用 GPUs:1。 因此,在程序中找到定义 devi…

C指针-这该死的嵌入式学习生涯

C指针-这该死的嵌入式学习生涯 01 前言 最近在公众号里面收到好几个同学关于嵌入式方面的咨询,再加上在知乎里面陆续推送了好几个嵌入式学习入门的问题,这次想统一整理一下,说说我这些年是如何被嵌入式按在地上摩擦的。 ​ 1、那一年夏天 200…

【YOLOV5-6.x中文注释版】整体项目代码全中文注释导航页面-By2022

1、开贴原因: YOLOV5:GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite 现在YOLOV5已经更新到6.X版本,现在网上很多还停留在5.X的源码注释上,因此特开一贴传承开源精神&#x…

学习微信公众号oauth2.0

首先看下整个步聚. 1. 后台服务器引导用户请求微信服务器, 微信服务器响应在微信浏览器提示用户是否要授权. 2. 用户同意后微信服务器返回code. 3. 微信浏览器跟据重定向redirect_uri带上code请求后面服务器. 4. 后台服务器收后code后, 用code请求微信服务器. 5. 微信服务器返回…

【YOLOV5-6.x讲解】YOLO5.0VS6.0版本对比+模型设计

主干目录: 【YOLOV5-6.x 版本讲解】整体项目代码注释导航现在YOLOV5已经更新到6.X版本,现在网上很多还停留在5.X的源码注释上,因此特开一贴传承开源精神!5.X版本的可以看其他大佬的帖子本文章主要从6.X版本出发,主要解…

【YOLOV5-6.x讲解】数据增强方式介绍+代码实现

主干目录: 【YOLOV5-6.x 版本讲解】整体项目代码注释导航现在YOLOV5已经更新到6.X版本,现在网上很多还停留在5.X的源码注释上,因此特开一贴传承开源精神!5.X版本的可以看其他大佬的帖子本文章主要从6.X版本出发,主要解…

Android Input子系统-含实例源码

Android Input子系统-含实例源码 1 Input子系统作用 Android很多外设都是用到输入输出设备,比如touchscreen,键盘,音量键等,输入 设备对应Android 框架是Android input子系统,像我们定制类比较多的,很多 需…

【数据集显示标注】VOC文件结构+数据集标注可视化+代码实现

一、效果图: 显示:代码常见报错》正文开始↓ 一、Pascal VOC数据集介绍 Pascal VOC网址:http://host.robots.ox.ac.uk/pascal/VOC/ 训练/验证数据集下载(2G):host.robots.ox.ac.uk/pascal/VOC/voc2012/VO…