协方差矩阵是统计学中描述两个或多个随机变量之间线性相关程度的一个重要工具。对于一个 k k k 维随机向量 X = ( X 1 , X 2 , . . . , X k ) X = (X_1, X_2, ..., X_k) X=(X1,X2,...,Xk),其协方差矩阵是一个 k × k k \times k k×k 的矩阵,其中每个元素 σ i j \sigma_{ij} σij 是随机变量 X i X_i Xi 和 X j X_j Xj的协方差。协方差的计算公式为:
σ i j = Cov ( X i , X j ) = E [ ( X i − E [ X i ] ) ( X j − E [ X j ] ) ] \sigma_{ij} = \text{Cov}(X_i, X_j) = E[(X_i - E[X_i])(X_j - E[X_j])] σij=Cov(Xi,Xj)=E[(Xi−E[Xi])(Xj−E[Xj])]
如果 X X X 是一个随机向量,那么 X = ( X 1 , X 2 , . . . , X k ) X = (X_1, X_2, ..., X_k) X=(X1,X2,...,Xk) 的协方差矩阵 Σ \Sigma Σ 定义为:
Σ = [ Var ( X 1 ) Cov ( X 1 , X 2 ) ⋯ Cov ( X 1 , X k ) Cov ( X 2 , X 1 ) Var ( X 2 ) ⋯ Cov ( X 2 , X k ) ⋮ ⋮ ⋱ ⋮ Cov ( X k , X 1 ) Cov ( X k , X 2 ) ⋯ Var ( X k ) ] \Sigma = \begin{bmatrix} \text{Var}(X_1) & \text{Cov}(X_1, X_2) & \cdots & \text{Cov}(X_1, X_k) \\ \text{Cov}(X_2, X_1) & \text{Var}(X_2) & \cdots & \text{Cov}(X_2, X_k) \\ \vdots & \vdots & \ddots & \vdots \\ \text{Cov}(X_k, X_1) & \text{Cov}(X_k, X_2) & \cdots & \text{Var}(X_k) \\ \end{bmatrix} Σ= Var(X1)Cov(X2,X1)⋮Cov(Xk,X1)Cov(X1,X2)Var(X2)⋮Cov(Xk,X2)⋯⋯⋱⋯Cov(X1,Xk)Cov(X2,Xk)⋮Var(Xk)
考虑一个二元随机变量 X = ( X 1 , X 2 ) X = (X_1, X_2) X=(X1,X2),其中 X 1 X_1 X1 和 X 2 X_2 X2 的期望分别为 E [ X 1 ] E[X_1] E[X1] 和 E [ X 2 ] E[X_2] E[X2],并假设我们有以下4个样本数据:
( X 1 , X 2 ) = { ( 4 , 2 ) , ( 2 , 1 ) , ( 8 , 4 ) , ( 5 , 3 ) } \begin{align*} (X_1, X_2) = &\{(4, 2), (2, 1), (8, 4), (5, 3)\} \end{align*} (X1,X2)={(4,2),(2,1),(8,4),(5,3)}
首先,我们计算 X 1 X_1 X1 和 X 2 X_2 X2 的期望值(均值):
E [ X 1 ] = 4 + 2 + 8 + 5 4 = 4.75 , E [ X 2 ] = 2 + 1 + 4 + 3 4 = 2.5 E[X_1] = \frac{4 + 2 + 8 + 5}{4} = 4.75, \quad E[X_2] = \frac{2 + 1 + 4 + 3}{4} = 2.5 E[X1]=44+2+8+5=4.75,E[X2]=42+1+4+3=2.5
接着,我们计算协方差:
Cov ( X 1 , X 2 ) = E [ ( X 1 − E [ X 1 ] ) ( X 2 − E [ X 2 ] ) ] = ( 4 − 4.75 ) ( 2 − 2.5 ) + ( 2 − 4.75 ) ( 1 − 2.5 ) + ( 8 − 4.75 ) ( 4 − 2.5 ) + ( 5 − 4.75 ) ( 3 − 2.5 ) 3 \text{Cov}(X_1, X_2) = E[(X_1 - E[X_1])(X_2 - E[X_2])] = \frac{(4-4.75)(2-2.5) + (2-4.75)(1-2.5) + (8-4.75)(4-2.5) + (5-4.75)(3-2.5)}{3} Cov(X1,X2)=E[(X1−E[X1])(X2−E[X2])]=3(4−4.75)(2−2.5)+(2−4.75)(1−2.5)+(8−4.75)(4−2.5)+(5−4.75)(3−2.5)
同样地,我们计算方差:
Var ( X 1 ) = E [ ( X 1 − E [ X 1 ] ) 2 ] , Var ( X 2 ) = E [ ( X 2 − E [ X 2 ] ) 2 ] \text{Var}(X_1) = E[(X_1 - E[X_1])^2], \quad \text{Var}(X_2) = E[(X_2 - E[X_2])^2] Var(X1)=E[(X1−E[X1])2],Var(X2)=E[(X2−E[X2])2]
最后,我们组装协方差矩阵。让我们来进行这些计算:
import numpy as np
# 样本数据
data = np.array([[4, 2], [2, 1], [8, 4], [5, 3]])
# 计算均值
mean_x1 = np.mean(data[:, 0])
mean_x2 = np.mean(data[:, 1])
# 计算协方差和方差
var_x1 = np.var(data[:, 0], ddof=1) # 方差,分母使用 N-1,即自由度校正
var_x2 = np.var(data[:, 1], ddof=1)
cov_x1_x2 = np.cov(data[:, 0], data[:, 1])[0, 1] # 协方差
# 组装协方差矩阵
covariance_matrix = np.array([[var_x1, cov_x1_x2], [cov_x1_x2, var_x2]])
print(mean_x1)
print(mean_x2)
print(covariance_matrix)
从计算结果中我们可以得出以下信息:
Σ = [ 6.25 3.16666667 3.16666667 1.66666667 ] \Sigma = \begin{bmatrix} 6.25 & 3.16666667 \\ 3.16666667 & 1.66666667 \\ \end{bmatrix} Σ=[6.253.166666673.166666671.66666667]
在这个协方差矩阵中:
此示例展示了如何手动和利用NumPy库计算协方差矩阵,这是理解两个变量之间线性关系的重要步骤。