为什么 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
查看此相关主题
总而言之:您在对角线上看到的是方差,而不是相关性
当使用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
查看此相关主题
总而言之:您在对角线上看到的是方差,而不是相关性