協方差矩陣與PCA+Matlab
協方差矩陣與特徵值及其特徵向量
最近在利用協方差矩陣計算些東西,對結果有點混亂,所以打算整理一下這方面的東西。
一 協方差矩陣
首先,關於協方差矩陣的公式都見得到這裡就不擺了。
理解協方差矩陣是:
- 協方差矩陣相對於協方差是能處理多維問題
- 輸入協方差矩陣中的資料:行表示樣本,列表示維度
- 協方差矩陣是一個對稱矩陣,無論輸入的資料mxn中樣本數m多大,最終得到的都是nxn的方陣
- 協方差矩陣度量的是維度與維度之間的關係,所以協方差計算的是不同維度之間的協方差
- 協方差矩陣計算時是按列進行計算均值的;協方差矩陣對角線上的元素是各個維度的方差,其他元素是兩兩維度間的協方差(相關性)
- - - - - - - - - - - - - - - - - - - - - - -- - - -- - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
二 協方差矩陣與PCA
主成分分析(Principal Component Analysis,簡稱PCA),簡單來說就是一個通用的降維工具。
PCA是找出最能夠代表原始資料的投影方法,即降維後的資料不能失真,降掉的那些噪聲或是冗餘的維度資料,把高維的資料通過線性變換投影到低維空間上去。
而PCA實現的關鍵就是通過協方差矩陣。參考前面描述的協方差矩陣,要降掉的是相關性很小的(噪聲)維度,協方差矩陣提供了這一資料,即把協方差矩陣非對角線上的元素趨近於零,通過矩陣對角化實現。
對角化後得到的矩陣,其對角線上是協方差矩陣的特徵值:各個維度新方差;對角化後剩餘維度之間的相關性已經減弱,完成去噪。
去除冗餘,對於得到的對角化後的新方差矩陣只取那些含有較大方差(特徵值)的維度,其餘的舍掉即可。
所以,PCA的本質其實就是對角化協方差矩陣。
結合協方差矩陣進行主成分分析大致流程:
- 得到樣本矩陣
- 計算樣本矩陣的協方差矩陣
- 對協方差矩陣進行特徵值分解,選取p個特徵值對應的特徵向量組成投影矩陣
- 對原始樣本矩陣進行投影,得到降維後的新樣本矩陣
- - - - - - - - - - - - - - - - - - - - - - -- - - -- - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
三 MATLAB實現
(假設原始樣本矩陣是mxn,隨機產生m = 20,n = 3)
計算協方差矩陣:
or
對協方差矩陣進行特徵值分解:
注:這裡的維度為三維,所以全保留。且eig()函式得到的結果是升序排列的
D 是PCA後的樣本協方差矩陣(特徵向量)
V是降噪後的協方差矩陣的方差(特徵值),又稱為投影矩陣
PCA降維後的新樣本矩陣:
- - - - - - - - - - - - - - - - - - - - - - -- - - -- - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
注:MATLAB自帶了主成分分析函式princomp()
coeff 表示投影矩陣
score 表示投影后的新樣本矩陣
但,score得到的結果和S1的維度排序不一致,是因為此時計算的投影矩陣是降序排列的,與V相反。
)
間斷性更新、完善吧。
分享,多擔待。望有幫助