Re: [問題]PCA與SVD差異
※ 引述《IamMRBBB (獸獸)》之銘言:
: 各位好
: 最近我使用SVD來分析我的資料的時候,
: 確認SVD與PCA的特徵向量是一樣的,
: 但是他們不同處在哪?
: 以及特性差別,或是在什麼時候才會出現不同呢?
: 不知道能否有人回答,感謝。
如果你有一個資料矩陣 X 大小為 M(num of rows)*L(num of columns)
舉例 若每一欄代表不同的變數,每一列則為各自變數不同時間的觀測
[U,S,V]=svd(X,0)
可以得到X的主成分(特徵向量)為V,第一欄為第1主成分,S(1)^2為第一主成分的特徵值
沒經過移除平均 detrend(X,'constant') 我們一樣能得到一組主成分
但是沒辦法以共變異矩陣(移除平均)或是相關係數矩陣(移除平均並除以標準差)去解釋
僅是如此
=========================================
X=abs(rand(10,5))*20;
[u1 s1 v1]=svd(X,0);
[u2 s2 v2]=svd(detrend(X,'constant'),0);
[v3 s3]=eig(cov(X));
[s3 ord]=sort(diag(s3),'descend');
s3=diag(s3);
v3=v3(:,ord);
其中v2有移除平均,所以主成分會跟v3相同,但是v1沒移除平均就跟其他兩個不同
(這裡沒有比較特徵值)
X=abs(rand(10,5))*20;
X2=detrend(X,'constant');
X2=X2*diag(std(X2).^-1);
[u1 s1 v1]=svd(X2,0);
[v2 s2]=eig(corrcoef(X));
[s2 ord]=sort(diag(s2),'descend');
s2=diag(s2);
v2=v2(:,ord);
EV1=diag(s1).^2/trace(s1)^2;
EV2= diag(s2)/trace(s2);
當移除平均又除以標準差後,其svd(.)的結果就和eig(corrcoef(.))相同
另外值得一提的就是雖然svd(.)和eig(corrcoef(.))之特徵值大小不一樣
但是以百分比來看卻是一樣
=========================================
附上一份我覺得還不錯的網路教材
http://www.smast.umassd.edu/mixing/LabInOcean/lecture_notes/
MAR-599_LabInOceanogr_wk12.ppt
縮址:http://ppt.cc/t1YH
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.218.33.43
→
10/07 21:27, , 1F
10/07 21:27, 1F
→
10/09 14:05, , 2F
10/09 14:05, 2F
→
10/09 14:06, , 3F
10/09 14:06, 3F
→
10/09 14:06, , 4F
10/09 14:06, 4F
推
10/09 15:45, , 5F
10/09 15:45, 5F
討論串 (同標題文章)