Python 为什么是numpy';s协方差与手动计算略有不同?
我只是好奇,我想问这个问题。为什么当我手动计算一组数据的协方差矩阵时,我的值与numpy的值略有不同 我有两组数据Python 为什么是numpy';s协方差与手动计算略有不同?,python,numpy,Python,Numpy,我只是好奇,我想问这个问题。为什么当我手动计算一组数据的协方差矩阵时,我的值与numpy的值略有不同 我有两组数据X和Y data = io.loadmat("datafile.mat")['data'] X = data[:,0] Y = data[:,1] 协方差矩阵可以这样计算(通过查看X和X、X和Y、Y和X等之间的相关性) 对于我的数据集,这给了我: array([[ 1.722105 , 5.34104265], [ 5.34104265, 17.72717759]])
X
和Y
data = io.loadmat("datafile.mat")['data']
X = data[:,0]
Y = data[:,1]
协方差矩阵可以这样计算(通过查看X和X、X和Y、Y和X等之间的相关性)
对于我的数据集,这给了我:
array([[ 1.722105 , 5.34104265],
[ 5.34104265, 17.72717759]])
而使用numpy的协方差函数convariance=np.cov(X,Y)
给了我
array([[ 1.7395 , 5.39499258],
[ 5.39499258, 17.90623999]])
类似,但不完全相同…默认情况下
np.cov
计算无偏协方差,它使用因子(N-1)
而不是您计算的N
如果查看文档,您会发现有一个参数(偏差
)可从协方差的偏差或无偏差版本中进行选择。默认情况下,它设置为false
如果您有兴趣,可以阅读更多关于在中使用不同前置因子背后的问题。尝试一件事,添加
bias=True
作为np.cov
的参数,然后再次比较。当然-现在给出完全相同的答案。怎么了?很好!你可以阅读这篇文章,但它归结为一个事实,你有一个样本,而不是整个人口,这就是为什么有这个额外的修正系数。对。你刚刚链接了文档?没有看到文章。呸,我搞砸了链接。。尽快更正,无论如何你可以而且应该至少查阅维基百科;)应该是(N-1)
而不是(N+1)
。
array([[ 1.7395 , 5.39499258],
[ 5.39499258, 17.90623999]])