为什么 EmpiricalCovariance 不输出具有恒定对角线的矩阵?

Why doesn't EmpiricalCovariance output a matrix with a constant diagonal?

当使用EmpiricalCovariance开发高维数据的协方差矩阵时,我希望这个矩阵的对角线(从左上角到右下角)全部为1,截至当然,变量总是会与自身完美相关。然而,这种情况并非如此。为什么不呢?

这是一个示例,使用 seaborns 热图绘制:

正如你所看到的,对角线比大部分数据都亮,但它没有最亮的点亮。

如果您查看它调用的 implementation of EmpiricalCovariance class and utility function,您会发现 np.cov(data, bias=1)EmpiricalCovariance.fit(...).covariance_(几乎)相同。

让我们做一些实验:

from sklearn.covariance import EmpiricalCovariance
import numpy as np

np.random.seed(10)
data = np.random.rand(10, 10)
np.allclose(EmpiricalCovariance().fit(data).covariance_, np.cov(data.T, bias=1))
# returns True !

numpy's official docs可以看出协方差矩阵的对角线元素是行方差:

np.isclose(np.var(data[0]), np.cov(data, bias=1)[0][0])
# returns TRUE

查看此相关主题

总而言之:您在对角线上看到的是方差,而不是相关性