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

时间:2019-04-26 18:45:31

标签: python scikit-learn covariance

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

这里是一个示例,并绘制了seaborns热图: Covariance matrix plotted as a heatmap. The diagonal from the top-left to the top-right is lighter than most of the rest of the data, but not the lightest points.

如您所见,对角线比大多数数据要亮,但是不如最亮的点亮。

2 个答案:

答案 0 :(得分:0)

如果查看它调用的EmpiricalCovariance类和实用程序implementationfunction,您会发现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

答案 1 :(得分:0)

请参阅此相关主题from another SO post

总结:对角线中看到的是方差,而不是相关性