【概率分布】均匀分布的原理、推导与Python实现

概率分布基础:均匀分布的原理、推导与Python实现

均匀分布是概率论与数理统计中最基础的连续型/离散型概率分布之一,核心特征为随机变量在指定范围内取任意值的概率均等,是后续学习复杂分布、随机模拟、蒙特卡罗方法的重要基础,本文将从概念、公式、推导到代码实现全面讲解均匀分布,适配本科及研究生阶段的学习与应用。

一、均匀分布的分类与直观解释

均匀分布分为离散型均匀分布连续型均匀分布,二者均满足「无偏性」和「区间确定性」,仅在随机变量的取值类型上有差异。

1. 离散型均匀分布

随机变量的取值为有限个离散点 ,且每个点出现的概率完全相等。
典型例子

  • 掷六面骰子,结果为1~6的整数,每个数字出现概率均为1/61/61/6;
  • 抛均匀硬币,正面、反面出现概率均为50%50\%50%;
  • 抽取一副扑克牌,任意一张牌被抽中的概率均等。

2. 连续型均匀分布

随机变量的取值为某一区间内的无限个连续值 ,区间内任意一点的概率密度相等,区间外取值概率为0。
典型例子

  • 在[0,10][0,10][0,10]区间内随机选一个数,5.5、7.8、3.14等任意小数被选中的概率密度相同;
  • 公交车在固定时段内随机到站,到站时间在时段区间内服从连续型均匀分布。

3. 均匀分布的核心特点

  1. 无偏性:所有可能结果出现的概率/概率密度一致,无偏向性;
  2. 一致性:整个取值范围内概率分布无波动,无高/低概率区间;
  3. 区间确定性:结果必落在指定区间内,区间外概率为0。

二、离散型均匀分布的公式与特征推导

1. 概率质量函数(PMF)

若离散型随机变量XXX可取nnn个不同的离散值x1,x2,...,xnx_1,x_2,...,x_nx1,x2,...,xn,且每个值出现概率均等,则其概率质量函数为:
P(X=xi)=1n,i=1,2,...,nP\left(X=x_{i}\right)=\frac{1}{n}, \quad i=1,2, ..., nP(X=xi)=n1,i=1,2,...,n
:离散型分布用概率质量函数描述概率,而非概率密度函数。

2. 期望值(均值)推导

期望值是随机变量的加权平均值,权重为各取值的概率,离散型均匀分布的期望值公式推导如下:
E[X]=∑i=1nxi⋅P(X=xi)E[X]=\sum_{i=1}^{n} x_{i} \cdot P\left(X=x_{i}\right)E[X]=i=1∑nxi⋅P(X=xi)

若XXX取1,2,...,n1,2,...,n1,2,...,n连续整数(如骰子点数),则求和可简化为:
E[X]=1n∑i=1ni=1n⋅n(n+1)2=n+12E[X]=\frac{1}{n} \sum_{i=1}^{n} i=\frac{1}{n} \cdot \frac{n(n+1)}{2}=\frac{n+1}{2}E[X]=n1i=1∑ni=n1⋅2n(n+1)=2n+1
实例 :掷六面骰子,n=6n=6n=6,则E[X]=(6+1)/2=3.5E[X]=(6+1)/2=3.5E[X]=(6+1)/2=3.5。

3. 方差推导

方差描述随机变量的离散程度,通用公式为Var(X)=E[X2]−(E[X])2Var(X)=E\left[X^{2}\right]-(E[X])^{2}Var(X)=E[X2]−(E[X])2,分步推导如下:

步骤1:计算E[X2]E[X^2]E[X2]

E[X2]=1n∑i=1ni2=1n⋅n(n+1)(2n+1)6=(n+1)(2n+1)6E\left[X^{2}\right]=\frac{1}{n} \sum_{i=1}^{n} i^{2}=\frac{1}{n} \cdot \frac{n(n+1)(2 n+1)}{6}=\frac{(n+1)(2n+1)}{6}E[X2]=n1i=1∑ni2=n1⋅6n(n+1)(2n+1)=6(n+1)(2n+1)

步骤2:代入方差公式求最终结果

Var(X)=(n+1)(2n+1)6−(n+12)2=n2−112Var(X)=\frac{(n+1)(2n+1)}{6} - \left(\frac{n+1}{2}\right)^2 = \frac{n^{2}-1}{12}Var(X)=6(n+1)(2n+1)−(2n+1)2=12n2−1
实例 :掷六面骰子,n=6n=6n=6,则Var(X)=(36−1)/12=35/12≈2.9167Var(X)=(36-1)/12=35/12\approx2.9167Var(X)=(36−1)/12=35/12≈2.9167。

三、连续型均匀分布的公式与特征推导

连续型均匀分布的核心是概率密度函数(PDF),区别于离散型的概率质量函数,概率密度表示单位区间内的概率,需通过积分计算区间概率。

1. 概率密度函数(PDF)

若连续型随机变量XXX在区间[a,b][a,b][a,b]上服从均匀分布,记为X∼U(a,b)X\sim U(a,b)X∼U(a,b),则其概率密度函数为分段函数:
f(x)={1b−a,a≤x≤b0,otherwisef(x)= \begin{cases}\frac{1}{b-a}, & a \leq x \leq b \\ 0, & otherwise \end{cases}f(x)={b−a1,0,a≤x≤botherwise
核心含义 :区间[a,b][a,b][a,b]内概率密度为常数1/(b−a)1/(b-a)1/(b−a)(区间长度的倒数),区间外密度为0,保证整个定义域内积分和为1(概率归一性)。

2. 期望值(均值)推导

连续型随机变量的期望值通过积分 计算,公式为E[X]=∫−∞+∞x⋅f(x)dxE[X]=\int_{-\infty}^{+\infty} x \cdot f(x) dxE[X]=∫−∞+∞x⋅f(x)dx,结合均匀分布的PDF分段性,积分上下限简化为[a,b][a,b][a,b]:
E[X]=∫abx⋅1b−adx=1b−a⋅x22∣ab=a+b2E[X]=\int_{a}^{b} x \cdot \frac{1}{b-a} d x=\frac{1}{b-a} \cdot \frac{x^2}{2}\bigg|_{a}^{b} = \frac{a+b}{2}E[X]=∫abx⋅b−a1dx=b−a1⋅2x2 ab=2a+b
核心结论 :连续型均匀分布的期望值为区间[a,b][a,b][a,b]的中点 ,符合直观认知。
实例 :X∼U(0,10)X\sim U(0,10)X∼U(0,10),则E[X]=(0+10)/2=5E[X]=(0+10)/2=5E[X]=(0+10)/2=5。

3. 方差推导

仍使用方差通用公式Var(X)=E[X2]−(E[X])2Var(X)=E\left[X^{2}\right]-(E[X])^{2}Var(X)=E[X2]−(E[X])2,分步通过积分推导:

步骤1:计算E[X2]E[X^2]E[X2]

E[X2]=∫abx2⋅1b−adx=1b−a⋅x33∣ab=b3−a33(b−a)E\left[X^{2}\right]=\int_{a}^{b} x^{2} \cdot \frac{1}{b-a} d x=\frac{1}{b-a} \cdot \frac{x^3}{3}\bigg|_{a}^{b} = \frac{b^{3}-a^{3}}{3(b-a)}E[X2]=∫abx2⋅b−a1dx=b−a1⋅3x3 ab=3(b−a)b3−a3

步骤2:代入期望值化简求方差

利用立方差公式b3−a3=(b−a)(b2+ab+a2)b^3-a^3=(b-a)(b^2+ab+a^2)b3−a3=(b−a)(b2+ab+a2),结合E[X]=(a+b)/2E[X]=(a+b)/2E[X]=(a+b)/2,化简得:
Var(X)=b2+ab+a23−(a+b2)2=(b−a)212Var(X)=\frac{b^2+ab+a^2}{3} - \left(\frac{a+b}{2}\right)^2 = \frac{(b-a)^{2}}{12}Var(X)=3b2+ab+a2−(2a+b)2=12(b−a)2
核心结论 :连续型均匀分布的方差仅与区间长度 有关,长度越大,离散程度越高。
实例 :X∼U(0,10)X\sim U(0,10)X∼U(0,10),则Var(X)=(10−0)2/12=100/12≈8.3333Var(X)=(10-0)^2/12=100/12\approx8.3333Var(X)=(10−0)2/12=100/12≈8.3333。

四、均匀分布的Python实现与可视化

Python中主要通过NumPy 生成均匀分布数据,Matplotlib实现可视化,分别演示离散型和连续型均匀分布的代码实现,代码可直接运行。

1. 离散型均匀分布(骰子点数)可视化

用柱状图展示掷六面骰子的概率分布,每个点数概率均为1/61/61/6:

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 定义骰子点数和对应概率
faces = np.array([1, 2, 3, 4, 5, 6])
probabilities = np.ones(6) / 6  # 每个点数概率1/6

# 绘制柱状图
plt.bar(faces, probabilities, color='skyblue', edgecolor='black')
plt.title('Discrete Uniform Distribution: Fair Dice', fontsize=12)
plt.xlabel('Dice Face', fontsize=10)
plt.ylabel('Probability', fontsize=10)
plt.ylim(0, 0.2)  # 限定y轴范围,让图形更清晰
plt.xticks(faces) # x轴仅显示整数点数
plt.show()

结果特征 :生成等高柱状图,所有柱子高度均为1/6≈0.16671/6\approx0.16671/6≈0.1667,体现离散型均匀分布的概率均等性。

2. 连续型均匀分布PDF可视化

绘制X∼U(0,10)X\sim U(0,10)X∼U(0,10)的概率密度函数,展示区间内密度为常数、区间外密度为0的特征:

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 定义均匀分布区间 [a, b]
a, b = 0, 10
# 生成x轴数据,包含区间外部分(-2到12),更直观展示区间确定性
x = np.linspace(a - 2, b + 2, 1000)
# 根据PDF生成y轴数据,区间内为1/(b-a),区间外为0
y = np.where((x >= a) & (x <= b), 1 / (b - a), 0)

# 绘制PDF曲线
plt.plot(x, y, color='blue', linewidth=2)
plt.title('Continuous Uniform Distribution PDF', fontsize=12)
plt.xlabel('x', fontsize=10)
plt.ylabel('Probability Density', fontsize=10)
plt.ylim(0, 0.15)  # 限定y轴范围
plt.axvline(a, color='red', linestyle='--', label=f'a={a}') # 区间左边界
plt.axvline(b, color='red', linestyle='--', label=f'b={b}') # 区间右边界
plt.legend()
plt.show()

结果特征 :[0,10][0,10][0,10]区间内为水平直线(密度0.10.10.1),区间外曲线与x轴重合(密度0),符合连续型均匀分布的PDF特征。

3. 连续型均匀分布随机抽样与直方图验证

np.random.uniform()生成均匀分布随机样本,通过直方图展示样本的密度分布,并与理论PDF对比,验证抽样的有效性:

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 定义分布参数和抽样数
a, b = 0, 10
n_samples = 10000  # 样本数越大,越接近理论分布

# 生成均匀分布随机样本
data = np.random.uniform(a, b, n_samples)

# 绘制直方图(密度归一化)
plt.hist(data, bins=50, density=True, edgecolor='black', color='lightblue', label='Sample Histogram')

# 绘制理论PDF曲线
x = np.linspace(a, b, 1000)
y = np.ones_like(x) / (b - a)
plt.plot(x, y, 'r-', lw=2, label='Theoretical PDF')

# 图形美化
plt.title('Uniform Distribution: Sample vs Theoretical', fontsize=12)
plt.xlabel('Value', fontsize=10)
plt.ylabel('Density', fontsize=10)
plt.legend()
plt.show()

结果特征:直方图的柱高基本与理论PDF直线重合,体现随机抽样的分布与理论均匀分布一致。

五、均匀分布的实际应用:蒙特卡罗模拟估计圆周率π\piπ

均匀分布的核心应用之一是随机抽样 ,蒙特卡罗方法正是基于随机抽样的数值计算方法,以下通过均匀分布在单位正方形内抽样,估计圆周率π\piπ,体现其在实际问题中的应用价值。

1. 原理分析

  1. 单位正方形(边长为2,中心在原点,范围[−1,1]×[−1,1][-1,1]\times[-1,1][−1,1]×[−1,1])的面积Ssquare=2×2=4S_{square}=2\times2=4Ssquare=2×2=4;
  2. 单位圆(半径r=1r=1r=1,中心在原点)的面积Scircle=πr2=πS_{circle}=\pi r^2=\piScircle=πr2=π;
  3. 在单位正方形内生成均匀分布的随机点,统计落在单位圆内的点的比例 p=NinsideNtotalp=\frac{N_{inside}}{N_{total}}p=NtotalNinside;
  4. 由几何概型,p=ScircleSsquare=π4p=\frac{S_{circle}}{S_{square}}=\frac{\pi}{4}p=SsquareScircle=4π,因此π=4p\pi=4pπ=4p。

2. Python代码实现

python 复制代码
import numpy as np
import matplotlib.pyplot as plt

# 定义蒙特卡罗模拟函数,估计π
def estimate_pi(n_samples):
    inside_circle = 0  # 统计落在圆内的点数
    points_x, points_y = [], []  # 存储所有点的坐标
    for _ in range(n_samples):
        # 生成[-1,1]区间内的均匀分布随机点(x,y)
        x, y = np.random.uniform(-1, 1), np.random.uniform(-1, 1)
        points_x.append(x)
        points_y.append(y)
        # 判断是否在单位圆内(x²+y²≤1)
        if x**2 + y**2 <= 1:
            inside_circle += 1
    # 计算π的估计值
    pi_estimate = (inside_circle / n_samples) * 4
    return pi_estimate, points_x, points_y

# 执行模拟,生成10000个样本
n_samples = 10000
pi_estimate, points_x, points_y = estimate_pi(n_samples)
print(f"模拟样本数:{n_samples},π的估计值:{pi_estimate:.4f}")

# 绘制模拟结果散点图
plt.figure(figsize=(6, 6))  # 正方形画布,保证比例
plt.scatter(points_x, points_y, s=1, c=np.sqrt(np.array(points_x)**2 + np.array(points_y)**2) <= 1, 
            cmap='coolwarm', label='Inside/Outside Circle')
plt.title(f'Monte Carlo Simulation: Estimating π\nEstimated π = {pi_estimate:.4f}', fontsize=12)
plt.xlabel('x', fontsize=10)
plt.ylabel('y', fontsize=10)
plt.axis('equal')  # 等比例坐标轴,避免图形变形
plt.show()

3. 结果特征

  1. 样本数越大,π\piπ的估计值越接近真实值(3.1415926...);
  2. 散点图中两种颜色区分圆内/圆外的点,直观展示几何概型的抽样过程;
  3. 该方法是均匀分布在数值计算、随机模拟领域的典型应用,也是蒙特卡罗方法的入门案例。

六、总结

  1. 均匀分布分为离散型和连续型,核心特征为取值范围内概率/概率密度均等,是最基础的无偏概率分布;
  2. 离散型均匀分布适用于有限离散取值场景,期望值为n+12\frac{n+1}{2}2n+1,方差为n2−112\frac{n^2-1}{12}12n2−1(取值为1~n时);
  3. 连续型均匀分布记为U(a,b)U(a,b)U(a,b),PDF为区间内的常数,期望值为区间中点a+b2\frac{a+b}{2}2a+b,方差为(b−a)212\frac{(b-a)^2}{12}12(b−a)2,仅与区间长度有关;
  4. Python中通过np.random.uniform()生成连续型均匀分布数据,结合Matplotlib可实现分布可视化;
  5. 均匀分布是随机抽样的基础,广泛应用于蒙特卡罗模拟、数值计算、随机试验设计等领域,是后续学习复杂概率模型的重要铺垫。

拓展方向:均匀分布的联合分布、均匀分布与其他分布的变换(如指数分布、正态分布)、均匀分布在机器学习中的随机初始化应用。

相关推荐
一叶落4382 小时前
LeetCode 74 | 搜索二维矩阵(C语言版题解)
c语言·数据结构·c++·算法·leetcode·矩阵·动态规划
罗湖老棍子2 小时前
星际信号塔 —— 单调栈经典应用详解
数据结构·算法·单调栈
wmfglpz882 小时前
Django全栈开发入门:构建一个博客系统
jvm·数据库·python
iAkuya2 小时前
(leetcode)力扣100 96.只出现一次的数字(位运算)
算法·leetcode·职场和发展
zzb15802 小时前
Agent学习-Reflection框架
java·人工智能·python·学习·ai
2301_764441332 小时前
使用python实现脉冲神经网络,用于分类任务
python·神经网络·分类
Tisfy2 小时前
LeetCode 1622.奇妙序列:懒更新
数学·算法·leetcode·题解·设计
無限進步D2 小时前
高精度算法 cpp
c++·笔记·算法·入门
qyzm2 小时前
AtCoder Beginner Contest 449
数据结构·python·算法·贪心算法