摘要:
协方差(Covariance)和协方差矩阵(Covariance Matrix)是统计学与机器学习中最基础、最核心的工具之一。它们不仅揭示了变量间的隐藏关系,更是主成分分析(PCA)、投资组合优化、多元回归等高级技术的数学基石。本文将通过零基础可懂的直观解释、手写公式推导、Python代码实战和工业级应用案例,带你彻底吃透协方差与协方差矩阵。
想象你每天记录两个数据:
[20, 22, 25, 18, 15]
[100, 120, 150, 80, 60]
你会发现:气温越高,销量越高。协方差就是量化这种“同向变化”程度的工具。
协方差公式:
Cov ( X , Y ) = 1 n − 1 ∑ i = 1 n ( x i − μ X ) ( y i − μ Y ) \text{Cov}(X, Y) = \frac{1}{n-1} \sum_{i=1}^n (x_i - \mu_X)(y_i - \mu_Y) Cov(X,Y)=n−11i=1∑n(xi−μX)(yi−μY)
分步解释(以气温和销量为例):
中心化:每个值减去均值(消除基准影响)。
[0, 2, 5, -2, -5]
[-2, 18, 48, -22, -42]
协同变化:对应位置相乘,放大同向趋势。
0*(-2)=0
, 2*18=36
, 5*48=240
, (-2)*(-22)=44
, (-5)*(-42)=210
求和平均:求和后除以 n − 1 n-1 n−1(无偏估计)。
结论:协方差为 +132.5,表明气温与销量强正相关。
特性 | 解释 | 示例 |
---|---|---|
方向性 | 正值为同向变化,负值为反向变化 | 气温↑→销量↑(正协方差) |
量纲敏感 | 数值受变量单位影响(如身高用cm或m,协方差不同) | 身高(cm)与体重的协方差远大于身高(m) |
零协方差不独立 | 协方差为零仅说明无线性关系,但可能存在非线性关系(如正弦曲线) | X X X 和 X 2 X^2 X2 的协方差可能为0 |
问题:协方差的数值大小无法直接比较(如身高与体重的协方差是100,年龄与收入的协方差是50,无法判断哪组关系更强)。
解决方案:引入相关系数(Pearson Correlation),公式为:
ρ X , Y = Cov ( X , Y ) σ X σ Y \rho_{X,Y} = \frac{\text{Cov}(X,Y)}{\sigma_X \sigma_Y} ρX,Y=σXσYCov(X,Y)
其中 σ X \sigma_X σX 和 σ Y \sigma_Y σY 为标准差。相关系数范围 [ − 1 , 1 ] [-1, 1] [−1,1],消除了量纲影响。
当研究多个变量(如身高、体重、年龄)时,协方差矩阵能综合描述所有变量两两之间的关系。它是一个对称矩阵,结构如下(以3个变量为例):
Σ = [ Var ( X 1 ) Cov ( X 1 , X 2 ) Cov ( X 1 , X 3 ) Cov ( X 2 , X 1 ) Var ( X 2 ) Cov ( X 2 , X 3 ) Cov ( X 3 , X 1 ) Cov ( X 3 , X 2 ) Var ( X 3 ) ] \Sigma = \begin{bmatrix} \text{Var}(X_1) & \text{Cov}(X_1, X_2) & \text{Cov}(X_1, X_3) \\ \text{Cov}(X_2, X_1) & \text{Var}(X_2) & \text{Cov}(X_2, X_3) \\ \text{Cov}(X_3, X_1) & \text{Cov}(X_3, X_2) & \text{Var}(X_3) \end{bmatrix} Σ= Var(X1)Cov(X2,X1)Cov(X3,X1)Cov(X1,X2)Var(X2)Cov(X3,X2)Cov(X1,X3)Cov(X2,X3)Var(X3)
假设有一个 n × k n \times k n×k 的数据矩阵 X X X( n n n 个样本, k k k 个变量):
import numpy as np
# 生成数据(3个变量,5个样本)
X = np.array([
[160, 55, 20],
[170, 70, 25],
[175, 75, 30],
[180, 80, 35],
[165, 60, 40]
])
# 1. 中心化
mean = X.mean(axis=0)
X_centered = X - mean
# 2. 计算协方差矩阵
cov_matrix = (X_centered.T @ X_centered) / (X.shape[0] - 1)
print("手动计算的协方差矩阵:\n", cov_matrix)
# 验证:使用NumPy库
print("NumPy计算的协方差矩阵:\n", np.cov(X, rowvar=False, ddof=1))
输出结果:
手动计算的协方差矩阵:
[[ 62.5 112.5 -12.5]
[112.5 125. -25. ]
[-12.5 -25. 62.5]]
NumPy计算的协方差矩阵:
[[ 62.5 112.5 -12.5]
[112.5 125. -25. ]
[-12.5 -25. 62.5]]
PCA通过特征值分解协方差矩阵,找到数据方差最大的方向(主成分)。具体步骤:
代码示例:
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
print("主成分方向:\n", pca.components_)
print("解释方差比例:", pca.explained_variance_ratio_)
在金融中,协方差矩阵用于量化资产间的风险关联。假设有三种资产:
协方差矩阵:
Σ = [ 0.04 0.02 0.01 0.02 0.09 0.03 0.01 0.03 0.16 ] \Sigma = \begin{bmatrix} 0.04 & 0.02 & 0.01 \\ 0.02 & 0.09 & 0.03 \\ 0.01 & 0.03 & 0.16 \end{bmatrix} Σ= 0.040.020.010.020.090.030.010.030.16
优化目标:找到权重向量 w = [ w A , w B , w C ] w = [w_A, w_B, w_C] w=[wA,wB,wC],使得组合方差 w T Σ w w^T \Sigma w wTΣw 最小。
多元正态分布的概率密度函数为:
f ( x ) = 1 ( 2 π ) k / 2 ∣ Σ ∣ 1 / 2 exp ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) f(x) = \frac{1}{(2\pi)^{k/2} |\Sigma|^{1/2}} \exp\left( -\frac{1}{2} (x-\mu)^T \Sigma^{-1} (x-\mu) \right) f(x)=(2π)k/2∣Σ∣1/21exp(−21(x−μ)TΣ−1(x−μ))
马氏距离(Mahalanobis Distance)利用协方差矩阵的逆矩阵,计算数据点与分布中心的距离:
D M ( x ) = ( x − μ ) T Σ − 1 ( x − μ ) D_M(x) = \sqrt{(x - \mu)^T \Sigma^{-1} (x - \mu)} DM(x)=(x−μ)TΣ−1(x−μ)
优势:考虑了变量间的相关性,比欧氏距离更合理。
转换公式:
ρ X i , X j = Cov ( X i , X j ) σ X i σ X j \rho_{X_i,X_j} = \frac{\text{Cov}(X_i, X_j)}{\sigma_{X_i} \sigma_{X_j}} ρXi,Xj=σXiσXjCov(Xi,Xj)
代码实现:
# 计算相关系数矩阵
corr_matrix = np.corrcoef(X, rowvar=False)
print("相关系数矩阵:\n", corr_matrix)
问题:当变量数 k k k 大于样本数 n n n 时,协方差矩阵 Σ \Sigma Σ 是奇异的(不可逆),导致PCA和马氏距离失效。
解决方案:
在神经网络中,协方差矩阵用于:
协方差与协方差矩阵是数据科学的“瑞士军刀”,其应用贯穿于统计分析、机器学习、金融工程等领域。理解它们的数学本质,不仅能帮助你在面试中脱颖而出,更能为实际工程问题提供理论指导。
关键记忆点:
附录:常见问题解答(FAQ)
Q1:协方差矩阵为什么是对称的?
Q2:协方差矩阵是否总是半正定的?
Q3:如何处理协方差矩阵不可逆的情况?