我是python和线性代数的新手,我对矩阵的协方差有疑问。
我有一个21乘2的矩阵,其中第一列代表当年发布的视频游戏的平均分数(从0到10),第二列代表1996年至2016年的年份。
我正在玩数据,我注意到通过做np.cov(X) 我有一个非常有趣的图表。我将列出下面的图表。我的理解是协方差显示了数据集中变量之间的依赖关系,但是根据这个协方差图可以说,随着年份的增长,游戏的平均得分会上升,这是正确的吗?
感谢。
答案 0 :(得分:3)
你的计算没有意义。默认情况下,对于np.cov(X)
,X的每一行代表一个变量,并在列中显示。比如,第一行可能是一年中的降雨量,另一行可能是视频游戏的平均评级,另一行可能只是年份本身的数量,如2012年。然后C = np.cov(X)
会给你一个3乘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乘2的矩阵(因为有2个变量)
[[ 0.14333333, 0.38333333],
[ 0.38333333, 2.33333333]]
由于非对角线项为正,因此两个变量正相关。具体地,相关系数是C[0,1]/np.sqrt(C[0,0]*C[1,1])
,其为0.66,表明相当强的相关性。