协方差矩阵
协方差矩阵是一个nxn对称矩阵,其中n是您开始使用的矩阵的列数,并显示向量变量如何协变量,这意味着它们如何相对于彼此移动。
成分
在主对角线上,您可以找到向量的方差,在所有其他坐标上,您可以找到协方差,因为 var(X) = cov(X, X)。
正负系数
在主对角线中,没有值可以是负数,因为它们代表向量的方差。在任何其他位置,协方差可以作为两个标准偏差(始终为非负)(s (X) 和s (Y))和Pearson 相关系数 p的乘积获得,而 p 在 [-1, 1]:这是使值成为正数或负数的系数。
cov (X, Y) = p (X,Y) s (X) s (Y)
有三种可能:
- p (X, Y)==0:向量之间没有相关性。
- p (X,Y)>0:正相关,意味着当向量 X 增长时,Y 的大小也会增长。
- p (X,Y)<0:负相关,意味着当向量X增大时,Y的大小减小。
标准差对矩阵中的系数的影响是“公正的”量级,这意味着当数据点的标准差较高时,它们会突出更多的相关性。
可视化
为了更好地可视化矩阵的内容,我使用了python 包中的heatmap
函数。seaborn
我还添加了相关矩阵以更好地比较结果。
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns
x = np.array([[10,39,19,23,28],
[43,13,32,21,20],
[15,16,22,85,15]])
plt.rcParams['figure.figsize'] = [10, 5]
plt.axis('scaled')
plt.subplot(1,2,1)
sns.heatmap(np.cov(x),
annot=True,
cbar = False,
fmt="0.2f",
cmap="YlGnBu",
xticklabels=range(len(x)),
yticklabels=range(len(x)))
plt.title("Covariance matrix")
plt.subplot(1,2,2)
sns.heatmap(np.corrcoef(x),
annot=True,
cbar = False,
fmt="0.2f",
cmap="YlGnBu",
xticklabels=range(len(x)),
yticklabels=range(len(x)))
plt.title("Correlation matrix")
输出:
解释
与其他向量相比,第三个向量具有异常高的方差。所有的向量都有负相关,特别是向量1和2是强相关的。向量 1 和 3 的相关性最小。