现在位置: 首页 > AI 数学基础 > 正文

期望、方差与协方差 -- 数据的数字特征

期望 = 中心在哪。方差 = 散得有多开。协方差 = 两个变量如何联动。


概念解析

期望 E[X]

加权平均 = 「长期平均结果」

\( \mathbb{E}[X] = \sum x_i P(x_i) \)

方差 Var(X)

数据分散程度

\( \mathbb{E}[(X - \mu)^2] \)

协方差 Cov(X,Y)

两个变量的联动关系

\( \mathbb{E}[(X-\mu_X)(Y-\mu_Y)] \)

协方差矩阵

d 维随机向量的协方差矩阵是 d×d 对称矩阵:\( \Sigma_{ij} = \text{Cov}(X_i, X_j) \)。

  • 对角元 = 各特征的方差
  • 非对角元 = 特征之间的协方差

生活例子

两个班级的平均分

A 班和 B 班数学平均分都是 75。但 A 班所有人都在 70~80,B 班有人 30 有人 100。

期望相同,但方差完全不同——方差揭示了「稳定性」的差异。


Python 动手实践

实例

import numpy as np

data = np.random.normal(5, 2, 10000)
print(f"均值={np.mean(data):.3f}, 方差={np.var(data):.3f}, 标准差={np.std(data):.3f}")

# 协方差
x = np.random.randn(1000)
y1 = 0.8*x + np.random.randn(1000)*0.3  # 正相关
y2 = -0.8*x + np.random.randn(1000)*0.3 # 负相关
print(f"Cov(X, Y+): {np.cov(x,y1)[0,1]:.3f} (正)")
print(f"Cov(X, Y-): {np.cov(x,y2)[0,1]:.3f} (负)")

# 协方差矩阵
data_3d = np.random.randn(100, 3)
print("\n协方差矩阵:\n", np.round(np.cov(data_3d.T), 3))
print("对称:", np.allclose(np.cov(data_3d.T), np.cov(data_3d.T).T))

输出:

均值=4.990, 方差=4.008, 标准差=2.002
Cov(X, Y+): 0.846 (正)
Cov(X, Y-): -0.860 (负)

协方差矩阵:
 [[ 1.03   0.035  0.033]
 [ 0.035  0.89  -0.066]
 [ 0.033 -0.066  0.933]]
对称: True

AI 中的应用场景

Batch Normalization 的数学

对每个 mini-batch 计算均值 μ_B 和方差 σ²_B,然后标准化 \( \hat{x} = (x - \mu_B) / \sqrt{\sigma^2_B + \epsilon} \)。这里用到了期望(均值)和方差两个统计量。\( \epsilon \) 是防止除零的小常数(通常 1e-5)。

PCA 降维 = 协方差矩阵特征分解

PCA 的第一步:计算数据的协方差矩阵 \( \Sigma \)(d×d 对称矩阵)。第二步:对 \( \Sigma \) 做特征分解,取前 k 个最大特征值对应的特征向量作为主成分方向。这些方向上的方差最大 → 保留了最多信息。

权重初始化的方差控制

Kaiming 初始化:\( Var(W) = 2/n_{in} \)(ReLU 网络)或 Xavier:\( Var(W) = 2/(n_{in}+n_{out}) \)(tanh 网络)。精确控制每层输出的方差,使得前向传播时激活值方差不变,反向传播时梯度方差不变。初始化不当会导致训练初期就梯度消失/爆炸。

Adam 优化器的二阶矩估计

Adam 维护梯度平方的指数移动平均 \( v_t = \beta_2 v_{t-1} + (1-\beta_2)g_t^2 \)。这本质上是对「梯度在每个参数方向上的方差」的在线估计。方差大的方向(震荡剧烈)给更小的学习率,方差小的方向(稳定下降)给更大的学习率。