CVPR讀書筆記 7 PCA的理解

2021-08-27 19:12:48 字數 1916 閱讀 2914

cvpr讀書筆記[7]:pca的理解

朱金華 [email protected]

下文中a'=a^t表示a的轉置.

n維資料的m個樣本構成的n*m維矩陣x, 尋找n*n的變換矩陣w, 使得變換後的矩陣y=w*x=y.

簡單的說如果w=(w1,w2,...wn)'中wi為變換後空間的基, 則上述變換即將x對映為新空間中m個n維的點. 這個對映關係是一對一的

如果只取新空間中的d個基組成的變換矩陣w0=(w1,w2,...wd)', 則w0*x為新空間中d*m維的矩陣, 即m個樣本的維數變為d, 實際即是在新空間中得到降維

這裡的矩陣相乘或者說是叫project, 其意義便是將x的每乙個列向量(樣本)對映到以w0為基構成的新空間中去. 在這裡, 因為維數得到降低, 並不能保證原空間域新空間中的點是一對一的關係了

至此,大家可能會說n維空間有無陣列基的可能,, 在這些基中又如何選擇d個使得m個n維樣本在其上的投影盡量保持原有資訊? 即如何使得新空間中d行的相關度最低?

為了尋找這組最優基組成的投影矩陣p, 一種方案是使樣本在新的正交座標系中的投影點盡量分散(幾何意義), 即其投影後的方差盡量大. 這通過將原n*m矩陣x的協方差矩陣進行對角化實現(代數意義).

(另一種我們可以從最小化投影誤差考慮)

設變換為y=px, 其中x為n*m維, p為d個n維基向量, 即d*n維, y為d*m維

y的協方差矩陣d=1/myy^t=1/m*pxx'p'=p(1/m*xx')p' , 其中c=1/m*xx'為x的協方差矩陣

因此需找project matrix p的問題現在變成尋找使得原樣本矩陣x的協方差矩陣c=1/m*xx'對角化的矩陣p,

x的協方差矩陣c為實對稱矩陣, 實對稱矩陣特性如下:

[1]必有n個特徵值且其值均大於0

[2]特徵值對應的特徵向量兩兩正交

設c的特徵值為

λ 1,λ

2 , ...

λ n

, 對應特徵向量為e1,e2,...en

則pn=(e1,e2,...en)^t便是乙個完整將x對映到新空間y的投影矩陣.

任取d個特徵向量按行組成的投影pd為乙個將x對映到d維子空間的投影矩陣

為了得到樣本資訊損失最小的投影矩陣p, 只需選擇特徵值最大的d個特徵值對應的特徵向量即可, 我們將特徵值排序,不失一般性, 仍記作

λ 1,λ

2 , ...

λ n

那麼p即為(e1,e2,...ed)'

x變換後的即降維後的d維樣本集合為y=px=(e1,e2,...ed)' x

pca演算法:

[1]對於m個n維樣本集合x,按列存放組成n*m矩陣

[2]x進行零均值化, 每個元素減去該行的均值(該維的均值)

[3]c=1/m*xx'

[4]計算c的特徵值及特徵向量, 並將其按照特徵值的大小排列

[5]根據方差保持的百分比決定選取保留多少個特徵值及特徵向量,或者直接指定保留p個. 這p個特徵向量組成投影矩陣p

[6]y=px即為降維後的矩陣

推廣:有時我們用行向量來表示特徵, 則上面的x為m*n維, m為樣本數, n為特徵數. 這樣我們實際找的便是變換矩陣p(n行p列)使得y=xp

道理是一樣的.

對於維數n>樣本數m的情形, 對於n*m的x來說c=1/m*xx'為n*n維實對稱矩陣

設a為1/m*x'x的特徵值, 即1/mx'xe=ae,

則1/mxx'xe=axe=cxe

即a也是c=1/mx'x的特徵值, 對應的特徵向量為xe

於是我們可以通過計算1/mx'x這個較小的m*m矩陣的特徵值a,與特徵向量e,得到c的特徵值a以及其對應特徵向量xe

參考文獻:

[1]"atutorial onprincipalcomponentsanalysis", lindsayismith,

[2]...很多很多...

PCA讀書筆記

pca是一種對高維度資料進行降維的一種方法,為了能夠了解pca的具體過程,一些數學知識,比如 期望,標準差,方差,協方差,特徵值,特徵向量等都是必須了解的。不過不要怕,我這裡先乙個乙個來介紹下這些概念。pca是一種常用的統計方法,什麼是統計分析的過程?就是用樣本資料的特徵去代表整體資料特徵,而統計就...

讀書筆記(7)

7.工程中的linux裝置驅動 platform裝置驅動 platform匯流排,會匹配相應的裝置和驅動。現實的裝置中都需要掛接一種匯流排,對於本身依附於pci,usb,i2c,spi裝置而言,這不會是問題,但是,如果不依賴於此類匯流排,linux發明了platform匯流排,相應的裝置叫platf...

Effective STL 讀書筆記 7

item 35 使用 mi atch 或者 lexicographical compare 實現簡單的忽略大小寫的字串比較函式。int ci compare const string s1,const string s2 int ci compare impl const string s1,con...