如何计算矩阵的协方差?
我有一个数据集,里面包含一些数字。我想测量这些列之间的相关性。
我们来考虑一下:
dataset = pd.DataFrame({'A':np.random.rand(100)*1000,
'B':np.random.rand(100)*100,
'C':np.random.rand(100)*10,
't':np.random.rand(100)})
从数学上讲,两个不相关的数据意味着它们的协方差 cov(a,b) 等于 0。但在实际数据中,这个值应该接近于零。
np.cov(a,b)
这个 numpy 应该能给我们两个数据之间的协方差值。但我想确认我的数据集是没有相关性的,有什么方法可以做到这一点吗?
更新
from matplotlib.mlab import PCA
results = PCA(dataset.values)
1 个回答
2
我有一段关于协方差的代码片段,供我参考:
mean = np.mean(matrix,axis=0)
# make a mean matrix the same shape as data for subtraction
mean_mat = np.outer(np.ones((nsamples,1)),mean)
cov = matrix - mean_mat
cov = np.dot(cov.T,cov)/(nsamples -1)
cov
是一个 numpy 数组,mean
是按行计算的平均值。
注意,这个矩阵不需要是方形的。
然后,你可以使用协方差矩阵来“去除方差”,方法是用数据乘以协方差的逆矩阵,这里用到了 彭罗斯伪逆:
U,S,V = svd(cov)
D = np.diag(1./S)
# inv = VT.(D^-1).UT
# where cov = U.D.V
inverse_cov = np.dot(V.T,np.dot(D,U.T))