深度学习中的13种概率分布

1 概率分布概述

d3d991a320f84158872f0b73a7346cbe.png

  • 共轭意味着它有共轭分布的关系。

在贝叶斯概率论中,如果后验分布 p(θx)与先验概率分布 p(θ)在同一概率分布族中,则先验和后验称为共轭分布,先验称为似然函数的共轭先验。

  • 多分类表示随机方差大于 2。

  • n 次意味着我们也考虑了先验概率 p(x)。

2 分布概率与特征

2.1 均匀分布(连续)

均匀分布在 [a,b] 上具有相同的概率值,是简单概率分布。

示例代码:

import numpy as np
from matplotlib import pyplot as pltdef uniform(x, a, b):y = [1 / (b - a) if a <= val and val <= belse 0 for val in x]return x, y, np.mean(y), np.std(y)x = np.arange(-100, 100) # define range of x
for ls in [(-50, 50), (10, 20)]:a, b = ls[0], ls[1]x, y, u, s = uniform(x, a, b)plt.plot(x, y, label=r'$\mu=%.2f,\ \sigma=%.2f$' % (u, s))plt.legend()
plt.show()

运行代码显示:

b5e207c3f6b546f9981f9560f7a5b4d9.png

2.2 伯努利分布(离散)

  • 先验概率 p(x)不考虑伯努利分布。因此,如果我们对最大似然进行优化,那么我们很容易被过度拟合。

  • 利用二元交叉熵对二项分类进行分类。它的形式与伯努利分布的负对数相同。

示例代码:

import random
import numpy as np
from matplotlib import pyplot as pltdef bernoulli(p, k):return p if k else 1 - pn_experiment = 100
p = 0.6
x = np.arange(n_experiment)
y = []
for _ in range(n_experiment):pick = bernoulli(p, k=bool(random.getrandbits(1)))y.append(pick)u, s = np.mean(y), np.std(y)
plt.scatter(x, y, label=r'$\mu=%.2f,\ \sigma=%.2f$' % (u, s))
plt.legend()
plt.show()

运行代码显示:

6638381a82cb4bd0b7204fb0360163b1.png

2.3 二项分布(离散)

  • 参数为 n 和 p 的二项分布是一系列 n 个独立实验中成功次数的离散概率分布。

  • 二项式分布是指通过指定要提前挑选的数量而考虑先验概率的分布。

示例代码:

import numpy as np
from matplotlib import pyplot as pltimport operator as op
from functools import reducedef const(n, r):r = min(r, n-r)numer = reduce(op.mul, range(n, n-r, -1), 1)denom = reduce(op.mul, range(1, r+1), 1)return numer / denomdef binomial(n, p):q = 1 - py = [const(n, k) * (p ** k) * (q ** (n-k)) for k in range(n)]return y, np.mean(y), np.std(y)for ls in [(0.5, 20), (0.7, 40), (0.5, 40)]:p, n_experiment = ls[0], ls[1]x = np.arange(n_experiment)y, u, s = binomial(n_experiment, p)plt.scatter(x, y, label=r'$\mu=%.2f,\ \sigma=%.2f$' % (u, s))plt.legend()
plt.show()

运行代码显示:

30555ee71170430fae90af850f5123ec.png

2.4 多伯努利分布,分类分布(离散)

  • 多伯努利称为分类分布。

  • 交叉熵和采取负对数的多伯努利分布具有相同的形式。

示例代码:

import random
import numpy as np
from matplotlib import pyplot as pltdef categorical(p, k):return p[k]n_experiment = 100
p = [0.2, 0.1, 0.7]
x = np.arange(n_experiment)
y = []
for _ in range(n_experiment):pick = categorical(p, k=random.randint(0, len(p) - 1))y.append(pick)u, s = np.mean(y), np.std(y)
plt.scatter(x, y, label=r'$\mu=%.2f,\ \sigma=%.2f$' % (u, s))
plt.legend()
plt.show()

运行代码显示:

7ee7365db9864858be3292a53422043b.png

2.5 多项式分布(离散)

多项式分布与分类分布的关系与伯努尔分布与二项分布的关系相同。

示例代码:

import numpy as np
from matplotlib import pyplot as pltimport operator as op
from functools import reducedef factorial(n):return reduce(op.mul, range(1, n + 1), 1)def const(n, a, b, c):"""return n! / a! b! c!, where a+b+c == n"""assert  a + b + c == nnumer = factorial(n)denom = factorial(a) * factorial(b) * factorial(c)return numer / denomdef multinomial(n):""":param x : list, sum(x) should be `n`:param n : number of trial:param p: list, sum(p) should be `1`"""# get all a,b,c where a+b+c == n, a<b<cls = []for i in range(1, n + 1):for j in range(i, n + 1):for k in range(j, n + 1):if i + j + k == n:ls.append([i, j, k])y = [const(n, l[0], l[1], l[2]) for l in ls]x = np.arange(len(y))return x, y, np.mean(y), np.std(y)for n_experiment in [20, 21, 22]:x, y, u, s = multinomial(n_experiment)plt.scatter(x, y, label=r'$trial=%d$' % (n_experiment))plt.legend()
plt.show()

运行代码显示:

21b9679b43de462694db82542372a452.png

2.6 β分布(连续)

  • β分布与二项分布和伯努利分布共轭。

  • 利用共轭,利用已知的先验分布可以更容易地得到后验分布。

  • 当β分布满足特殊情况(α=1,β=1)时,均匀分布是相同的。

示例代码:

import numpy as np
from matplotlib import pyplot as pltdef gamma_function(n):cal = 1for i in range(2, n):cal *= ireturn caldef beta(x, a, b):gamma = gamma_function(a + b) / \(gamma_function(a) * gamma_function(b))y = gamma * (x ** (a - 1)) * ((1 - x) ** (b - 1))return x, y, np.mean(y), np.std(y)for ls in [(1, 3), (5, 1), (2, 2), (2, 5)]:a, b = ls[0], ls[1]# x in [0, 1], trial is 1/0.001 = 1000x = np.arange(0, 1, 0.001, dtype=np.float)x, y, u, s = beta(x, a=a, b=b)plt.plot(x, y, label=r'$\mu=%.2f,\ \sigma=%.2f,'r'\ \alpha=%d,\ \beta=%d$' % (u, s, a, b))
plt.legend()
plt.show()

运行代码显示:

3626bfcc60bc403e8de5a04e80d28254.png

2.7 Dirichlet 分布(连续)

  • dirichlet 分布与多项式分布是共轭的。

  • 如果 k=2,则为β分布。

示例代码:

from random import randint
import numpy as np
from matplotlib import pyplot as pltdef normalization(x, s):""":return: normalizated list, where sum(x) == s"""return [(i * s) / sum(x) for i in x]def sampling():return normalization([randint(1, 100),randint(1, 100), randint(1, 100)], s=1)def gamma_function(n):cal = 1for i in range(2, n):cal *= ireturn caldef beta_function(alpha):""":param alpha: list, len(alpha) is k:return:"""numerator = 1for a in alpha:numerator *= gamma_function(a)denominator = gamma_function(sum(alpha))return numerator / denominatordef dirichlet(x, a, n):""":param x: list of [x[1,...,K], x[1,...,K], ...], shape is (n_trial, K):param a: list of coefficient, a_i > 0:param n: number of trial:return:"""c = (1 / beta_function(a))y = [c * (xn[0] ** (a[0] - 1)) * (xn[1] ** (a[1] - 1))* (xn[2] ** (a[2] - 1)) for xn in x]x = np.arange(n)return x, y, np.mean(y), np.std(y)n_experiment = 1200
for ls in [(6, 2, 2), (3, 7, 5), (6, 2, 6), (2, 3, 4)]:alpha = list(ls)# random samping [x[1,...,K], x[1,...,K], ...], shape is (n_trial, K)# each sum of row should be one.x = [sampling() for _ in range(1, n_experiment + 1)]x, y, u, s = dirichlet(x, alpha, n=n_experiment)plt.plot(x, y, label=r'$\alpha=(%d,%d,%d)$' % (ls[0], ls[1], ls[2]))plt.legend()
plt.show()

运行代码显示:

a2cb19e178b54e59884804f8d84c3334.png

2.8 伽马分布(连续)

  • 如果 gamma(a,1)/gamma(a,1)+gamma(b,1)与 beta(a,b)相同,则 gamma 分布为β分布。

  • 指数分布和卡方分布是伽马分布的特例。

代码示例:

import numpy as np
from matplotlib import pyplot as pltdef gamma_function(n):cal = 1for i in range(2, n):cal *= ireturn caldef gamma(x, a, b):c = (b ** a) / gamma_function(a)y = c * (x ** (a - 1)) * np.exp(-b * x)return x, y, np.mean(y), np.std(y)for ls in [(1, 1), (2, 1), (3, 1), (2, 2)]:a, b = ls[0], ls[1]x = np.arange(0, 20, 0.01, dtype=np.float)x, y, u, s = gamma(x, a=a, b=b)plt.plot(x, y, label=r'$\mu=%.2f,\ \sigma=%.2f,'r'\ \alpha=%d,\ \beta=%d$' % (u, s, a, b))
plt.legend()
plt.show()

运行代码显示:

1009001a4a754f21947db41db2d12c0b.png

2.9 指数分布(连续)

指数分布是 α 为 1 时 γ 分布的特例。

import numpy as np
from matplotlib import pyplot as pltdef exponential(x, lamb):y = lamb * np.exp(-lamb * x)return x, y, np.mean(y), np.std(y)for lamb in [0.5, 1, 1.5]:x = np.arange(0, 20, 0.01, dtype=np.float)x, y, u, s = exponential(x, lamb=lamb)plt.plot(x, y, label=r'$\mu=%.2f,\ \sigma=%.2f,'r'\ \lambda=%d$' % (u, s, lamb))
plt.legend()
plt.show()

运行代码显示

c97ec2c0d4f44ade97e214e78cf70650.png

2.10 高斯分布(连续)

高斯分布是一种非常常见的连续概率分布。

示例代码:

import numpy as np
from matplotlib import pyplot as pltdef gaussian(x, n):u = x.mean()s = x.std()# divide [x.min(), x.max()] by nx = np.linspace(x.min(), x.max(), n)a = ((x - u) ** 2) / (2 * (s ** 2))y = 1 / (s * np.sqrt(2 * np.pi)) * np.exp(-a)return x, y, x.mean(), x.std()x = np.arange(-100, 100) # define range of x
x, y, u, s = gaussian(x, 10000)plt.plot(x, y, label=r'$\mu=%.2f,\ \sigma=%.2f$' % (u, s))
plt.legend()
plt.show()

运行代码显示:

72168899350446a3b6e2748244a26d6f.png

2.11 标准正态分布(连续)

标准正态分布为特殊的高斯分布,平均值为 0,标准差为 1。

import numpy as np
from matplotlib import pyplot as pltdef normal(x, n):u = x.mean()s = x.std()# normalizationx = (x - u) / s# divide [x.min(), x.max()] by nx = np.linspace(x.min(), x.max(), n)a = ((x - 0) ** 2) / (2 * (1 ** 2))y = 1 / (s * np.sqrt(2 * np.pi)) * np.exp(-a)return x, y, x.mean(), x.std()x = np.arange(-100, 100) # define range of x
x, y, u, s = normal(x, 10000)plt.plot(x, y, label=r'$\mu=%.2f,\ \sigma=%.2f$' % (u, s))
plt.legend()
plt.show()

运行代码显示:

1d47e619ea3145dba3d6b45ef956ea93.png

2.12 卡方分布(连续)

  • k 自由度的卡方分布是 k 个独立标准正态随机变量的平方和的分布。

  • 卡方分布是 β 分布的特例

示例代码:

import numpy as np
from matplotlib import pyplot as pltdef gamma_function(n):cal = 1for i in range(2, n):cal *= ireturn caldef chi_squared(x, k):c = 1 / (2 ** (k/2)) * gamma_function(k//2)y = c * (x ** (k/2 - 1)) * np.exp(-x /2)return x, y, np.mean(y), np.std(y)for k in [2, 3, 4, 6]:x = np.arange(0, 10, 0.01, dtype=np.float)x, y, _, _ = chi_squared(x, k)plt.plot(x, y, label=r'$k=%d$' % (k))plt.legend()
plt.show()

运行代码显示

45847e204210461a94099453422c31d2.png

2.13 t 分布(连续)

t 分布是对称的钟形分布,与正态分布类似,但尾部较重,这意味着它更容易产生远低于平均值的值。

示例代码:

import numpy as np
from matplotlib import pyplot as pltdef gamma_function(n):cal = 1for i in range(2, n):cal *= ireturn caldef student_t(x, freedom, n):# divide [x.min(), x.max()] by nx = np.linspace(x.min(), x.max(), n)c = gamma_function((freedom + 1) // 2) \/ np.sqrt(freedom * np.pi) * gamma_function(freedom // 2)y = c * (1 + x**2 / freedom) ** (-((freedom + 1) / 2))return x, y, np.mean(y), np.std(y)for freedom in [1, 2, 5]:x = np.arange(-10, 10) # define range of xx, y, _, _ = student_t(x, freedom=freedom, n=10000)plt.plot(x, y, label=r'$v=%d$' % (freedom))plt.legend()
plt.show()

运行代码显示

84ec7b8d6794491fa4b904b23840fcd9.png

 

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

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

相关文章

尚硅谷Docker笔记-基础篇

B站视频&#xff1a;https://www.bilibili.com/video/BV1gr4y1U7CY 1.Docker简介 解决了运行环境和配置问题的软件容器 方便做持续集成并有助于整体发布的容器虚拟化技术 容器与虚拟机比较 Docker 容器是在操作系统层面上实现虚拟化&#xff0c;直接复用本地主机的操作系统…

防反接电路设计和保姆级实测

文末有封面图&#xff01;~&#xff01;~ 注意&#xff1a;正确的防反接电路在实验C ​​​​​​​ 前言 一、实验器材 二、实验步骤 正确的电路在实验C 1 实验A&#xff1a; 2 实际A数据&#xff1a; 3 实验A结论 4 实验B 5 实际B数据&#xff1a; 6 实际B结论&…

服务器感染了.DevicData-D-XXXXXXXX勒索病毒,如何确保数据文件完整恢复?

引言&#xff1a; 勒索病毒成为网络安全的严峻挑战&#xff0c;而最新的.DevicData-D-XXXXXXXX勒索病毒更是引起广泛关注。本文将深入介绍.DevicData-D-XXXXXXXX勒索病毒的特征&#xff0c;提供恢复被其加密的数据文件的方法&#xff0c;并分享预防措施&#xff0c;以确保您的数…

ubuntu or MacOS 源码安装 fmt fmtlib

1&#xff0c;前情 提醒这个源代码需要从release中下载 打包好的&#xff0c;而直接用git clone下载不了&#xff0c;可能github上的这个git clone的链接仅仅是给fmt lib的开发者使用的吧&#xff1b; 下载fmtlib的release源代码u下载fmtlib的release源代码 2&#xff0c;解压编…

Jmeter实现服务器端后台接口性能测试!

实现目的 在进行服务器端后台接口性能测试时&#xff0c;需要连接到Linux服务器端&#xff0c;然后通过命令调用socket接口&#xff0c;这个过程就需要用到jmeter的SSH Command取样器实现了。 脚本实现 设置CSV Data Set ConFig配置元件&#xff0c;参数化测试数据 设置SSH…

条件变量--使两个线程实现交替打印

一、介绍 什么是条件变量&#xff1f; 条件变量&#xff08;Condition Variable&#xff09;是多线程编程中用于线程间通信和同步的一种机制。它通常与互斥锁&#xff08;Mutex&#xff09;一起使用&#xff0c;用于解决线程竞争和避免忙等待的问题。&#xff08;条件变量不能…

【C++】C++中的String类详解及模拟实现示例

文章目录 string类简介string类的基本用法string类的常用方法string类的优势 string类的模拟实现存储结构头文件string.h源文件string.cpp源文件test.cpp string类简介 string类简介在C编程中&#xff0c;字符串是一种非常常见的数据类型&#xff0c;用于存储文本信息。C标准库…

卫浴企业做网站的效果如何

卫浴产品无论工程还是家庭中都有较高需求度&#xff0c;相关品牌或经销商也不少&#xff0c;然而在实际经营中&#xff0c;卫浴品牌商家也面临着一些痛点&#xff1a; 1、品牌宣传拓客难 卫浴产品并不缺客户&#xff0c;但大小品牌众多&#xff0c;商家想要突围绝非易事&…

【Pytorch】学习记录分享2——Tensor基础,数据类型,及其多种创建方式

pytorch 官方文档 Tensor基础&#xff0c;数据类型&#xff0c;及其多种创建方式 1. 创建 Creating Tensor&#xff1a; 标量、向量、矩阵、tensor2. 三种方法可以创建张量&#xff0c;一是通过列表(list)&#xff0c;二是通过元组(tuple)&#xff0c;三是通过Numpy的数组(arra…

java 家教管理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 家教管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

企业文档管理混乱?解密难题并找到高效解决方案!

由于大多数企业的内部文件都分散地存放在各员工电脑中&#xff0c;且没有使用文档管理系统&#xff0c;导致企业内部出现诸多文件安全隐患&#xff0c;例如&#xff1a; 1.文档分散存储在员工个人计算机中&#xff0c;当发生人事变动时文档常常遗失&#xff0c;且可能给企业造…

Ransac 算法的探索和应用

Ransac 算法python 应用和实现 Ransac 算法是一种常用的图像匹配算法&#xff0c;在参数估计领域也经常被使用到。针对估计各种曲线的鲁棒模型参数&#xff0c;效果显著。这里对ransac算法进行某些探索。 python program: import numpy as np import matplotlib.pyplot as p…

【Jmeter】Jmeter基础7-Jmeter元件介绍之后置处理器

后置处理器主要用于处理请求之后的操作&#xff0c;通常用来提取接口返回数据 2.7.1、JSON JMESPath Extractor 作用&#xff1a;可以通过JmesPath语法提取所需要的值使用场景&#xff1a;取样器返回格式为jsonJmesPath语法&#xff1a;参考https://jmespath.org/tutorial.htm…

怎么让mac右上角的时间不显示

时间成了影响工作效率和心态的一个东西&#xff0c;当我看不见时间的时候我是听命于我的平静而稳定的内心的&#xff0c;当时间时刻在我的眼前晃动的时候&#xff0c;我是慌乱而浮躁的&#xff0c;所以我决定在我工作的时候我不需要时间&#xff0c;我要听命于自己的状态&#…

2023自动化测试框架的设计原则你都知道吗?快来看!

1.代码规范 测试框架随着业务推进&#xff0c;必然会涉及代码的二次开发&#xff0c;所以代码编写应符合通用规范&#xff0c;代码命名符合业界标准&#xff0c;并且代码层次清晰。特别在大型项目、多人协作型项目中&#xff0c;如果代码没有良好的规范&#xff0c;那么整个框架…

自动化测试 (二) Web自动化测试原理

目前市面上有很多Web UI自动化测试框架&#xff0c;比如WatiN, Selinimu,WebDriver&#xff0c;还有VS2010中的Coded UI等等. 这些框架都可以操作Web中的控件&#xff0c;模拟用户输入&#xff0c;点击等操作&#xff0c;实现Web自动化测试。其实这些工具的原理都一样&#xf…

现代雷达车载应用——第2章 汽车雷达系统原理 2.3节 信号模型

经典著作&#xff0c;值得一读&#xff0c;英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 2.3 信号模型 雷达的发射机通常发出精心设计和定义明确的信号。然而&#xff0c;接收到的返回信号是多个分量的叠加&#xff0c;包括目标的反射、杂波…

1846_安全SPI

Grey 全部学习内容汇总&#xff1a;GitHub - GreyZhang/g_embedded: some embedded basic knowledge. 1846_安全SPI SPI是一种常见的通信方式&#xff0c;在汽车电子中比较常用。但是如果涉及到安全相关的设计&#xff0c;可能得考虑更多。而SPI协议本身没有很好的标准化&am…

819. 最常见的单词

819. 最常见的单词 Java&#xff1a;split() 过滤 class Solution {public String mostCommonWord(String paragraph, String[] banned) {String s paragraph.replaceAll("\\p{Punct}", " "); // 去除所有标点符号String arr[] s.split(" "…

Google视频广告的格式

Google是全球最大的搜索引擎和在线广告平台之一&#xff0c;也提供了广告服务&#xff0c;包括在其视频平台上展示视频广告。Google视频广告是一种强大的营销工具&#xff0c;可以帮助企业将品牌推广到更广泛的受众中。 Google视频广告的格式可以分为以下几种&#xff1a; 1、…