赞
踩
在统计学中,方差是用来度量单个随机变量的离散程度,而协方差则一般用来刻画两个随机变量的相似程度。
参考: 带你了解什么是Covariance Matrix协方差矩阵 - 知乎
对于按行计算方式:协方差矩阵等于去中心化后的数据A'乘以A'的转置矩阵, 然后除以 (列数-1)。如果输入数据的维度为(N,M),则该乘积的形状为(N,M)和(M,N),得到一个形状为(N,N)的矩阵。即对于NxM的矩阵A, 去中心化后的矩阵为A', 则协方差等于:
设2x4的矩阵A为:
按行计算均值,意味着每一列是一个observation(样本),那么每一行就是一个随机变量(特征),举例如对于随机变量X,Y, 有四组采样结果(1,2), (2,3), (4,2), (1,5), 写成矩阵相乘的形式为:
则均值向量为
去中心化后的矩阵A'为:
则协方差矩阵cov(A)为:
所以,
- import numpy as np
-
- A = np.array([[1, 2, 4, 1], [2, 3, 2, 5]])
- print("======= cov(A) =======")
- print(np.cov(A))
-
- mean_A = np.mean(A,axis=1,keepdims=True)
- print("======= mean_A =======")
- print(mean_A)
-
- A1 = A - mean_A
- print("======= A - mean_A =======")
- print(A1)
-
- covA =np.matmul(A1, A1.T)/(A1.shape[1]-1)
- print("======= covA =======")
- print(covA)
-
输出结果:
设矩阵A (维度NxM), B (维度NxM),去中心化后的矩阵为A', B', 则两个矩阵的协方差矩阵cov(A,B)为:
设A,B (维度为2x4)值分别为:
,
则 按行求平均值, 得平均值向量为, , 去中心化后,得到:
,
则其协方差矩阵 cov(A,B)(维度为4x4)为
性质:
-
- A = np.array([[1, 2, 4, 1], [2, 3, 2, 5]])
- B = np.array([[5, 3, 4, 4], [2, 2, 8, 8]])
-
- B1 = B - np.mean(B,axis=1,keepdims=True)
- A1 = A - np.mean(A,axis=1,keepdims=True)
-
- C11 = np.cov(A)
- C22 = np.cov(B)
- C12 = np.matmul(A1, B1.T)/(B1.shape[1]-1)
- C21 = np.matmul(B1, A1.T)/(A1.shape[1]-1)
-
- C = np.vstack((np.hstack((C11,C12)),np.hstack((C21,C22))))
-
- print("======= np.cov(A,B) =======")
- print(np.cov(A,B))
-
- print("======= C =======")
- print(C)
结果:
参考:
协方差的计算方法_协方差计算-CSDN博客 (matlab计算)
https://wenku.csdn.net/answer/2408abac75f64f0186adff81be057f99
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。