Python实现12种概率分布(附代码)
今天给大家带来的这篇文章是关于机器学习的,机器学习有其独特的数学基础,我们用微积分来处理变化无限小的函数,并计算它们的变化;我们使用线性代数来处理计算过程;我们还用概率论与统计学建模不确定性。
在这其中,概率论有其独特的地位,模型的预测结果、学习过程、学习目标都可以通过概率的角度来理解。
与此同时,从更细的角度来说,随机变量的概率分布也是我们必须理解的内容。在这篇文章中,项目作者介绍了所有你需要了解的统计分布,他还提供了每一种分布的实现代码。
学习资料!(https://jq.qq.com/?_wv=1027&k=zLK3I0M5)

项目地址:https://github.com/graykode/dis
下面让我们先看看总体上概率分布都有什么吧:
非常有意思的是,上图每一种分布都是有联系的。比如说伯努利分布,它重复几次就是二项分布,如果再扩展到多类别,就成为 了多项式分布。注意,其中共轭(conjugate)表示的是互为共轭的概率分布;Multi-Class 表示随机变量多于 2 个;N Times 表示 我们还会考虑先验分布 P(X)。
在贝叶斯概念理论中,如果后验分布 p(θ | x) 与先验分布 p(θ) 是相同的概率分布族,那么后验分布可以称为共轭分布,先验分布
可以称为似然函数的共轭先验。
为了学习概率分布,项目作者建议我们查看 Bishop 的模式识别与机器学习。当然,你要是准备再过一遍《概率论与数理统计》,
那也是极好的。
概率分布与特性
- 均匀分布(连续型)
均匀分布是指闭区间 [a, b] 内的随机变量,且每一个变量出现的概率是相同的。

2. 伯努利分布(离散型)
伯努利分布并不考虑先验概率 P(X),它是单个二值随机变量的分布。它由单个参数φ∈ [0, 1] 控制,φ 给出了随机变量等于 1 的
概率。我们使用二元交叉熵函数实现二元分类,它的形式与对伯努利分布取负对数是一致的。
3. 二项分布(离散型)
二项分布是由伯努利提出的概念,指的是重复 n 次独立的伯努利试验。在每次试验中只有两种可能的结果,而且两种结果发生与
否互相对立。
4.Multi-Bernoulli 分布(离散型)
Multi-Bernoulli 分布又称为范畴分布(Categorical distribution),它的类别超过 2,交叉熵的形式与该分布的负对数形式是一致的。
5. 多项式分布(离散型)
范畴分布是多项式分布(Multinomial distribution)的一个特例,它与范畴分布的关系就像伯努利分布与二项分布之间的关系。
6.Beta 分布(连续型)
贝塔分布(Beta Distribution) 是一个作为伯努利分布和二项式分布的共轭先验分布的密度函数,它指一组定义在 (0,1) 区间的连续
概率分布。均匀分布是 Beta 分布的一个特例,即在 alpha=1、 beta=1 的分布。
7. 狄利克雷分布(连续型)
狄利克雷分布(Dirichlet distribution)是一类在实数域以正单纯形(standard simplex)为支撑集(support)的高维连续概率分布,是 Beta 分布在高维情形的推广。在贝叶斯推断中,狄利克雷分布作为多项式分布的共轭先验得到应用,在机器学习中被用于构建狄利克雷混合模型。
8.Gamma 分布(连续型)
Gamma 分布是统计学中的常见连续型分布,指数分布、卡方分布和 Erlang 分布都是它的特例。如果 Gamma(a,1) / Gamma(a,1)
Gamma(b,1),那么 Gamma 分布就等价于 Beta(a, b) 分布。
- 指数分布(连续型)
指数分布可以用来表示独立随机事件发生的时间间隔,比如旅客进入机场的时间间隔、打进客服中心电话的时间间隔等等。当alpha 等于 1 时,指数分布就是 Gamma 分布的特例。
10. 高斯分布(连续型)
高斯分布或正态分布是最为重要的分布之一,它广泛应用于整个机器学习的模型中。例如,我们的权重用高斯分布初始化、我们的隐藏向量用高斯分布进行归一化等等。
当正态分布的均值为 0、方差为 1 的时候,它就是标准正态分布,这也是我们最常用的分布。
- 卡方分布(连续型)
简单而言,卡方分布(Chi-squared)可以理解为,k 个独立的标准正态分布变量的平方和服从自由度为 k 的卡方分布。卡方分布是一种特殊的伽玛分布,是统计推断中应用最为广泛的概率分布之一,例如假设检验和置信区间的计算。


12. 学生 t-分布
学生 t-分布(Student t-distribution)用于根据小样本来估计呈正态分布且变异数未知的总体,其平均值是多少。t 分布也是对称的倒钟型分布,就如同正态分布一样,但它的长尾占比更多,这意味着 t 分布更容易产生远离均值的样本。

分布的代码实现
上面多种分布的 NumPy 构建方式以及制图方式都提供了对应的代码,读者可在原项目中查阅。如下所示展示了指数分布的构建
的制图方式,我们可以直接定义概率密度函数,再打印出来就好了。
import numpy as np from matplotlib import pyplot as plt  def 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.savefig('graph/exponential.png') plt.show()
最后
今天给大家分享的Python小技巧到这里就结束了,对于文章有不懂的地方可以评论留言告诉我,喜欢的记得点赞收藏哟!!!
Python实现12种概率分布(附代码)的更多相关文章
- 用Python实现BP神经网络(附代码)
		用Python实现出来的机器学习算法都是什么样子呢? 前两期线性回归及逻辑回归项目已发布(见文末链接),今天来讲讲BP神经网络. BP神经网络 全部代码 https://github.com/lawl ... 
- 小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码)
		小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码) Python 被称为是最接近 AI 的语言.最近一位名叫Anna-Lena Popkes的小姐姐在GitHub上分享了自己如何使用P ... 
- python德国信用评分卡建模(附代码AAA推荐)
		欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章 python信用评分卡建模视频系列教程(附代码) 博主录制 https://study.163.com/course/i ... 
- Python 爬虫的工具列表 附Github代码下载链接
		Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ... 
- 数据科学中的常见的6种概率分布(Python实现)
		作者:Pier Paolo Ippolito@南安普敦大学 编译:机器学习算法与Python实战(微信公众号:tjxj666) 原文:https://towardsdatascience.com/pr ... 
- 分享5种风格的 jQuery 分页效果【附代码】
		jPaginate 是一款非常精致的分页插件,提供了五种不同风格的分页效果,支持鼠标悬停翻页,快速分页功能.这款插件还提供了丰富的配置选项,你可以根据需要进行设置. 效果演示 源码下载 各个 ... 
- Python进阶:函数式编程实例(附代码)
		Python进阶:函数式编程实例(附代码) 上篇文章"几个小例子告诉你, 一行Python代码能干哪些事 -- 知乎专栏"中用到了一些列表解析.生成器.map.filter.lam ... 
- 【转载】Python编程中常用的12种基础知识总结
		Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ... 
- Python编程中常用的12种基础知识总结
		原地址:http://blog.jobbole.com/48541/ Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时 ... 
随机推荐
- go context详解
			Context通常被称为上下文,在go中,理解为goroutine的运行状态.现场,存在上下层goroutine context的传递,上层goroutine会把context传递给下层gorouti ... 
- 【洛谷】P4555 [国家集训队]最长双回文串
			P4555 [国家集训队]最长双回文串 题源:https://www.luogu.com.cn/problem/P4555 原理:Manacher 还真比KMP好理解 解决最长回文串问题 转化为长度为 ... 
- 对比学习 ——simsiam 代码解析。
			 目录 1 : 事先准备 . 2 : 代码阅读. 2.1: 数据读取 2.2: 模型载入 3 训练过程: 4 测试过程: 5 :线性验证 6 : 用自己数据集进行对比学习. 第一: 改数据集 : ... 
- 看看JDK1.7与1.8的内存模型差异
			JDK1.7与1.8的区别的内存模型差异? jsk1.7的内存模型: 堆分为初生代和老年代,大小比例为1:2,初生代又分为eden.from.to三个区域,大小比例为8:1:1 方法区:有代码区.常量 ... 
- FreeRTOS --(16)资源管理之临界区
			转载自 https://blog.csdn.net/zhoutaopower/article/details/107387427 临界区的概念在任何的 SoC 都存在,比如,针对一个寄存器,基本操作为 ... 
- FreeRTOS --(9)任务管理之启动调度器
			转载自 https://blog.csdn.net/zhoutaopower/article/details/107057528 在使用 FreeRTOS 的时候,一般的,先创建若干任务,但此刻任务并 ... 
- Linux命令篇 - sed 命令
			sed sed - stream editor for filtering and transforming text: sed:利用脚本来处理.编辑文本文件: 格式:sed [OPTION]... ... 
- 【Python情感分析】用python情感分析李子柒频道视频热门评论
			一.事件背景 今天是2021.12.2日,距离李子柒断更已经4个多月了,这是我在YouTube李子柒油管频道上,观看李子柒2021年7月14日上传的最后一条视频,我录制了视频下方的来自全世界各国网友的 ... 
- 关于transform属性的一些理解
			3D transform transform进行动画演示时,是以元素的中心为基准点的,可以使用transform-origin改变元素转变的基准点. 所有的transform动作改变都会引起X.Y轴的 ... 
- VUE3 之 Teleport - 这个系列的教程通俗易懂,适合新手
			1. 概述 老话说的好:宰相肚里能撑船,但凡成功的人,都有一种博大的胸怀. 言归正传,今天我们来聊聊 VUE 中 Teleport 的使用. 2. Teleport 2.1 遮罩效果的实现 < ... 
