java 计算协方差矩阵,Matlab协方差矩阵的计算原理

a=[-1,1,2;-2,3,1;4,0,9]

for i=1:size(a,2)

for j=1:size(a,2)

c(i,j)=sum((a(:,i)-mean(a(:,i))).*(a(:,j)-mean(a(:,j))))/(size(a,1)-1);

end

end

c =

10.3333   -4.1667    3.0000

-4.1667    2.3333   -1.5000

3.0000   -1.5000    1.0000

69c5a8ac3fa60e0848d784a6dd461da6.png

c为求得的协方差矩阵,在matlab以矩阵a的每一列为变量,对应的每一行为样本。这样在矩阵a中就有3个列变量分别为a(:,1), a(:,2), a(:,3)。

在协方差矩阵c中,每一个元素c(i,j)为对第i列与第j列的协方差,例如c(1,2) = -4.1667为第一列与第二列的协方差。

拿c(1,2)的求解过程来说

c(1,2)=sum((a(:,1)-mean(a(:,1))).*(a(:,2)-mean(a(:,2))))/(size(a,1)-1);

1. a(:,1)-mean(a(:,1)),第一列的元素减去该列的均值得到

-1.3333

-2.3333

3.6667

2,  a(:,2)-mean(a(:,2)),第二列的元素减去该列的均值得到

-0.3333

1.6667

-1.3333

3, 再将第一步与第二部的结果相乘

-1.3333        -0.3333           0.4444

-2.3333  .*     1.6667  =     -3.8889

3.6667         -1.3333          -4.8889

4, 再将结果求和/size(a,1)-1 得 -4.1667,该值即为c(1,2)的值。

再细看一下是不是与协方差公式:Cov(X,Y) = E{ [ (X-E(X) ] [ (Y-E(Y) ] }过程基本一致呢,只是在第4步的时候matlab做了稍微的调整,自由度为n-1,减少了一行的样本值个数。

>> a=[-1,1,2;-2,3,1;4,0,9]

a =

-1     1     2

-2     3     1

4     0     9

>> cov(a)

ans =

10.3333   -4.1667   14.0000

-4.1667    2.3333   -5.5000

14.0000   -5.5000   19.0000

>> dim1=a(:,1)

dim1 =

-1

-2

4

>> dim2=a(:,2)

dim2 =

1

3

0

>> dim3=a(:,3)

dim3 =

2

1

9

>> dim1-mean(dim1)

ans =

-1.3333

-2.3333

3.6667

>> dim2-mean(dim2)

ans =

-0.3333

1.6667

-1.3333

>> m=dim1-mean(dim1)

m =

-1.3333

-2.3333

3.6667

>> m=dim2-mean(dim2)

m =

-0.3333

1.6667

-1.3333

>> m=dim1-mean(dim1)

m =

-1.3333

-2.3333

3.6667

>> n=dim2-mean(dim2)

n =

-0.3333

1.6667

-1.3333

>> m.*n

ans =

0.4444

-3.8889

-4.8889

>> size(a,1)

ans =

3

>> sum(m.*n)

ans =

-8.3333

>> ans/2

ans =

-4.1667

大盘预测

国富论

posted on 2015-08-26 19:06 华梦行 阅读(175) 评论(0)  编辑  收藏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值