协方差矩阵的对角元素不是1 pandas / numpy

时间:2017-11-22 05:11:24

标签: python pandas numpy dataframe covariance

我有以下数据框:

   A  B
0  1  5
1  2  6
2  3  7
3  4  8

我希望计算协方差

a = df.iloc[:,0].values

b = df.iloc[:,1].values

将numpy用于cov:

numpy.cov(a,b)

我明白了:

array([[ 1.66666667,  1.66666667],
   [ 1.66666667,  1.66666667]])

对角线元素不应该是1吗?如何将对角线元素设为1?

3 个答案:

答案 0 :(得分:1)

使用pd.DataFrame.corr
此外,当内置的Pandas方法为您完成工作时,无需使用Numpy。相关性将是一个,因为您已根据各自的标准偏差对不同系列进行了标准化。

df.corr() 

     A    B
A  1.0  1.0
B  1.0  1.0

pd.DataFrame.cov让你

df.cov()

          A         B
A  1.666667  1.666667
B  1.666667  1.666667

其他海报是正确的。我们可以看到正确执行数学,我们得到

df.cov().div(df.std()).div(df.std(), 0)

     A    B
A  1.0  1.0
B  1.0  1.0

答案 1 :(得分:0)

不,他们不应该。我想你可能会把它与Correlation混淆。 相关性和协方差是不同的。

你在对角线上看到的只是变量的变化! 公式的Wiki屏幕截图 -

enter image description here

Wiki Link

答案 2 :(得分:0)

我相信您正在寻找的功能应该是numpy.corrcoef而不是numpy.cov。

相关矩阵与协方差矩阵之间的关系如下:

R[i,j] = C[i,j]/sqrt(C[i,i]*C[j,k])