赞
踩
目录
作为数模小白,前天在学习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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。