# Why I get two different covariance matrix?

조회 수: 6(최근 30일)
ali yaman 2022년 7월 14일
댓글: ali yaman 2022년 7월 14일
Hi all,
Prof. Andrew Ng in his ML class says that we can calculate covariance matrix as: 1/m*X'*X .
Where;
examples are in rows of X,
X' is transpose of X,
and, m is number of examples.
For example:
X=randi(12,[6,2]);
cov1=1/size(X,1)*X'*X
cov1 = 2×2
92.5000 42.0000 42.0000 21.8333
And, covariance with cov function is:
cov2=cov(X)
cov2 = 2×2
2.7000 -0.9000 -0.9000 1.9000
As you can see, cov1 is different from cov2 !!!
What is the reasan for that? Do you have any idea?
Thanks

댓글을 달려면 로그인하십시오.

### 채택된 답변

Paul 2022년 7월 14일
Hi Ali,
Perhaps Prof. Ng has some additional assumptions about the data that aren't included in your question. To compute the covariance we have to subtract off the mean. As for whether or not the outer product should be scaled by 1/m or 1/(m-1) depends on assumptions about the underlying data. IIRC, if we know the data is drawn from a Normal distribution then divide by m (perhaps also for other distributions as well?), but typically we don't assume that and so divide by m-1 for unbiased estimation. As can be seen below, cov subtracts the mean and divides by m-1.
rng(100);
X=randi(12,[6,2])
X = 6×2
7 9 4 10 6 2 11 7 1 11 2 3
cov1=1/(size(X,1)-1)*(X-mean(X))'*(X - mean(X))
cov1 = 2×2
13.3667 -1.6000 -1.6000 14.0000
cov(X)
ans = 2×2
13.3667 -1.6000 -1.6000 14.0000
As for the second question
sigma=[6 2;2 3]; % cov matrix
[a1,v] = eig(sigma)
a1 = 2×2
0.4472 -0.8944 -0.8944 -0.4472
v = 2×2
2.0000 0 0 7.0000
[a2,s,~] = svd(sigma)
a2 = 2×2
-0.8944 -0.4472 -0.4472 0.8944
s = 2×2
7 0 0 2
we see that eig and svd just have a different order for the results.
##### 댓글 수: 3표시숨기기 이전 댓글 수: 2
ali yaman 2022년 7월 14일
@Paul Ok, Thanks Bro.

댓글을 달려면 로그인하십시오.

### 추가 답변(1개)

ali yaman 2022년 7월 14일
Just like covarince matrixe we can get two different eigenvectors.
For example;
sigma=[6 2;2 3]; % cov matrix
[a,~]=eig(sigma)
a = 2×2
0.4472 -0.8944 -0.8944 -0.4472
And, lets calculate eigenvectors with svd, singular value decomposition function:
[a,~,~]=svd(sigma)
a = 2×2
-0.8944 -0.4472 -0.4472 0.8944
As you can see we are getting two different eigenvectors value.
What is the reason?
##### 댓글 수: 4표시숨기기 이전 댓글 수: 3
ali yaman 2022년 7월 14일
OK. that would be nice. thanks

댓글을 달려면 로그인하십시오.

### 범주

Find more on Random Number Generation in Help Center and File Exchange

R2020a

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!