协方差用于衡量两个变量的总体误差,只能处理二维的问题!描述一个变量与另一个变量之间的关系,若协方差为正,则说明是正相关,为负,则负相关,为0,则不相关,相互独立!
比如一个人的数学成绩好,那么他的物理成绩也好,数学成绩与物理成绩是正相关的关系!
比如一个人的数学成绩好,和他的英语成绩,可能是相互独立的关系,没有绝对的相关!
比如一个人不太爱说话,和他讨人喜欢,则就是负相关的关系!
协方差式子
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN0LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX90TQPdXVE1UdGdkY2Z0VlZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DN0gTOwUTNzETNwQDM1EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
协方差矩阵是由不同维度之间的协方差构成的,例如x,y,z为三个维度,则它们的协方差矩阵为
随机产生一个10*3维的整数矩阵作为样本集,10为样本的个数,3为样本的维数。先求出每一维的均值,再求相互之间的协方差,接着求自身的协方差,最后可以构成三维的协方差矩阵。
用matlab实现,cov()为协方差函数,一下是它的实现代码:
>> MySample =fix(rand(10,3)*50);
MySample =
40 7 32
45 48 1
6 47 42
45 24 46
31 40 33
4 7 37
13 21 37
27 45 19
47 39 32
48 47 8
>>dim1=MySample(:,1);
dim2=MySample(:,2);
dim3=MySample(:,3);
>>sum((dim1-mean(dim1)).*(dim2-mean(dim2)))/(size(MySample,1)-1)%
ans =
78
>> sum((dim1-mean(dim1)).*(dim3-mean(dim3)))/(size(MySample,1)-1)%
ans =
-120.2444
>> sum((dim2-mean(dim2)).*(dim3-mean(dim3)))/(size(MySample,1)-1)%
ans =
-126.9444
>> std(dim1)^2%
ans =
301.1556
>> std(dim2)^2%
ans =
268.9444
>> std(dim3)^2%
ans =
216.0111
>> Cov(MySample)
ans =
301.1556 78.0000 -120.2444
78.0000 268.9444 -126.9444
-120.2444 -126.9444 216.0111
也可以用另一种方法实现,先让样本矩阵中心化,即每一维度减去该维度的均值,然后直接用新的到的样本矩阵乘上它的转置,然后除以(N-1)即可,这种方法是通过上面原理推出来的,只用两条语句就能得出协方差矩阵
>> X = MySample-repmat(mean(MySample),5,1); %中心化样本矩阵
C = (X'*X)./(size(X,1)-1)