13个概率分布一网打尽:深度学习研究者必备的Python实现指南
引言:为什么每个AI研究者都需要精通概率分布?
你是否还在为选择合适的概率分布模型而烦恼?在训练神经网络时,如何用贝叶斯方法优化先验参数?面对分类问题,伯努利分布与多项分布该如何选择?本文将通过13个核心概率分布的Python实现,带你构建深度学习的概率基础,解决从数据建模到模型评估的全流程问题。
读完本文你将获得:
- 掌握8种离散分布+5种连续分布的数学原理与代码实现
- 理解分布间的共轭关系(如Beta-二项分布、Dirichlet-多项分布)
- 学会用matplotlib可视化分布特征与参数影响
- 获取可直接复用的概率计算工具库(13个即用函数)
项目概述:distribution-is-all-you-need
distribution-is-all-you-need是一个专注于深度学习领域常用概率分布的Python实现库,包含13种基础分布的数学计算与可视化代码。项目采用极简API设计,每个分布对应独立模块,支持参数调优与结果可视化,适合作为概率建模的基础设施。
安装指南
# 克隆仓库
git clone https://gitcode.com/gh_mirrors/di/distribution-is-all-you-need
cd distribution-is-all-you-need
# 安装依赖
pip install numpy matplotlib
核心概率分布实现详解
1. 伯努利分布(Bernoulli Distribution)
数学定义:描述二值随机变量的概率分布,取值为1的概率为p,0的概率为1-p。
def bernoulli(p, k):
"""
计算伯努利分布概率
:param p: 成功概率 (0 < p < 1)
:param k: 结果 (0或1)
:return: 概率值
"""
return p if k else 1 - p
# 使用示例
p = 0.6 # 正面朝上概率
print(bernoulli(p, k=1)) # 输出:0.6
print(bernoulli(p, k=0)) # 输出:0.4
应用场景:二分类问题标签建模、dropout层随机失活概率
2. 正态分布(Normal Distribution)
数学定义:又称高斯分布,是连续型概率分布,由均值μ和标准差σ决定,概率密度函数为: $$N(x|\mu,\sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}$$
import numpy as np
def normal(x, n):
u = x.mean() # 均值
s = x.std() # 标准差
x = (x - u) / s # 标准化
x = 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, u, s
# 使用示例
x = np.arange(-100, 100)
x_vals, y_vals, mu, sigma = normal(x, 10000)
可视化结果:
3. Beta分布(Beta Distribution)
数学定义:定义在[0,1]区间的连续概率分布,是二项分布的共轭先验,概率密度函数为: $$Beta(x|a,b) = \frac{x^{a-1}(1-x)^{b-1}}{B(a,b)}$$ 其中B(a,b)是Beta函数,通过Gamma函数计算:$B(a,b) = \frac{\Gamma(a)\Gamma(b)}{\Gamma(a+b)}$
def gamma_function(n):
"""Gamma函数实现"""
cal = 1
for i in range(2, n):
cal *= i
return cal
def 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)
# 参数影响示例
params = [(1, 3), (5, 1), (2, 2), (2, 5)] # (α, β)组合
参数影响对比表:
| 参数组合 | 分布形状 | 应用场景 | 均值 | 方差 |
|---|---|---|---|---|
| (1,3) | 左偏分布 | 罕见事件概率估计 | 0.25 | 0.0375 |
| (5,1) | 右偏分布 | 常见事件概率估计 | 0.833 | 0.0208 |
| (2,2) | 对称钟形 | 中等不确定性估计 | 0.5 | 0.05 |
| (2,5) | 轻微左偏 | 类不平衡数据先验 | 0.286 | 0.0255 |
4. Dirichlet分布(Dirichlet Distribution)
数学定义:Beta分布在高维空间的推广,是多项分布的共轭先验,概率密度函数为: $$Dir(x|\alpha) = \frac{1}{B(\alpha)} \prod_{i=1}^k x_i^{\alpha_i-1}$$ 其中$\alpha=(\alpha_1,...,\alpha_k)$为浓度参数,$B(\alpha)$是多元Beta函数。
def dirichlet(x, a, n):
"""
Dirichlet分布计算
:param x: 样本点集合 (n_trial, K)
:param a: 浓度参数列表
:param n: 试验次数
"""
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]
return np.arange(n), y, np.mean(y), np.std(y)
三维Dirichlet分布可视化:
分布间的层次关系与共轭家族
离散分布体系
关键关系:
- 伯努利分布是二项分布在n=1时的特例
- 分类分布是伯努利分布的多类别扩展
- Beta分布是二项分布的共轭先验(后验仍为Beta分布)
- Dirichlet分布是多项分布的共轭先验
连续分布体系
实战应用:分布选择决策树
完整API速查表
离散分布函数
| 函数名 | 参数 | 返回值 | 应用场景 |
|---|---|---|---|
bernoulli(p, k) | p:成功概率,k:结果(0/1) | 概率值 | 二分类问题 |
binomial(n, p) | n:试验次数,p:成功概率 | 概率质量函数 | 多次二分类 |
categorical(p, k) | p:概率向量,k:类别 | 概率值 | 多分类问题 |
multinomial(n) | n:试验次数 | 概率质量函数 | 多次多分类 |
连续分布函数
| 函数名 | 参数 | 返回值 | 应用场景 |
|---|---|---|---|
normal(x, n) | x:数据,n:点数 | x,y,均值,标准差 | 数据标准化 |
beta(x, a, b) | x:变量,a,b:形状参数 | x,y,均值,标准差 | 概率估计 |
dirichlet(x, a, n) | x:样本,a:浓度参数 | x,y,均值,标准差 | 多类别概率 |
gamma(x, a, b) | x:变量,a:形状,b:率参数 | x,y,均值,标准差 | 等待时间建模 |
高级应用:贝叶斯神经网络中的先验选择
在贝叶斯深度学习中,概率分布的选择直接影响模型性能:
- 权重先验:通常选择正态分布$N(0,\sigma^2)$,当数据稀缺时可改用学生t分布增强鲁棒性
- ** dropout概率**:使用Beta分布$Beta(\alpha,\beta)$建模,通过数据自适应调整失活概率
- 类别不平衡:对少数类赋予更高的先验概率,如Dirichlet分布$\alpha_{minor} > \alpha_{major}$
# 贝叶斯线性回归中的先验设置示例
def bayesian_linear_regression(X, y):
# 权重先验:正态分布
w_prior = normal(np.zeros(X.shape[1]), 10000)
# 噪声先验:Gamma分布
sigma_prior = gamma(np.random.rand(1), a=2, b=1)
# 后验推断(使用共轭先验性质)
...
项目扩展与资源
推荐学习路线
- 基础阶段:实现所有分布的概率计算与可视化
- 进阶阶段:推导共轭先验关系的数学证明
- 应用阶段:在PyTorch/TensorFlow中实现概率层
常用资源
- 理论参考:Bishop《模式识别与机器学习》第2章
- 代码扩展:添加分布的KL散度计算与采样函数
- 可视化工具:使用plotly实现交互式参数调整界面
总结与展望
本文系统介绍了深度学习研究必备的13种概率分布,从数学原理到代码实现,从参数影响到实际应用。掌握这些分布不仅能帮助你构建更稳健的概率模型,还能为贝叶斯优化、变分推断等高级技术打下基础。
未来版本将添加:
- 分布间的KL散度计算
- 蒙特卡洛采样方法
- PyTorch/TensorFlow版本实现
如果你觉得本文有帮助,请点赞收藏关注三连,下期将带来《概率分布在GAN中的应用》!
附录:完整代码仓库结构
distribution-is-all-you-need/
├── bernoulli.py # 伯努利分布
├── beta.py # Beta分布
├── binomial.py # 二项分布
├── categorical.py # 分类分布
├── chi-squared.py # 卡方分布
├── dirichlet.py # Dirichlet分布
├── exponential.py # 指数分布
├── gamma.py # Gamma分布
├── gaussian.py # 高斯分布
├── multinomial.py # 多项分布
├── normal.py # 正态分布
├── student-t.py # 学生t分布
├── uniform.py # 均匀分布
└── graph/ # 可视化结果
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



