圖1 不同降維算法對(duì)比

這里autoencoder是否去中心化個(gè)人覺(jué)得還是有點(diǎn)疑問(wèn),在處理圖像數(shù)據(jù)的時(shí)候,會(huì)對(duì)輸入圖片做一個(gè)變到0均值的預(yù)處理,但是這個(gè)操作是針對(duì)一張樣本內(nèi)減均值[1],這里的去中心化指的是針對(duì)某一維數(shù)據(jù)減均值,并不是一個(gè)概念。下面開(kāi)始具體談?wù)劷稻S相關(guān)的內(nèi)容。

1.降維基本概念

而為什么可以降維,這是因?yàn)閿?shù)據(jù)有冗余,要么是一些沒(méi)有用的信息,要么是一些重復(fù)表達(dá)的信息,例如一張512*512的圖只有中心100*100的區(qū)域內(nèi)有非0值,剩下的區(qū)域就是沒(méi)有用的信息,又或者一張圖是成中心對(duì)稱的,那么對(duì)稱的部分信息就重復(fù)了。正確降維后的數(shù)據(jù)一般保留了原始數(shù)據(jù)的大部分的重要信息,它完全可以替代輸入去做一些其他的工作,從而很大程度上可以減少計(jì)算量。例如降到二維或者三維來(lái)可視化。

2. 從什么角度出發(fā)來(lái)降維

一般來(lái)說(shuō)可以從兩個(gè)角度來(lái)考慮做數(shù)據(jù)降維,一種是直接提取特征子集做特征抽取,例如從512*512圖中只取中心部分,一種是通過(guò)線性/非線性的方式將原來(lái)高維空間變換到一個(gè)新的空間,這里主要討論后面一種。后面一種的角度一般有兩種思路來(lái)實(shí)現(xiàn)[2],一種是基于從高維空間映射到低維空間的projection方法,其中代表算法就是PCA,而其他的LDA、Autoencoder也算是這種,主要目的就是學(xué)習(xí)或者算出一個(gè)矩陣變換W,用這個(gè)矩陣與高維數(shù)據(jù)相乘得到低維數(shù)據(jù)。另一種是基于流形學(xué)習(xí)的方法,流形學(xué)習(xí)的目的是找到高維空間樣本的低維描述,它假設(shè)在高維空間中數(shù)據(jù)會(huì)呈現(xiàn)一種有規(guī)律的低維流形排列,但是這種規(guī)律排列不能直接通過(guò)高維空間的歐式距離來(lái)衡量,如下左圖所示,某兩點(diǎn)實(shí)際上的距離應(yīng)該是下右圖展開(kāi)后的距離。如果能夠有方法將高維空間中流形描述出來(lái),那么在降維的過(guò)程中就能夠保留這種空間關(guān)系,為了解決這個(gè)問(wèn)題,流形學(xué)習(xí)假設(shè)高維空間的局部區(qū)域仍然具有歐式空間的性質(zhì),即它們的距離可以通過(guò)歐式距離算出(Isomap),或者某點(diǎn)坐標(biāo)能夠由臨近的節(jié)點(diǎn)線性組合算出(LLE),從而可以獲得高維空間的一種關(guān)系,而這種關(guān)系能夠在低維空間中保留下來(lái),從而基于這種關(guān)系表示來(lái)進(jìn)行降維,因此流形學(xué)習(xí)可以用來(lái)壓縮數(shù)據(jù)、可視化、獲取有效的距離矩陣等。

圖2 流形學(xué)習(xí)

3. 幾種降維方法流程

3.1 主成分分析PCA

這個(gè)式子實(shí)際上就是表示了線性變換矩陣W在PCA算法中的作用是讓原始協(xié)方差矩陣C對(duì)角化。又由于線性代數(shù)中對(duì)角化是通過(guò)求解特征值與對(duì)應(yīng)的特征向量得到,因此可以推出PCA算法流程(流程主要摘自周志華老師的《機(jī)器學(xué)習(xí)》一書,其中加入了目標(biāo)和假設(shè)用于對(duì)比后面的算法。周老師書中是基于拉格朗日乘子法推導(dǎo)出來(lái),本質(zhì)上而言與[3]都是一樣的,這里很推薦這篇講PCA數(shù)學(xué)原理的博客[3])。

此外,PCA還有很多變種kernel PCA, probabilistic PCA等等,本文暫時(shí)只考慮最簡(jiǎn)單的PCA版本。

3.2?多維縮放(MDS)

3.3?線性判別分析(LDA)

圖3 LDA進(jìn)行投影(圖來(lái)源[4])

個(gè)人覺(jué)得這里的優(yōu)化目標(biāo)實(shí)際上體現(xiàn)了一個(gè)假設(shè),即假設(shè)優(yōu)化目標(biāo)上下的表達(dá)式都是對(duì)角矩陣,W的變換使得Sd Sw 都變成了對(duì)角矩陣。

3.4?等度量映射(Isomap)

3.5?局部線性嵌入(LLE)

基于上面的假設(shè),首先想辦法來(lái)求解這個(gè)權(quán)重,假設(shè)每個(gè)樣本點(diǎn)由周圍K個(gè)樣本求出來(lái),那么一個(gè)樣本的線性組合權(quán)重大小應(yīng)該是1?K,通過(guò)最小化reconstruct error重構(gòu)誤差來(lái)求解,然后目標(biāo)函數(shù)對(duì)f求導(dǎo)得到解。

求出權(quán)重之后,代入低維空間的優(yōu)化目標(biāo)

來(lái)求解Z,這里將F按照 N?排列起來(lái),且加入了對(duì)Z的限制。這里用拉格朗日乘子法可以得到 MZ=λY 的形式,從而通過(guò)對(duì)M進(jìn)行特征值分解求得Z。

3.6 t-SNE

同時(shí)將低維空間兩個(gè)點(diǎn)的相互關(guān)系或者說(shuō)相似程度也用聯(lián)合概率來(lái)表示,假設(shè)在低維空間中兩點(diǎn)間歐式距離服從一個(gè)自由度的學(xué)生t分布,那么在低維空間中兩個(gè)點(diǎn)的距離概率在所有的兩個(gè)點(diǎn)距離概率之中的比重作為它們的聯(lián)合概率。

需要注意的是,這個(gè)算法將低維數(shù)據(jù)作為變量進(jìn)行迭代,所以如果需要加入插入新的數(shù)據(jù),是沒(méi)有辦法直接對(duì)新數(shù)據(jù)進(jìn)行操作,而是要把新數(shù)據(jù)加到原始數(shù)據(jù)中再重新算一遍,因此T-sne主要的功能還是可視化。

3.7 DeepAutoencoder Networks

圖4 Autoencoder網(wǎng)絡(luò)結(jié)構(gòu)圖

然而在實(shí)際的實(shí)現(xiàn)網(wǎng)絡(luò)過(guò)程中,整個(gè)網(wǎng)絡(luò)實(shí)際上層數(shù)只是圖4中的一半,即4層網(wǎng)絡(luò),2000-1000-500-30的全連接結(jié)構(gòu)。因?yàn)闄?quán)重參數(shù)實(shí)際上在encoder和decoder中是相同的,enocoder過(guò)程是上一層的節(jié)點(diǎn)值乘以權(quán)重得到這一層的節(jié)點(diǎn)值,而decoder是這一層節(jié)點(diǎn)值與權(quán)重矩陣的轉(zhuǎn)置相乘得到上一層的節(jié)點(diǎn)值。下圖[7]更加清晰的展示了每一層實(shí)際的結(jié)構(gòu),包括一次前向傳播和后向傳播,因此可以拿最頂層的值作為網(wǎng)絡(luò)的降維輸出來(lái)進(jìn)行其他的分析,例如可視化,或者作為壓縮特征使用。

圖5 Autoencoder層間結(jié)構(gòu)

4.小結(jié)

本文主要重點(diǎn)放在算法流程是什么,每一步具體做了什么,有的地方可能理論闡述還不夠清晰。但是有意思的是除了t-sne和autoencoder之外,其他的幾種降維算法都是基于構(gòu)造某個(gè)矩陣,然后對(duì)矩陣進(jìn)行特征值分解,得到相關(guān)的ZZ或者WW。Laplacian Eigenmaps拉普拉斯特征映射沒(méi)有完整研究,但是看算法最后也是選擇前d個(gè)最小非零特征值,這個(gè)很有意思,就是數(shù)學(xué)功底不好,暫時(shí)想不通為什么基于特征值的效果這么好。而比較一層的autoencoder和PCA,假設(shè)autoencoder的目標(biāo)函數(shù)是最小化均方誤差,雖然autoencoder沒(méi)有PCA那么強(qiáng)的約束(要求每一維正交),但是autoencoder也許可以學(xué)到,因?yàn)楸旧砘谧畲蠡瘏f(xié)方差的跡與最小均方差估計(jì)是等價(jià)的。幾種方法總是讓人感覺(jué)有著某些潛在的關(guān)聯(lián),不知道是不是能夠提取出一種統(tǒng)一的模型能夠把降維這件事情給解決掉。

5.代碼附錄

網(wǎng)上關(guān)于各種降維算法的資料參差不齊,同時(shí)大部分不提供源代碼。這里有個(gè) GitHub 項(xiàng)目整理了使用 Python 實(shí)現(xiàn)了 11 種經(jīng)典的數(shù)據(jù)抽取(數(shù)據(jù)降維)算法,包括:PCA、LDA、MDS、LLE、TSNE 等,并附有相關(guān)資料、展示效果;非常適合機(jī)器學(xué)習(xí)初學(xué)者和剛剛?cè)肟訑?shù)據(jù)挖掘的小伙伴。

文章轉(zhuǎn)自微信公眾號(hào)@算法進(jìn)階

上一篇:

一文深度解讀模型評(píng)估方法

下一篇:

圖解機(jī)器學(xué)習(xí)神器:Scikit-Learn
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)