https://www.cnblogs.com/chaosimple/p/3182157.html
https://blog.csdn.net/qq_23100417/article/details/84935692
三、协方差矩阵
前面提到的猥琐和受欢迎的问题是典型的二维问题,而协方差也只能处理二维问题,那维数多了自然就需要计算多个协方差,
必须要明确一点,协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。以下的演示将使用Matlab,为了说明计算原理,不直接调用Matlab的cov函数:
首先,随机生成一个10*3维的整数矩阵作为样本集,10为样本的个数,3为样本的维数。
根据公式,计算协方差需要计算均值,前面特别强调了,协方差矩阵是计算不同维度之间的协方差,要时刻牢记这一点。样本矩阵的每行是一个样本,每列是一个维度,因此我们要按列计算均值(简单的例子:样本集合4*3(四个人*科目),一共列出四人的成绩;科目:英语,数学,物理,。那么如果要求物理好的人数学一般就会好,这样就是需要求的是列。而不是行,只要确定行或列是样本还是样本内的特征)。为了描述方便,我们先将三个维度的数据分别赋值:
图 2 将三个维度的数据分别赋值
计算dim1与dim2,dim1与dim3,dim2与dim3的协方差:
图 3 计算三个协方差
协方差矩阵的对角线上的元素就是各个维度的方差,下面我们依次计算这些方差:
图 4 计算对角线上的方差
这样,我们就得到了计算协方差矩阵所需要的所有数据,可以调用Matlab的cov函数直接得到协方差矩阵:
图 5 使用Matlab的cov函数直接计算样本的协方差矩阵
计算的结果,和之前的数据填入矩阵后的结果完全相同。
五、总结
理解协方差矩阵的关键就在于牢记它的计算是不同维度之间的协方差,而不是不同样本之间。拿到一个样本矩阵,最先要明确的就是一行是一个样本还是一个维度,心中明确整个计算过程就会顺流而下,这么一来就不会迷茫了。