如何计算矩阵的协方差?

2 投票
1 回答
4322 浏览
提问于 2025-04-18 04:06

我有一个数据集,里面包含一些数字。我想测量这些列之间的相关性。

我们来考虑一下:

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)) 

撰写回答