numpy.cov()计算协方差矩阵

协方差矩阵定义

矩阵中的数据按行排列与按列排列求出的协方差矩阵是不同的,这里默认数据是按行排列的,即每一行是一个sample,那么每一列就是一个随机变量,
X_{m \times n} = \left[ \begin{matrix} x_{_{11} } & x_{_{12} } & \dots & x_{_{1n} } \\ x_{_{21} } & x_{_{22} } & \dots & x_{_{2n} } \\ \vdots & \vdots & \ddots & \vdots \\ x_{_{m1} } & x_{_{m2} } & \dots & x_{_{mn} } \\ \end{matrix} \right] = \left[ \begin{matrix} c_{_{1} } & c_{_{2} } & \dots & c_{_{n} }\end{matrix} \right]
协方差矩阵:
covMatrix = \frac{1}{m-1} \left[ \begin{matrix} cov(c_{_{1} }, c_{_{1} }) & cov(c_{_{1} }, c_{_{2} }) & \dots & cov(c_{_{1} }, c_{_{n} }) \\ cov(c_{_{2} }, c_{_{1} }) & cov(c_{_{2} }, c_{_{2} }) & \dots & cov(c_{_{2} }, c_{_{n} }) \\ \vdots & \vdots & \ddots & \vdots \\ cov(c_{_{n} }, c_{_{1} }) & cov(c_{_{n} }, c_{_{2} }) & \dots & cov(c_{_{n} }, c_{_{n} }) \end{matrix} \right]
numpy.cov()计算协方差矩阵为按列计算,举个例子,
X = \left[ \begin{matrix} 0 & 2 \\ 1 & 1 \\ 2 & 0 \end{matrix} \right]
则每个维度的平均值为
\overline{c} = \left[\begin{matrix}1 & 1 & 1 \end{matrix}\right]^\top = \left[\begin{matrix}\overline{c}_{_{1} } & \overline{c}_{_{2} } & \overline{c}_{_{3} } \end{matrix}\right]^\top
X的每一列减去平均值
X = \left[ \begin{matrix} -1 & 1 \\ 0 & 0 \\ 1 & -1 \end{matrix} \right]
其中:
c_i = c_i - \overline{c}_i
计算协方差矩阵
cov = \frac{1}{m-1}X^\top X = \frac{1}{3-1} \left[\begin{matrix} 2 & -2 \\ -2 & 2 \end{matrix} \right] = \left[\begin{matrix} 1 & -1 \\ -1 & 1 \end{matrix} \right]

>>> x = np.array([[0, 2], [1, 1], [2, 0]]).T
>>> x
array([[0, 1, 2],
       [2, 1, 0]])
>>> np.cov(x)
array([[ 1., -1.],
       [-1.,  1.]])

参考

  1. 协方差矩阵的计算及意义
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容