协方差矩阵计算 [英] Covariance matrix computation

查看:262
本文介绍了协方差矩阵计算的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

输入:随机向量X =喜,I = 1..N
。 手段对于x向量= meanxi,I = 1..N
输出:协方差矩阵西格玛(N * N)
。 计算:
1)找到所有的COV(XI,XJ)= 1 / N *(XI-meanxi)*(XJ-meanxj),I,J = 1 ... N
2)西格玛(I,J)= COV(XI,XJ),对称矩阵。
这是算法正确的,有没有副作用?

Input : random vector X=xi, i=1..n.
vector of means for X=meanxi, i=1..n
Output : covariance matrix Sigma (n*n).
Computation :
1) find all cov(xi,xj)= 1/n * (xi-meanxi) * (xj-meanxj), i,j=1..n
2) Sigma(i,j)=cov(xi,xj), symmetric matrix.
Is this algorithm correct and has no side-effects?

推荐答案

每个应该是与它本身的变化和平均向量(随机变量)。

Each xi should be a vector (random variable) with it's own variance and mean.

协方差矩阵是对称的,所以你只需要计算一半的它(和复制的其余部分),并具有喜的主对角线上的差异。

Covariance matrix is symmetric, so you just need to compute one half of it (and copy the rest) and has variance of xi at main diagonal.

 S = ...// your symmetric matrix n*n
 for(int i=0; i<n;i++)
   S(i,i) = var(xi);
   for(j = i+1; j<n; j++)
     S(i,j) = cov(xi, xj);
     S(j,i) = S(i,j);
   end
 end

其中,xi的方差(VAR):

where variance (var) of xi:

v = 0;
for(int i = 0; i<xi.Count; i++)
  v += (xi(i) - mean(xi))^2;
end
v = v / xi.Count;

和协方差(COV)

cov(xi, xj) = r(xi,xj) * sqrt(var(xi)) * sqrt(var(xj))

其中, R(喜,XJ)是的皮尔逊积差相关系数

修改
或者,因为COV(X,Y)= E(X * Y) - E(X)* E(Y)

EDIT
or, since cov(X, Y) = E(X*Y) - E(X)*E(Y)

cov(xi, xj) = mean(xi.*xj) - mean(xi)*mean(xj);

其中,。* Matlab的是类逐元素相乘。
因此,如果 X = [X1,X2] Y = [Y1,Y2] 然后 Z = X * Y = [X1 * Y1,X2 * Y2] ;

where .* is Matlab-like element-wise multiplication.
So if x = [x1, x2], y = [y1, y2] then z = x.*y = [x1*y1, x2*y2];

这篇关于协方差矩阵计算的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆