我只是好奇,想问这个问题。为什么当我手动计算一组数据的协方差矩阵时,我的值与 numpy 的值略有不同?
我有两组数据X
和Y
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]])
相似,但又不完全相同......
默认情况下,np.cov
计算无偏协方差,它使用因子 (N-1)
而不是您计算的 N
。
如果您查看 np.cov
的文档您会看到有一个参数 (bias
) 可以从协方差的有偏或无偏版本中进行选择。默认情况下,它设置为 false
。
您可以在 here 中阅读更多有关使用不同前置因子背后的问题的信息如果你好奇的话。
我是一名优秀的程序员,十分优秀!