我是python和线性代数的新手,我对矩阵的协方差有疑问。

我有一个21 x 2矩阵,其中第一列代表该年发布的视频游戏的平均得分(从0到10),第二列代表从1996年到2016年的年份。

我正在玩数据,并且通过做np.cov(X)注意到了
我得到了一个非常有趣的图。我将在下面列出图表。据我了解,协方差表明数据集中变量之间的相关性,但是根据此协方差图可以说游戏的平均得分随着年数的增加而增加,这是否正确?

python - numpy.cov实际做什么-LMLPHP

谢谢。

最佳答案

您的计算没有意义。默认情况下,对于np.cov(X),X的每一行代表一个变量,各列中带有观察值。假设第一行可能是一年中的降雨,另一行可能是视频游戏的平均评分,另一行可能只是年份本身的数字,例如2012年。然后C = np.cov(X)将为您提供一个3 x 3的矩阵C对角线条目表示该行内有多少方差,非对角线条目表示不同行之间的相关性。即,第i行与第j行的相关系数为C[i,j]/sqrt(C[i,i]*C[j,j])

如果您的数据看起来像X = [[7.5, 2010], [8.2, 2011], [8.1, 2013]],则np.cov(X)是没有意义的,因为7.5和2010不是同一变量的两个不同观察值。而是7.5、8.2和8.1是同一变量(游戏等级)的不同观察结果。您应该使用的是

C = np.cov(X, rowvar=False)


告诉Numpy您的变量在列中。在我的示例中,您将获得2 x 2矩阵(因为有2个变量)

  [[ 0.14333333,  0.38333333],
   [ 0.38333333,  2.33333333]]


由于非对角项为正,因此两个变量确实是正相关的。具体而言,相关系数为C[0,1]/np.sqrt(C[0,0]*C[1,1]),为0.66,表明非常强的相关性。

关于python - numpy.cov实际做什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40945088/

10-10 16:32