【问题标题】:Why is my calculation of covariance not precise为什么我的协方差计算不精确
【发布时间】:2019-05-03 23:38:58
【问题描述】:

我正在尝试编写一个计算协方差矩阵的函数。我得到的答案与内置的 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]])

【问题讨论】:

  • 提示:您是在计算总体协方差还是样本协方差?哪个是numpy计算?
  • @DSM 是的,这就是答案。我不敢相信我错过了这个。 Numpy 正在计算样本协方差,而我正在计算总体协方差。非常感谢。如果您希望我接受这个作为答案,请将其发布为答案。
  • 对于无偏估计器,必须除以 (len(X)-1),我猜这就是 np.cov 所做的。因为对于 50 个似乎很匹配的术语,差异约为 2%。

标签: python numpy floating-point


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 2020-10-24
    相关资源
    最近更新 更多