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

Chr*_*ais 5 python numpy

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

我有两组X数据Y

data = io.loadmat("datafile.mat")['data']
X = data[:,0]
Y = data[:,1]
Run Code Online (Sandbox Code Playgroud)

协方差矩阵可以这样计算(通过查看 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] ])
Run Code Online (Sandbox Code Playgroud)

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

array([[ 1.722105  ,  5.34104265],
   [ 5.34104265, 17.72717759]])
Run Code Online (Sandbox Code Playgroud)

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

array([[  1.7395    ,   5.39499258],
   [  5.39499258,  17.90623999]]) 
Run Code Online (Sandbox Code Playgroud)

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

Ign*_*sel 7

默认情况下,np.cov计算无偏协方差,它使用因子(N-1)而不是N您计算的值。

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

如果您好奇,可以在此处阅读有关使用不同前置因素背后的问题的更多信息。