python - Numpy 协方差

标签 python numpy covariance

当对 numpy 矩阵应用零均值时,以下 2 个代码之间是否存在预期差异?我正在学习 andrew ng 的 ML 类(class),他建议使用 X @ X^T 来查找协方差矩阵(考虑到应用零均值)。当我尝试目视检查矩阵时,发现它使用 np.cov 函数给出 diff 结果。请帮助..

import numpy as np

X=np.random.randint(0,9,(3,3))
print(X)

[[2 1 5]

 [7 4 8]

 [4 7 6]]

X = (X - X.mean(axis=0)) # <- Zero Mean
print(X)

[[-2.33333333 -3.         -1.33333333]

 [ 2.66666667  0.          1.66666667]

 [-0.33333333  3.         -0.33333333]]

cov1 = (X @ X.T)/m # <- Find covariance manually as suggested in the course

print(cov1)

[[ 5.40740741 -2.81481481 -2.59259259]

 [-2.81481481  3.2962963  -0.48148148]

 [-2.59259259 -0.48148148  3.07407407]]

cov2 = np.cov(X,bias=True) # <- Find covariance with np.cov

print(cov2)

[[ 0.7037037   0.59259259 -1.2962963 ]

 [ 0.59259259  1.81481481 -2.40740741]

 [-1.2962963  -2.40740741  3.7037037 ]]

最佳答案

如果您的观察结果位于行中且变量位于列中(将 rowvar 设置为 False),那么它必须是 x.T @ x:

import numpy as np

x0 = np.array([[2, 1, 5], [7, 4, 8], [4, 7, 6]])
x = x0 - x0.mean(axis=0)

cov1 = x.T @ x / 3
cov2 = np.cov(x, rowvar=False, bias=True)

assert np.allclose(cov1, cov2)

x @ x.T 适用于观察值位于列中且变量位于行中的情况:

x = x0 - x0.mean(axis=1)[:,None]

cov1 = x @ x.T / 3
cov2 = np.cov(x, bias=True) # rowvar=True by default

assert np.allclose(cov1, cov2)

关于python - Numpy 协方差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63281162/

相关文章:

python - matplotlib 颜色 rgb_to_hsv 不能正常工作。也许需要报告?

python - 尝试使用 Vispy 在 3d 中旋转四边形

python - 有没有办法在python中计算方程不等式?

python - 不随 GUI 更新的动态 GUI 的 Tkinter 动态滚动条

python - 如何在 python 中创建等效结构并使用 malloc 更改空指针的引用

python - 如何通过 :Django 中的 URL 传递带空格的变量

python - numpy.polyfit 没有关键字 'cov'

swift - 协议(protocol)方法中的返回类型协变

python - 计算两个 channel 中复杂数据的协方差矩阵(无复杂数据类型)

python - 此行在此 python 脚本中如何工作