PCA線性代數講解
本章對最近學習的線性代數知識進行總結,最後以PCA為例運用線代中的相關知識討論其中的原理。才疏學淺,各位有什麼意見可以討論,一起查缺補漏。
1. 線代基礎
對於深度學習,它需要一定的數學和機器學習基礎,特別的,線性代數、概率與資訊理論和數值計算尤為重要(參見《deep learning》一書)
所以我們本章主要對線代進行討論,當然主要是為了針對PCA包含的知識點。
線代主要圍繞線性變換展開,其中變換指的是一種函數關係:輸入輸出都為向量的一種函數,但是既然取名為變換,意為強調一種運動關係;線性表示變換的約束:一為原點不能變,二為保持網格線平行且均勻分布。
而描述線性變換也很簡單,通常一組線性無關向量即可,稱為基。基可以理解為構建向量世界的基礎,任何向量都可以利用它線性組合而成。
我們利用最多的就是i帽和j帽(即正交基(1,0),(0,1)註:一般描述為列向量,為了方便,本章的向量都為列向量)
如下圖所示,α=(3,2)向量其實具體應該描述為α=3i+2j
既然如此,假如我們不再使用常規的i帽和j帽最為基,例如小明同學非要換一組其他的(例如將i,j旋轉90°,其實這就是一種線性變換)基,那麼在他看來,原來的α該怎麼描述呢?
可能有人會問,α並未變化,產生差別的原因是?在這裡,我們的視角和小明的視角並不一樣,更進一步說,是因為我們和小明選取的坐標(參考)系不一樣。我們看到的α是在xy坐標系下3倍i帽與2倍j帽的線性組合,而小明看到的是旋轉後的坐標系,這時我們需要利用小明選取的基來描述α。
具體說來,可以有兩種方法求解「小明眼中α的坐標」:
- 將α投影到新基上,得出投影長度(有方向,即可正負)即為坐標;
- 通過坐標變換公式求得
先說方法一,先說明一下投影的含義,一方面,從幾何意義上,如下圖所示,即將向量向另一向量所在直線做垂線,則投影長度即為藍色向量與垂線交點的向量長度;另一方面,內積與投影關係密切,有A·B=|A|cos(a)|B|,這裡設A為投影向量,則B為被投影向量,則|A|cos(a)為投影矢量長度,|B|為被投影向量的模。再進一步,如果我們假設B的模為1,即讓|B|=1,那麼就變成了:A·B=|A|cos(a)
簡而言之,如果設向量B的模為1,則A與B的內積值等於A向B所在直線投影的矢量長度!
繼續說下面這幅圖,圖中基由(1,0),(0,1)轉換為(1/√2,1/√2),(-1/√2,1/√2) 註:這裡基的坐標都是以我們視角的坐標系來看的
那麼,新基坐標系下,α的坐標計算為:
一般說來,如果我們有M個N維向量,想將其變換為由R個N維向量表示的新空間中,那麼首先將R個基按行組成矩陣A(上例中我們把基(1/√2,1/√2),(-1/√2,1/√2)按行排列),然後將向量按列組成矩陣B,那麼兩矩陣的乘積AB就是變換結果,其中AB的第m列為A中第m列變換後的結果。
簡單表達:B`X=Y ①(等式左邊,前者為B 的轉置,後者為轉換前坐標,二者均為同一坐標系下;Y為轉換後的坐標,即為小明眼中新基下的坐標)
最後,上述分析同時給矩陣相乘找到了一種物理解釋:兩個矩陣相乘的意義是將右邊矩陣中的每一列列向量變換到左邊矩陣中每一行行向量為基所表示的空間中去。
接下里說說方法二,在介紹坐標變換之前,先說明一下基變換。如同方法一所說的,由舊基到新基,其實經歷了一個變換,這個變換的橋樑我們稱之為過渡矩陣。數學表達為:B=AP,B為新基組成的集合(矩陣),A為舊基組成的集合,P為過渡矩陣。
則有,P逆 X=Y ②(特殊的,如果A為標準單位正交基,即(1,0),(0,1)列向量組成的單位矩陣E,則此時B=P,所以P逆 = B逆,②式變為B逆 X=Y ,另外因為B為正交基,B`=B逆,所以②式還可以變為B轉置 X=Y 或者P轉置 X=Y )
綜上,總結一下,我們主要講了基變換下的坐標變換,涉及投影、內積等知識,最重要的X與Y之間的轉換:B`X=Y ①P逆 X=Y ②
這些都是接下來我們討論PCA的基礎,試想一下,投影的幾何示意是不是有種降維的味道在裡面?具體而言,假設我們有多個二維數據,我們將其降為一維,可能的做法是將這些點投影到某一軸上。接下來的問題就是,如何選擇這個軸,我們採用概率和特徵值等知識來解釋選擇的合理性。
2.PCA我們這裡首先說明我們的目標,然後討論將會採取的策略,最後說說來達到目的的一些方法。
2.1定義PCA(Principal Component Analysis):通過線性變換將原始數據變換為一組各維度線性無關的表示,可用於提取數據的主要特徵分量,常用於高維數據的降維。
2.2動機這裡我們採用網路張洋《PCA的數學原理》文中的例子,某個淘寶店2012年全年的流量及交易情況可以看成一組記錄的集合,其中每一天的數據是一條記錄,格式如下:
(日期, 瀏覽量, 訪客數, 下單數, 成交數, 成交金額)
其中「日期」是一個記錄標誌而非度量值,而數據挖掘關心的大多是度量值,因此如果我們忽略日期這個欄位後,我們得到一組記錄,每條記錄可以被表示為一個五維向量,其中一條看起來大約是這個樣子:
(500,240,25,13,2312.15)T
繼續強調這裡,用了轉置,因為習慣上使用列向量表示一條記錄(後面會看到原因),本文後面也會遵循這個準則。不過為了方便有時會省略轉置符號,但我們說到向量默認都是指列向量。
從經驗我們可以知道,「瀏覽量」和「訪客數」往往具有較強的相關關係,而「下單數」和「成交數」也具有較強的相關關係。這裡我們非正式的使用「相關關係」這個詞,可以直觀理解為「當某一天這個店鋪的瀏覽量較高(或較低)時,我們應該很大程度上認為這天的訪客數也較高(或較低)」。後面的章節中我們會給出相關性的嚴格數學定義。
這種情況表明,如果我們刪除瀏覽量或訪客數其中一個指標,我們應該期待並不會丟失太多信息。因此我們可以刪除一個,以降低機器學習演算法的複雜度。
但是憑藉經驗,可能選擇的標準不夠精準:我們到底刪除哪一列損失的信息才最小?亦或根本不是單純刪除幾列,而是通過某些變換將原始數據變為更少的列但又使得丟失的信息最小?到底如何度量丟失信息的多少?如何根據原始數據決定具體的降維操作步驟?
PCA作為解決此類的問題的關鍵登場了。
2.3目的根據上述的經驗,我們認為讓數據進行合理的降維,一是盡量減少信息的缺失,即保全信息的所有內容;二是減少數據之間的相關性(例子中有所體現)。
從統計上來說(另一層面是從概率上來說),方差體現著離散程度,直觀而言,二維數據降為一維,這個問題實際上是要在二維平面中選擇一個方向,將所有數據都投影到這個方向所在直線上,用投影值表示原始記錄。
那麼如何選擇這個方向(或者說基)才能盡量保留最多的原始信息呢?我們希望投影后的投影值儘可能分散。也就是方差儘可能的大。
- 統計中另一指標協方差,其用于衡量兩個變數的總體誤差,直接理解為相關性即可(由其得到的相關係數可能更為直接)。 我們希望的是協方差儘可能的小,如果為0,則可以得出目標變數之間不相關(或者成為線性獨立,不相關是指兩個隨機變數沒有近似的線性關係,而獨立是指兩個變數沒有任何關係。)
由上述1,2,可以得到我們的目的:數據之間的1.方差儘可能的大,2.協方差逼近0
2.4策略這裡我們假設數據每一維度特徵的均值為0(我們有能力達到這樣的效果,可以稱之為0均值化,當然也可以不這樣做),上述的方差和協方差公式為:
然後我們用X乘以X的轉置,並乘上係數1/m:
這個矩陣對角線上的兩個元素分別是兩個欄位的方差,而其它元素是a和b的協方差。兩者被統一到了一個矩陣的。
根據矩陣相乘的運演算法則,這個結論很容易被推廣到一般情況:
設我們有m個n維數據記錄,將其按列排成n乘m的矩陣X,設C=X乘以X的轉置,並乘上係數1/m,則C是一個對稱矩陣,其對角線分別個各個欄位的方差,而第i行j列和j行i列元素相同,表示i和j兩個欄位的協方差。
2.3節知我們的目的:數據之間的1.方差儘可能的大,2.協方差逼近0,在協方差矩陣C體現就為對角元儘可能大,非對角元為0這樣的數值體現。
2.5方法上節我們得知,我們需要讓協方差矩陣C體現就為對角元儘可能大,非對角元為0,有什麼方法能做到這點?
特徵值法 對角元儘可能大,非對角元為0 這樣的描述直接的想法就是對角矩陣,那麼我們能不能聯繫特徵向量、特徵值這些知識?當然是肯定的,還記得C必為對稱矩陣的這一特點嗎?
在線性代數上,實對稱矩陣有一系列非常好的性質:
1)對稱矩陣特徵值為實數。 2)實對稱矩陣不同特徵值對應的特徵向量必然正交。 3)設特徵向量λλ重數為r,則必然存在r個線性無關的特徵向量對應於λλ,因此可以將這r個特徵向量單位正交化。 ··· 那麼我們的想法就很自然了,原數據矩陣X,由它得到協方差矩陣C,我們希望X經過變換矩陣P得到降維矩陣Y,而Y協方差矩陣為對角矩陣,這樣滿足了上述目的。
拆分上面的語言, 「X經過變換矩陣P得到降維矩陣Y」,數學上表達為:PX=Y(XP=Y也可以,只不過二者的P不一樣); 「Y協方差矩陣為對角矩陣」,設Y的協方差矩陣為D,我們推導一下D與C的關係:
目標進一步明確,我們要求變換矩陣P,P是體現我們整個線性變化的關鍵。我們可以通過對它的修改來達到降維這一目的。問題是P怎麼求得?
我們從特徵變換考慮D與C之間的關係:
假設C求得特徵向量,為e1,e2,?,en,我們將其按列組成矩陣:
將C對角化: 很自然,我們希望Λ =D,則P =E轉置P是協方差矩陣的特徵向量單位化後按行排列出的矩陣,其中每一行都是C的一個特徵向量。如果設P按照Λ中特徵值的從大到小,將特徵向量從上到下排列,則用P的前K行組成的矩陣乘以原始數據矩陣X,就得到了我們需要的降維後的數據矩陣Y。
至於K的選擇,一般說來採用一定的比例作為標準(參見西瓜書p231,其中的說法是重構閾值。簡單而言,就是選取的K個特徵值之和佔總體特徵值之和的比例必須達到一定的比例)
總結一下,特徵值法的演算法為( 設有m條n維數據):
1)將原始數據按列組成n行m列矩陣X
2)將X的每一行(代表一個屬性欄位)進行零均值化,即減去這一行的均值
3)求出協方差矩陣C
4)求出協方差矩陣的特徵值及對應的特徵向量
5)將特徵向量按對應特徵值大小從上到下按行排列成矩陣,取前k行組成矩陣P
6)Y=PX即為降維到k維後的數據
奇異值法
在實踐中,我們一般不採用特徵變換(evd),而是轉為穩定的奇異值法(svd,穩定一說聽某一老師的說法)。
SVD簡單就是原矩陣A分解如下(不介紹如何推導):
這裡的U我們稱為左奇異向量,對應的,VT稱為右奇異向量,中間的∑是由了0塊和奇異值對角塊組成的矩陣。簡單而言,奇異值針對於非方陣的分解,其用處很多,並不限於(PCA),直接的,還有M-P偽逆和數據壓縮等用處。
對於數據壓縮,SVD是很直接,分解完U,∑,V這三者可以近似還原原矩陣達到降維;需要注意的是,之前我聯繫奇異值法和特徵值法的時候,總是以為二者可以轉換,其實在EVD處理PCA時,我們進行特徵轉換的對象是C,其中C必為方陣(或者更進一步,C為對稱矩陣);而SVD處理PCA的時候,我們處理的是原數據矩陣X,二者其實處理的對象並不一樣。
對於SVD,數學知識包含內容很多,如有機會,後面我會詳細研究談論。這裡我們只是針對實際PCA的工作進行應用。
對於PCA,參看2.5節,我們的目標是求得轉換矩陣P
實際中,我們可以採用matlab的函數分解原數據矩陣X(重複一遍,X的一列代表一條記錄或者樣本,一行代表所有特徵或者屬性),得到U,∑,V。而這裡我們可以選取U或者V作為P的選擇,則我們可以進行兩方面的壓縮:如果選擇P=U,則對行進行壓縮,常規的我們可以稱之為降低維度,那麼和特徵值法無異;如果選擇P=V(此時P為右乘),則對列進行壓縮,可以理解為,將一些相似的樣本合併在一起,或者將一些沒有太大價值的樣本去掉。
可以看出,其實PCA幾乎可以說是對SVD的一個包裝,如果我們實現了SVD,那也就實現了PCA了,而且更好的地方是,有了SVD,我們就可以得到兩個方向的PCA,如果我們對A』A進行特徵值的分解,只能得到一個方向的PCA。
推薦閱讀:
※數與代數(倍數與因數、分數、分數加減法)
※四年級下 數與代數
※集合論基礎
※關於光場相機,你了解多少?會取代數碼單反嗎?
※循環群
