我有一个包含数值的数据集。我想测量列之间的相关性
让我们考虑一下:
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)
答案 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))