为什么numpy的协方差与手动计算略有不同?

时间:2018-02-20 09:12:14

标签: python numpy

我只是好奇,并且以为我会问这个问题。为什么当我手动计算一组数据的协方差矩阵时,我的值与numpy的值略有不同?

我有两组数据XY

data = io.loadmat("datafile.mat")['data']
X = data[:,0]
Y = data[:,1]

协方差矩阵可以这样计算(通过查看X和X,X和Y,Y和X等之间的相关性)

n = len(X)
corXX = np.var(X)
corXY = (1/n)*np.dot(X - np.mean(X), Y - np.mean(Y))
corYY = np.var(Y)
covariance = np.array([[corXX, corXY], [corXY, corYY] ])

对于我的数据集,这给了我:

array([[ 1.722105  ,  5.34104265],
   [ 5.34104265, 17.72717759]])

使用numpy的协方差函数covariance = np.cov(X,Y)给了我

array([[  1.7395    ,   5.39499258],
   [  5.39499258,  17.90623999]]) 

类似,但不完全相同......

1 个答案:

答案 0 :(得分:3)

默认情况下,np.cov计算无偏协方差,该协方差使用因子(N-1)代替N

如果您查看np.cov的文档,您会发现有一个参数(bias)可以从协方差的偏差或无偏差版本中进行选择。默认情况下,它设置为false

如果您感到好奇,可以在here中详细了解使用不同前因的问题。