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