目录
前言
一、方差
二、协方差矩阵
①协方差
②自协方差矩阵
互协方差矩阵编辑
③互协方差矩阵
Ⅰ、数学定义
Ⅱ、MATLAB运算
三、相关矩阵
①person相关系数
②自相关矩阵
③互相关矩阵
Ⅰ、数学定义
Ⅱ、matlab运算
作为数模小白,前天在学习FA算法时看到协方差直接啥也不会,在查阅多方资料后,才算是有所了解,本文介绍数学上协方差矩阵和相关矩阵的定义以及在MATLAB中的运算。
这是百度百科所给的定义
n=input('请输入矩阵的行数:');
a=rand(n,1);
b=mean(a);
s1=0;
for i=1:n
s1=s1+(a(i)-b)^2;
end
s1=s1/(n-1)%方差
s=s1^0.5%标准差
s2=cov(a)%方差
s3=var(a)%方差
该图来自如何直观地理解「协方差矩阵」?
a=[1,2,3,4];
a1=a-mean(a);
b=[5,6,7,8];
b1=b-mean(b);
c=a1*b1'/(size(a,1)-1);%即为a,b的协方差
该图来自如何直观地理解「协方差矩阵」?
a= [5 0 3 7; 1 -5 7 3; 4 9 8 10;1 0 9 8];
b=a-mean(a);
n=size(a);
cx=zeros(n);
for i=1:n(2)%遍历每一列
for j=1:n(2)%遍历每一列
cx(i,j)=b(:,i)'*b(:,j)/(n(1)-1);
end
end
c=cov(a);%matlab中有cov,此处用来检验运算是否正确
>> cx-c
ans =
1.0e-14 *
0 0 0.0444 0
0 -0.7105 0 0
0.0444 0 0 0
0 0 0 0.1776
该图来自(自)协方差矩阵与互协方差矩阵简介
x,y应为同型矩阵。这是根据数学定义计算出的cov(x,y)
x=rand(5,6);
[m,n]=size(x);
y=rand(5,6);
c=zeros(n);
for i=1:n
for j=1:n
c(i,j)=x(:,i)'*y(:,j)/(n-1);
end
end
>> c
c =
0.1880 0.1877 0.1157 0.1654 0.1283 0.2000
0.2199 0.2038 0.1970 0.3117 0.1446 0.3019
0.2576 0.3327 0.2605 0.2840 0.2559 0.3710
0.2513 0.2942 0.1550 0.2387 0.1472 0.2588
0.2119 0.2406 0.1538 0.2424 0.1280 0.2493
0.2305 0.2244 0.1704 0.2219 0.1873 0.2841
但在MATLAB中,cov(A,B)的含义与数学中的并不相同
①的意思是,传入的A,B都是列向量或行向量,此图来自matlab协方差cov计算代码
a=[1 2 3 0];
b=[5,6,7,9];
cab=cov(a,b);
c=zeros(2);
c(1,1)=cov(a);
c(2,2)=cov(b);
a=a-mean(a);
b=b-mean(b);
c(1,2)=a*b'/(4-1);
c(2,1)=c(1,2);
>> c
c =
1.6667 -0.8333
-0.8333 2.9167
>> cab
cab =
1.6667 -0.8333
-0.8333 2.9167
②的意思是,A,B中元素总数相等(不要求同型),cov(A,B)=cov(A(:),B(:));
x=rand(2,3);
y=rand(3,2);
c1=cov(x,y)%按照数学公式应返回3×3协方差矩阵,但在matlab中会返回2×2矩阵
c2=cov(x(:),y(:))
c1 =
0.0571 -0.0009
-0.0009 0.0440
c2 =
0.0571 -0.0009
-0.0009 0.0440
这是百度百科所给的定义:
绝对值越接近1,线性相关性越强
x=rand(5,1);
y=rand(5,1);
r1=(x-mean(x))'*(y-mean(y))/(5-1)/(var(x)*var(y))^0.5
r2=corr(x,y)%返回两个等长矩阵的相关系数
r1 =
0.3655
r2 =
0.3655
相关矩阵也叫相关系数矩阵,是由矩阵各列间的相关系数构成的。也就是说,自相关矩阵第i行第j列的元素是原矩阵第i列和第j列的相关系数
a=rand(3,4);
[m,n]=size(a);
c1=zeros(n);
for i=1:n
for j=1:n
c1(i,j)=corr(a(:,i),a(:,j));
%c1(i,j)是原矩阵i列j列的相关系数
end
end
c1
c2=corrcoef(a)%返回a1的自相关矩阵
c1 =%对角元都为1
1.0000 0.6911 -0.0058 -0.9390
0.6911 1.0000 0.7187 -0.8975
-0.0058 0.7187 1.0000 -0.3385
-0.9390 -0.8975 -0.3385 1.0000
c2 =
1.0000 0.6911 -0.0058 -0.9390
0.6911 1.0000 0.7187 -0.8975
-0.0058 0.7187 1.0000 -0.3385
-0.9390 -0.8975 -0.3385 1.0000
对同型矩阵x,y(m×n)。R(x,y)表示x,y的互相关矩阵(n×n),rij=r(xi,yj),即x第i列与y第j列的相关系数
a=rand(3,4);
b=rand(size(a));
[m,n]=size(a);
r1=zeros(n);
for i =1:n
for j=1:n
r1(i,j)=corr(a(:,i),b(:,j));
end
end
和上面说讲的MATLAB运算互协方差矩阵相似,corrcoef(a,b)=corrcoef(a(:),b(:))
a=rand(3,4);
b=rand(size(a));
r=corr(a(:),b(:))
r2=corrcoef(a,b)
r3=corrcoef(a(:),b(:))
r =
-0.1293
r2 =%(1,2),(2,1)是a(:),b(:)的相关系数
1.0000 -0.1293
-0.1293 1.0000
r3 =
1.0000 -0.1293
-0.1293 1.0000