首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >协方差矩阵计算

协方差矩阵计算
EN

Stack Overflow用户
提问于 2010-07-22 08:38:31
回答 1查看 9.8K关注 0票数 8

输入:随机向量X=xi,i=1..n。

X=meanxi,i=1..n的均值向量

输出:协方差矩阵Sigma (n*n)。

计算:

( 1)查找所有cov(xi,xj)= 1/n * (xi-meanxi) *(xj-m i),i,j=1..n

2) Sigma(i,j)=cov(xi,xj),对称矩阵。

这个算法正确吗?没有副作用吗?

EN

回答 1

Stack Overflow用户

发布于 2010-07-22 09:23:26

每个xi应该是一个向量(随机变量),具有它自己的方差和均值。

协方差矩阵是对称的,所以您只需要计算其中的一半(并复制其余的),并且主对角线上有xi的方差。

代码语言:javascript
复制
 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

其中十一的方差(var):

代码语言:javascript
复制
v = 0;
for(int i = 0; i<xi.Count; i++)
  v += (xi(i) - mean(xi))^2;
end
v = v / xi.Count;

和协方差(cov)

代码语言:javascript
复制
cov(xi, xj) = r(xi,xj) * sqrt(var(xi)) * sqrt(var(xj))

其中r(xi, xj)皮尔逊乘积-矩相关系数

编辑

或,由于cov(X,Y) = E(X*Y) - E(X)*E(Y)

代码语言:javascript
复制
cov(xi, xj) = mean(xi.*xj) - mean(xi)*mean(xj);

其中.*是类似Matlab的元素方向乘法.

因此,如果x = [x1, x2]y = [y1, y2],那么z = x.*y = [x1*y1, x2*y2]

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3307082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档