来自样本向量的协方差矩阵
为了澄清关于什么是使用两个 N 维向量定义的协方差矩阵的小混乱,有两种可能性。
您必须问自己的问题是您是否考虑:
- 每个向量作为一个单一变量的 N 个实现/样本(例如两个 3 维向量
[X1,X2,X3]
和[Y1,Y2,Y3]
,其中变量 X 和 Y 分别有 3 个实现)
- 每个向量作为 N 个变量的 1 个实现(例如,两个 3 维向量
[X1,Y1,Z1]
和[X2,Y2,Z2]
,其中每个向量的变量 X、Y 和 Z 有 1 个实现)
由于协方差矩阵直观地定义为基于两个不同变量的方差:
- 在第一种情况下,您有 2 个变量,每个变量有 N 个示例值,因此您最终得到一个 2x2 矩阵,其中协方差是通过每个变量的 N 个样本来计算的
- 在第二种情况下,你有 N 个变量,每个变量 2 个样本,所以你最终得到一个 NxN 矩阵
关于实际问题,使用 numpy
如果您认为每个向量有 25 个变量(使用 3 而不是 25 来简化示例代码),那么一个向量中的多个变量的一种实现,使用rowvar=0
# [X1,Y1,Z1]
X_realization1 = [1,2,3]
# [X2,Y2,Z2]
X_realization2 = [2,1,8]
numpy.cov([X,Y],rowvar=0) # rowvar false, each column is a variable
代码返回,考虑 3 个变量:
array([[ 0.5, -0.5, 2.5],
[-0.5, 0.5, -2.5],
[ 2.5, -2.5, 12.5]])
否则,如果您认为一个向量是一个变量的 25 个样本,请使用rowvar=1
(numpy 的默认参数)
# [X1,X2,X3]
X = [1,2,3]
# [Y1,Y2,Y3]
Y = [2,1,8]
numpy.cov([X,Y],rowvar=1) # rowvar true (default), each row is a variable
代码返回,考虑 2 个变量:
array([[ 1. , 3. ],
[ 3. , 14.33333333]])