【问题标题】:Diagonal element for covariance matrix not 1 pandas/numpy协方差矩阵的对角元素不是 1 pandas/numpy
【发布时间】:2017-11-22 14:31:39
【问题描述】:

我有以下数据框:

   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?

【问题讨论】:

    标签: python pandas numpy dataframe covariance


    【解决方案1】:

    不,他们不应该。我认为您可能会将其与相关性混淆。 相关性和协方差是不同的。

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

    Wiki Link

    【讨论】:

      【解决方案2】:

      使用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
      

      【讨论】:

        【解决方案3】:

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

        相关矩阵和协方差矩阵的关系如下:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-08-27
          • 1970-01-01
          • 2014-02-07
          • 1970-01-01
          • 1970-01-01
          • 2017-02-26
          • 1970-01-01
          相关资源
          最近更新 更多