第 14 课:随机变量与常见概率分布
1. 学习目标
完成本课学习后,你将能够:
- 理解随机变量的核心概念,并能区分离散型和连续型随机变量。
- 掌握几种在机器学习中至关重要的概率分布:伯努利分布、二项分布、泊松分布、均匀分布和正态分布。
- 使用 Python 的科学计算库(如 NumPy、SciPy) 来模拟和计算这些分布的概率。
- 理解并计算随机变量的基本统计量:期望(均值)与方差。
- 认识到概率分布是连接概率论与机器学习的关键桥梁,为后续学习模型假设与推断奠定基础。
2. 核心概念
什么是随机变量?
想象你掷一个骰子。结果本身是“1点”、“2点”等文字。但为了进行数学计算,我们需要把它们变成数字。随机变量(Random Variable) 就是一个函数或规则,它将随机试验的每一个可能结果,映射到一个实数上。
- 例如,令随机变量
X表示掷骰子的结果。那么X的可能取值为 {1, 2, 3, 4, 5, 6}。 - 又如,令随机变量
Y表示明天某城市的降水量(毫米)。Y的取值可能是 [0, +∞) 之间的任意一个实数。
离散型 vs. 连续型
根据取值的性质,随机变量分为两类:
- 离散型随机变量:可能的取值是有限个或可数无限多个。通常用“概率质量函数”(PMF)来描述其取每个值的概率。
- 例子:掷骰子的点数
X,一天内访问你网站的客户数N。
- 例子:掷骰子的点数
- 连续型随机变量:可能的取值是某个区间内不可数的无穷多个点。用“概率密度函数”(PDF)来描述,计算某个区间内的概率是PDF曲线在该区间下的面积。
- 例子:气温、身高、股票价格。
几种常见分布(机器学习重点)
| 分布 | 类型 | 描述 | 例子 | 均值(期望) | 方差 |
|---|---|---|---|---|---|
| 伯努利分布 | 离散 | 单次试验,只有两种结果(0或1,成功或失败)。 | 抛一次硬币(正面=1,反面=0)。 | p | p(1-p) |
| 二项分布 | 离散 | n 次独立的伯努利试验中成功的次数。 | 抛10次硬币,正面朝上的次数。 | np | np(1-p) |
| 泊松分布 | 离散 | 单位时间(或单位面积)内稀有事件发生的次数。 | 一小时内到达银行的客户数。 | λ | λ |
| 均匀分布 | 连续 | 在区间 [a, b] 内,任意长度相等的区间概率相等。 | 随机数生成器产生的数。 | (a+b)/2 | (b-a)²/12 |
| 正态分布 | 连续 | 最重要的分布,呈钟形对称曲线。由均值μ和方差σ²决定。 | 身高、考试成绩、测量误差。 | μ | σ² |
💡 核心理解:随机变量描述了“取什么值”,而概率分布描述了“取这些值的可能性有多大”。机器学习模型常常会对数据背后的分布做出假设(如假设误差服从正态分布),因此理解这些分布至关重要。
3. 代码示例
我们将使用 Python 的 numpy 和 scipy.stats 库来演示这些分布。
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
# 设置中文字体,以防乱码
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# --- 1. 伯努利分布 (Bernoulli) ---
# 参数:p (成功概率)
bernoulli_dist = stats.bernoulli(p=0.7)
# 生成1000次伯努利试验(抛硬币)
bernoulli_samples = bernoulli_dist.rvs(size=1000)
print("伯努利分布样本均值(应接近0.7):", bernoulli_samples.mean())
# --- 2. 二项分布 (Binomial) ---
# 参数:n (试验次数), p (单次成功概率)
binom_dist = stats.binom(n=10, p=0.5)
# 计算:抛10次硬币,恰好得到k次正面的概率
k_values = np.arange(0, 11) # 0到10
prob_k = binom_dist.pmf(k_values) # 概率质量函数
# 绘制二项分布的PMF
plt.figure(figsize=(10, 4))
plt.subplot(1, 2, 1)
plt.bar(k_values, prob_k, color='skyblue')
plt.title('二项分布 (n=10, p=0.5)\nPMF')
plt.xlabel('k (成功次数)')
plt.ylabel('概率')
plt.grid(axis='y', alpha=0.3)
# --- 3. 泊松分布 (Poisson) ---
# 参数:λ (单位时间/面积内事件发生的平均次数)
poisson_dist = stats.poisson(mu=3) # 假设平均每小时来3个客户
# 计算:一小时内恰好来k个客户的概率
k_poisson = np.arange(0, 11)
prob_p = poisson_dist.pmf(k_poisson)
plt.subplot(1, 2, 2)
plt.bar(k_poisson, prob_p, color='salmon')
plt.title('泊松分布 (λ=3)\nPMF')
plt.xlabel('k (事件发生次数)')
plt.ylabel('概率')
plt.grid(axis='y', alpha=0.3)
plt.tight_layout()
plt.show()
# --- 4. 正态分布 (Normal) ---
# 参数:loc (均值 μ), scale (标准差 σ)
normal_dist = stats.norm(loc=0, scale=1) # 标准正态分布
# 生成随机样本
normal_samples = normal_dist.rvs(size=10000)
plt.figure(figsize=(10, 4))
# 绘制样本直方图(近似概率密度)
plt.subplot(1, 2, 1)
plt.hist(normal_samples, bins=50, density=True, alpha=0.7, color='lightgreen', label='样本直方图')
# 绘制理论概率密度函数(PDF)曲线
x = np.linspace(-4, 4, 100)
pdf_curve = normal_dist.pdf(x)
plt.plot(x, pdf_curve, 'r-', lw=2, label='理论PDF')
plt.title('标准正态分布 (μ=0, σ=1)')
plt.xlabel('x')
plt.ylabel('概率密度')
plt.legend()
plt.grid(alpha=0.3)
# 计算一个区间内的概率(例如,x落在[-1,1]内的概率)
prob_interval = normal_dist.cdf(1) - normal_dist.cdf(-1) # 累积分布函数(CDF)
print(f"标准正态分布下,x落在[-1, 1]区间的概率约为: {prob_interval:.4f}")
plt.subplot(1, 2, 2)
# 绘制不同μ和σ的正态分布PDF
mu_sigma = [(0, 0.5), (0, 1), (0, 2), (1, 1)]
for mu, sigma in mu_sigma:
x = np.linspace(-4, 4, 200)
pdf = stats.norm.pdf(x, loc=mu, scale=sigma)
plt.plot(x, pdf, label=f'μ={mu}, σ={sigma}')
plt.title('不同参数的正态分布PDF')
plt.xlabel('x')
plt.ylabel('概率密度')
plt.legend()
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
# --- 5. 计算统计量:期望与方差 ---
# 以二项分布为例,理论值:E[X]=np, Var(X)=np(1-p)
print("\n--- 二项分布 (n=10, p=0.5) 的统计量 ---")
print(f"理论期望 (均值): {binom_dist.mean():.2f}")
print(f"理论方差: {binom_dist.var():.2f}")
print(f"1000次模拟的样本均值: {binom_dist.rvs(size=1000).mean():.2f}")
print(f"1000次模拟的样本方差: {binom_dist.rvs(size=1000).var():.2f}")
输出说明:
- 伯努利样本均值应接近0.7。
- 会弹出两个窗口,分别显示二项分布和泊松分布的柱状图(PMF)。
- 会弹出一个窗口,左侧显示标准正态分布的直方图和理论PDF曲线(应高度吻合),右侧显示不同参数正态分布的形状。
- 终端将打印二项分布的理论与模拟的期望、方差,模拟值应接近理论值。
4. 实践练习
练习 1:分布类型判断 判断以下随机变量最可能服从哪种分布(伯努利、二项、泊松、正态)?并说明理由。
- 从一副标准扑克牌(52张)中随机抽取一张,是红心牌的数量。
- 某地区一年内发生6级以上地震的次数。
- 某班级50名同学的身高。
- 掷一枚硬币一次,结果是否为正面。
练习 2:二项分布概率计算 一个机器学习分类器对某类样本的识别准确率为90%。现在有20个新样本需要测试。
- 使用
scipy.stats.binom精确计算:恰好正确识别18个样本的概率是多少? - 计算:至少正确识别18个样本(即18个、19个或20个)的概率总和是多少?
练习 3:泊松分布分析与应用 某网站服务器记录显示,平均每小时有2.5次访问请求。
- 使用泊松分布,计算一小时内恰好收到4次请求的概率。
- 计算一小时内收到超过3次请求的概率(提示:使用CDF或生存函数
sf)。 - 思考:为什么泊松分布适合描述这种“单位时间稀有事件”?尝试联系你生活中的其他例子。
5. 常见错误
- 混淆离散与连续型分布:试图用概率质量函数(PMF)计算连续型随机变量在某个点上的概率(如“身高正好是170.00厘米”的概率,理论为0),或者用概率密度函数(PDF)的值直接当作概率(PDF的值可以大于1,但概率永远在0和1之间)。
- 误用概率计算公式:在计算二项分布时,忘记乘以组合数
C(n, k)。公式P(X=k) = C(n, k) * p^k * (1-p)^(n-k)中的C(n, k)是关键。 - 混淆期望与样本均值:期望(E[X]) 是理论分布的平均值,是一个固定常数。样本均值 是通过有限次试验得到的平均值,是一个随机变量。根据大数定律,样本量越大,样本均值越接近期望。
- 误解正态分布的参数:
μ决定分布的中心位置,σ(标准差)决定分布的“胖瘦”和分散程度。σ越大,曲线越扁平、越分散。
6. 小结
- 随机变量是将随机事件结果数字化的工具,是概率论和统计学建模的基石。
- 根据取值性质,分为离散型和连续型随机变量,分别用PMF和PDF描述。
- 机器学习中常用的分布包括:伯努利分布(0-1事件)、二项分布(多次0-1事件)、泊松分布(计数事件)、正态分布(连续型,由中心极限定理保证其普遍性)。
- 期望描述了随机变量的“中心位置”,方差描述了其“波动幅度”。这两个统计量是理解数据分布特征的核心。
- 通过
scipy.stats模块,我们可以方便地计算分布的理论性质(如概率、期望、方差)和生成模拟数据。 - 本课核心思想:许多机器学习算法(如朴素贝叶斯、高斯混合模型、线性回归的假设检验)都建立在对数据概率分布的假设之上。理解这些分布,就是理解算法背后的“世界观”。
掌握这些基础,我们就可以正式踏入下一个激动人心的主题——贝叶斯定理,它将告诉我们如何利用这些概率分布和新的证据来更新我们的信念。
练习编辑器
rust
Loading...