为什么我的协方差计算不精确

时间:2018-12-02 13:45:34

标签: python numpy floating-point

我正在尝试编写一个用于计算协方差矩阵的函数。与内置np.cov()的答案非常相似,但不完全相同。似乎损失了准确性和精度。有谁知道为什么我的协方差矩阵不够精确?

def cov_matrix(X):

   # initialize covariance matrix
   mat = np.zeros((X[0].size, X[0].size))

   # calculate mean of each column (this is a array)
   mu = np.mean(X, axis=0)

   # normalized data
   norm_X = X-mu

   # calculate covariance for each pair of columns in X
   for (i,j) in np.ndindex(mat.shape):
       mat[i, j] = np.dot(norm_X[:,i], norm_X[:,j])/len(X)

   return mat

# X is a 50*4 numpy array

# My function for covariance matrix
print(cov_matrix(X))

# Builtin np function for covariance matrix
print(np.cov(X.T))

输出:

Covariance matrix from cov_matrix():
array([[0.121764, 0.098292, 0.015816, 0.010336],
       [0.098292, 0.142276, 0.011448, 0.011208],
       [0.015816, 0.011448, 0.029504, 0.005584],
       [0.010336, 0.011208, 0.005584, 0.011264]])

Covariance matrix from np.cov():
array([[0.12424898, 0.10029796, 0.01613878, 0.01054694],
       [0.10029796, 0.14517959, 0.01168163, 0.01143673],
       [0.01613878, 0.01168163, 0.03010612, 0.00569796],
       [0.01054694, 0.01143673, 0.00569796, 0.01149388]])

1 个答案:

答案 0 :(得分:0)

我可以在结果中观察到数字精度不同。创建协方差时,每个库都以不同的精度处理数据,您需要将其设置为相同。使用不同的精度可能会导致结果的微小差异,但不会影响结果 (1-2%)