圖1 不同降維算法對比

這里autoencoder是否去中心化個人覺得還是有點疑問,在處理圖像數據的時候,會對輸入圖片做一個變到0均值的預處理,但是這個操作是針對一張樣本內減均值[1],這里的去中心化指的是針對某一維數據減均值,并不是一個概念。下面開始具體談談降維相關的內容。

1.降維基本概念

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

2. 從什么角度出發來降維

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

圖2 流形學習

3. 幾種降維方法流程

3.1 主成分分析PCA

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

此外,PCA還有很多變種kernel PCA, probabilistic PCA等等,本文暫時只考慮最簡單的PCA版本。

3.2?多維縮放(MDS)

3.3?線性判別分析(LDA)

圖3 LDA進行投影(圖來源[4])

個人覺得這里的優化目標實際上體現了一個假設,即假設優化目標上下的表達式都是對角矩陣,W的變換使得Sd Sw 都變成了對角矩陣。

3.4?等度量映射(Isomap)

3.5?局部線性嵌入(LLE)

基于上面的假設,首先想辦法來求解這個權重,假設每個樣本點由周圍K個樣本求出來,那么一個樣本的線性組合權重大小應該是1?K,通過最小化reconstruct error重構誤差來求解,然后目標函數對f求導得到解。

求出權重之后,代入低維空間的優化目標

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

3.6 t-SNE

同時將低維空間兩個點的相互關系或者說相似程度也用聯合概率來表示,假設在低維空間中兩點間歐式距離服從一個自由度的學生t分布,那么在低維空間中兩個點的距離概率在所有的兩個點距離概率之中的比重作為它們的聯合概率。

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

3.7 DeepAutoencoder Networks

圖4 Autoencoder網絡結構圖

然而在實際的實現網絡過程中,整個網絡實際上層數只是圖4中的一半,即4層網絡,2000-1000-500-30的全連接結構。因為權重參數實際上在encoder和decoder中是相同的,enocoder過程是上一層的節點值乘以權重得到這一層的節點值,而decoder是這一層節點值與權重矩陣的轉置相乘得到上一層的節點值。下圖[7]更加清晰的展示了每一層實際的結構,包括一次前向傳播和后向傳播,因此可以拿最頂層的值作為網絡的降維輸出來進行其他的分析,例如可視化,或者作為壓縮特征使用。

圖5 Autoencoder層間結構

4.小結

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

5.代碼附錄

網上關于各種降維算法的資料參差不齊,同時大部分不提供源代碼。這里有個 GitHub 項目整理了使用 Python 實現了 11 種經典的數據抽?。〝祿稻S)算法,包括:PCA、LDA、MDS、LLE、TSNE 等,并附有相關資料、展示效果;非常適合機器學習初學者和剛剛入坑數據挖掘的小伙伴。

文章轉自微信公眾號@算法進階

上一篇:

一文深度解讀模型評估方法

下一篇:

圖解機器學習神器:Scikit-Learn
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費