如何计算矩阵的协方差?

时间:2014-04-24 14:11:58

标签: python math numpy pandas mathematical-optimization

我有一个包含数值的数据集。我想测量列之间的相关性

让我们考虑一下:

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 个答案:

答案 0 :(得分:1)

我有一个协方差代码snipet,我指的是:

    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是行方向的平均值。

请注意,矩阵不需要是方形的。

然后你可以使用协方差矩阵来"消除差异"通过使用Penrose pseudo inverse

将数据乘以逆协方差
        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))