Re: [問題]PCA與SVD差異

看板MATLAB作者 (Bishop)時間13年前 (2012/10/07 21:26), 編輯推噓1(104)
留言5則, 2人參與, 最新討論串3/3 (看更多)
※ 引述《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
以princomp去解特徵向量就是用svd了,用 edit princomp 看
10/07 21:27, 1F

10/09 14:05, , 2F
另外就是解釋變異的總合應與變數總數相同
10/09 14:05, 2F

10/09 14:06, , 3F
所以實際的EV1和EV2要乘以總變數量5才是正確的值
10/09 14:06, 3F

10/09 14:06, , 4F
(變數數量:5,觀測次數:10)
10/09 14:06, 4F

10/09 15:45, , 5F
非常的棒,感謝ht15trep大!
10/09 15:45, 5F
文章代碼(AID): #1GSOBfRF (MATLAB)
討論串 (同標題文章)
文章代碼(AID): #1GSOBfRF (MATLAB)