Matlab中cov函数详细解读


Matlab中cov函数详细解读
1、向量的方差与协方差矩阵cov(x)求向量x的方差。cov(x)为一个数值,数值大小计算公式为S(x)。cov(x,y)求向量x与y的协方差矩阵。cov(x,y)为2*2矩阵,[S(x) C(x,y);C(y,x) S(y);]2、矩阵协方差矩阵cov(X)求矩阵X的协方差矩阵。diag(cov(X))得到每一个列向量的方差。sqrt(diag(cov(X)))得到每一个列的标准差。若X大小为M*N,则cov(X) 大小为N*N的矩阵。cov(X) 的第(i,j)个元素等于X的第i列向量与第j列向量的方差,即C(Xi,Xj)。cov(X,Y)求矩阵X与Y的协方差矩阵。若X大小为M*N,Y为K*P,则X,Y的大小必须满足M*N=K*P,即X,Y的元素个数相同。此时,cov(X,Y) 等于cov([X(:) Y(:)])和cov(X(:),Y(:)),即计算两个向量的协方差矩阵,得到的结果为2*2矩阵。[S(X(:)) C(X(:),Y(:));C(Y(:),X(:)) S(Y(:));]可知,S(X) =C(X,X).3、关于归一化的问题在上述的S(X),C(X,Y)计算中,采用的归一化参数是1/(N-1) ,其中N是向量中元素的个数。而下面的调用形式采用的归一化参数是1/N。对应的公式如下图所示。cov(x,1)求向量x的方差。计算方法如cov(x),但归一化参数为1/N。cov(x,y,1)求向量x与y的协方差矩阵。计算方法如cov(x,y),但归一化参数为1/N。4、PS:为区别对待,cov(x)又记作cov(x,0)cov(x,y)又记作cov(x,y,0)cov(X) 又记作cov(X,0)cov(X,Y) 又记作cov(x,y,0)对于归一化参数为1/(N-1)的情况,当N=1时,自动将参数调整为1/N。转载于:https://www.cnblogs.com/tjuscslirui/p/4520614.html
协方差:引入协方差的公式
说明:这里有n个样本,计算时以n-1代替n是以较小的样本集逼近总体的标准差,即统计上的“无偏估计”,matlab中方差、标准差、协方差计算都是默认n-1,后面会有验证。
仿照方差的定义可以给出协方差的公式:
据公式很容易得出有cov(X,X)=var(X)、cov(X,Y)=cov(Y,X)
注意:计算样本矩阵的协方差矩阵时牢记是计算不同维度间的协方差,如样本矩阵A(m行n列)即每行表示一个样本,每列表示一个维度,A的协方差矩阵为n*n。
下面给出matlab中的几个例子:
1、计算矩阵A(m*n)的协方差,结果为(n*n)
2、计算俩个向量的协方差
A = [3 6 4];
B = [7 12 -9];
D=cov(A,B)=[2.3333 6.8333;6.8333 120.3333]具体到每一项的结果,我们有D(1,1)=var(A),D(2,2)=var(B),D(1,2)=D(2,1),按公式计算如下:
3、俩个矩阵间计算,有有等式cov(A,B)=cov([A(:)B(:)])=cov(A(:),B(:))
4、在上述的std(X),cov(X,Y)计算中,采用的归一化参数是1/(N-1) ,其中N是向量中元素的个数。而下面的调用形式采用的归一化参数是1/N,并验证C(1,2)
补充:一个三维矩阵,它的协方差矩阵形式如下:
参考:http://www.cnblogs.com/chaosimple/p/3182157.html
一、协方差矩阵的定义及其计算公式
协方差矩阵在机器学习中经常用到,查看wiki:http://zh.wikipedia.org/wiki/%E5%8D%8F%E6%96%B9%E5%B7%AE%E7%9F%A9%E9%98%B5 可知协方差矩阵的具体计算公式如下:
在统计学与概率论中,协方差矩阵是一个矩阵,其每个元素是各个向量元素之间的协方差。这是从标量随机变量到高维度随机向量的自然推广。
假设
是以
个标量随机变量组成的列向量,
并且
是其第i个元素的期望值,即,
。协方差矩阵被定义的第i,j项是如下:
即:
矩阵中的第
个元素是
与
的协方差。这个概念是对于标量随机变量方差的一般化推广。
二、理解的关键
1、理解的关键是两个随机变量x1,x2的协方差如何计算,有cov(x1,x2) = E{[(x1-E(x1)][x2-E(x2)]},对于离散的随机变量x1,x2,协方差矩阵描述的x1,x2相互联系的偏差,所以两个随机变量是一一对应的,即假设有m个样本值,则分别为(x11,x21),(x12,x22),(x13,x23),...(x1m,x2m),这便可以写成一个2*m的矩阵的形式。则x1,x2协方差表示的是两个随机变量对应的样本值分别都减去各自均值后的乘积的均值(因为无偏性估计的缘故,除以的不是m而是m-1);
2、所以对于一个n*m的样本矩阵,得出的协方差矩阵C是n*n的矩阵,协方差矩阵每个元素Cij表示的随机变量xi,xj的协方差。所以协方差矩阵是一个对称矩阵,且对角线上元素为每个随机变量的方差(如果是信号的话可以看成是能量);如果各个变量相关性很小的话,互相的协方差接近0,即协方差矩阵基本上为对角阵;
3、可以证明,协方差矩阵是非负定矩阵,这可以有非负定矩阵的定义得到;(参考北京大学出版社《多元统计分析》)
4、同样地,为了表示各个随机变量相关性到底有多大,可以引入相关性矩阵。
三、matlab计算公式:
matlab中有一个计算协方差矩阵的函数cov,从其help中可知,该函数的输入为一个m*n的矩阵X,其定义和wiki上的定义相反,每一行表示一个随机向量,即有n个随机变量。如果将一个随机向量看成一个模式的特征向量的话,那么该矩阵表示该模式的一个特征向量用n个特征表示,共有m个特征向量,即有m个样本。
根据matlab中的help文档的cov函数介绍写一个类似的函数:
1 function cov = covariance(X) 2 % 由随机变量样本矩阵计算协方差矩阵 3 %---- 输入: 4 % X: M*N的样本矩阵,其中一行表示一个随机向量样本 5 % 共有M个随机样本 6 %---- 输出: 7 % cov: N*N的协方差矩阵,表示各个随机变量的协方差 8 %---- 计算方法 9 % 随机变量均值用样本均值统计量估计:X_mean = 1/N*ΣXi; 10 % 随机变量方差用样本方差统计量估计:S = 1/(N-1)*Σ(Xi-X_mean)^2 11 % 随机变量协方差可以用如下统计量估计:C = 1/(N-1)*Σ(Xi-X_mean)(Yi-Y_mean) 12 13 % 各个样本减去其平均值 14 % X = bsxfun(@minus,X,mean(X)); 15 %或者: 16 %X = X-repmat(mean(X),size(X,1),1); 17 cov = 1/(size(X,1)-1)*X'*X;
转载于:https://www.cnblogs.com/lyfruit/archive/2012/12/23/2830298.html
z=[1,5;3,4;4,6;5,3];
%%
%matlab函数结果
% b=cov(z)
%
% 2.9167 -0.8333
% -0.8333 1.6667
%%
z_mean=mean(z);
result = zeros(2,2);
for i = 1:2
for j=1:2
result(i,j)=(z(:,i)-z_mean(i))'*(z(:,j)-z_mean(j));
%result(i,j)=sum((z(:,i)-z_mean(i))'*(z(:,j)-z_mean(j)))/(size(z,1)-1);%用这个公式得到与matlab相同的结果
end
end
%自编函数结果
% 8.7500 -2.5000
% -2.5000 5.0000