機器學習領域中所謂的降維就是指採用某種映射方法,將原高維空間中的數據點映射到低維度的空間中。降維的本質是學習一個映射函數 f : x->y,其中x是原始數據點的表達,目前最多使用向量表達形式。 y是數據點映射後的低維向量表達,一般y的維度小於x的維度(固然提升維度也是能夠的)。f多是顯式的或隱式的、線性的或非線性的。算法
目前大部分降維算法處理向量表達的數據,也有一些降維算法處理高階張量表達的數據。之因此使用降維後的數據表示是由於:①在原始的高維空間中,包含有冗餘信息以及噪音信息,在實際應用例如圖像識別中形成了偏差,下降了準確率;而經過降維,咱們但願減小冗餘信息所形成的偏差,提升識別(或其餘應用)的精度。 ②又或者但願經過降維算法來尋找數據內部的本質結構特徵。網絡
在不少算法中,降維算法成爲了數據預處理的一部分,如PCA。事實上,有一些算法若是沒有降維預處理,實際上是很可貴到很好的效果的。框架
數據降維,直觀地好處是維度下降了,便於計算和可視化,其更深層次的意義在於有效信息的提取綜合及無用信息的擯棄。機器學習
主要的方法是線性映射和非線性映射方法兩大類。函數
線性映射方法的表明方法有:PCA(Principal Component Analysis),LDA(Discriminant Analysis)學習
主成分分析(PCA) 是最經常使用的線性降維方法,它的目標是經過某種線性投影,將高維的數據映射到低維的空間中表示,並指望在所投影的維度上數據的方差最大,以此使用較少的數據維度,同時保留住較多的原數據點的特性。 是將原空間變換到特徵向量空間內,數學表示爲AX = γX。優化
爲何要用協方差矩陣來特向分解呢?
協方差矩陣表徵了變量之間的相關程度(維度之間關係)。
對數據相關性矩陣的特向分解,意味着找到最能表徵屬性相關性的特向(最能表徵即偏差平方最小)。PCA一開始就沒打算對數據進行特向分解,而是對數據屬性的相關性進行分析,從而表示出最能表明屬性相關性的特向,而後將原始數據向這些特向上投影。因此,有的地方說PCA去相關。 atom
通俗的理解,若是把全部的點都映射到一塊兒,那麼幾乎全部的信息(如點和點之間的距離關係)都丟失了,而若是映射後方差儘量的大,那麼數據點則會分散開來,以此來保留更多的信息。能夠證實,PCA是丟失原始數據信息最少的一種線性降維方式。(實際上就是最接近原始數據,可是PCA並不試圖去探索數據內在結構)spa
設 n 維向量w爲目標子空間的一個座標軸方向(稱爲映射向量),最大化數據映射後的方差,有:xml
其中 m 是數據實例的個數,xi 是數據實例 i 的向量表達, x拔是全部數據實例的平均向量。定義W 爲包含全部映射向量爲列向量的矩陣,通過線性代數變換,能夠獲得以下優化目標函數:
其中tr表示矩陣的跡,A是數據協方差矩陣。
容易獲得最優的W是由數據協方差矩陣前 k 個最大 的特徵值對應的特徵向量做爲列向量構成的。這些特徵向量造成一組正交基而且最好地保留了數據中的信息。
PCA的輸出就是Y = W*X,由X的原始維度下降到了k維。
PCA追求的是在降維以後可以最大化保持數據的內在信息,並經過衡量在投影方向上的數據方差的大小來衡量該方向的重要性。可是這樣投影之後對數據的區分做用並不大,反而可能使得數據點揉雜在一塊兒沒法區分。這也是PCA存在的最大一個問題,這致使使用PCA在不少狀況下的分類效果並很差。具體能夠看下圖所示,若使用PCA將數據點投影至一維空間上時,PCA會選擇2軸,這使得本來很容易區分的兩簇點被揉雜在一塊兒變得沒法區分;而這時若選擇1軸將會獲得很好的區分結果。
PCA優缺點:
優勢:1.最小偏差 2.提取了主要信息
缺點:PCA將全部的樣本(特徵向量集合)做爲一個總體對待,去尋找一個均方偏差最小意義下的最優線性映射投影,而忽略了類別屬性,而它所忽略的投影方向有可能恰好包含了重要的可分性信息。
判別分析(Discriminant Analysis) 所追求的目標與PCA不一樣,不是但願保持數據最多的信息,而是但願數據在降維後可以很容易地被區分開來。後面會介紹LDA的方法,是另外一 種常見的線性降維方法。另一些非線性的降維方法利用數據點的局部性質,也能夠作到比較好地區分結果,例如LLE,Laplacian Eigenmap等。之後會介紹。
LDA是一種有監督的(supervised)線性降維算法。與PCA保持數據信息不一樣,核心思想:往線性判別超平面的法向量上投影,是的區分度最大(高內聚,低耦合)。LDA是爲了使得降維後的數據點儘量地容易被區分!
假設原始數據表示爲X,(m*n矩陣,m是維度,n是sample的數量)
既然是線性的,那麼就是但願找到映射向量a, 使得 a‘X後的數據點可以保持如下兩種性質:
一、同類的數據點儘量的接近(within class)
二、不一樣類的數據點儘量的分開(between class)
因此呢仍是上次PCA用的這張圖,若是圖中兩堆點是兩類的話,那麼咱們就但願他們可以投影到軸1去(PCA結果爲軸2),這樣在一維空間中也是很容易區分的。
非線性映射方法的表明方法有:核方法(核+線性),二維化和張量化(二維+線性),流形學習(ISOMap,LLE,LPP)
表明方法有:KPCA,KFDA。
KPCA的基本思想:經過Kernel trick將PCA投影的過程經過內積的形式表達出來。將高維向量ϕ(x)與對應特向βϕ(x)與對應特向β的內積轉換成低維的核函數表示。
流形學習的主要算法有:ISOMap(等距映射)、LE(拉普拉斯特徵映射)、LLE(局部線性嵌入)。
流形:直線或者曲線是一維流形,平面或者曲面是二維流形,更高維以後是多維流形。一個流形比如是 d 維的空間,是一個 m 維空間(m>n)被扭曲以後的空間。流形並非一個「形狀」,而是一個「空間」
流形學習的假設:數據採樣於某一流形上。
ISOMap是一種非迭代的全局優化算法。ISOMap對MDS(Multidimensional Scaling-多維尺度分析)進行改造,用測地線距離(曲線距離)做爲空間中兩點距離,原來是用歐氏距離,從而將位於某維流形上的數據映射到一個歐氏空間上。
ISOMap將數據點鏈接起來構成一個鄰接Graph來離散地近似原來流形,而測地距離則相應地經過Graph上的最短路徑來近似了。
好比:咱們將球體曲面映射到二維平面上。
此博客寫得通俗易懂:http://blog.pluskid.org/?p=533
幾點注意:
1)ISOMap適用的流形:適合於內部平坦的低維流形,不適合於學習有較大內在曲率的流形。
2)近鄰數的選擇:近鄰數應足夠大以便可以減小在路徑長度和真實測地距離之間的不一樣,但要小到可以預防「短路」現象。
3)所構造圖的連通性:要求所構造的圖示連通的,不然有兩種處理辦法,一種是放寬臨界點選擇的限制,另外一種是對於每一連通部分分別使用ISOMap算法,獲得不一樣部分的降維結果。
數據究竟是否分佈於一個流形上?這是個暫時難以回答的問題。
MDS是一種降維方法,它在降維時使得降維以後的兩點間的歐氏距離儘可能保持不變(用歐氏距離矩陣來表示高維向量的兩兩之間的類似度,尋找一樣數量的映射維度的向量,使得映射維度下兩兩間距離約等於原高維下兩兩間距離,變爲了優化問題)。維基百科對MDS的介紹https://en.wikipedia.org/wiki/Multidimensional_scaling
前提假設:數據沒有造成一個封閉的超曲面,局部數據點是線性的。
LLE(Locally Linear Embedding-局部線性嵌入)是一種非線性降維算法,它可以使降維後的數據較好地保持原有 流形結構 。LLE用局部線性反映全局的非線性的算法,並可以使降維的數據保持原有數據的拓撲結構。(在流形上使用局部線性,並用有限局部樣本的互相線性表示,獲得幾何特性的構造權重矩陣,在低維下找到知足高維時樣本間構造權重的樣本集)
使用LLE將三維數據(b)映射到二維(c)以後,映射後的數據仍能保持原有的數據流形(紅色的點互相接近,藍色的也互相接近),說明LLE有效地保持了數據原有的流行結構。
可是LLE在有些狀況下也並不適用,若是數據分佈在整個封閉的球面上,LLE則不能將它映射到二維空間,且不能保持原有的數據流形。那麼咱們在處理數據中,首先假設數據不是分佈在閉合的球面或者橢球面上。
LLE算法認爲每個數據點均可以由其近鄰點的線性加權組合構造獲得。算法的主要步驟分爲三步:
LLE詳細步驟以下:
1.計算或者尋找數據點xi的臨近數據點。
假設數據局部爲平面,故能夠用線性組合表示xi,其偏差爲:
其中wij表示線性重構xi時的貢獻比例。
找到每一個樣本點的K個最近鄰點。
2.計算構造權重並重構數據
經過約束計算wij,使得不在該樣本點的K個最近鄰點中的構造權重都爲0.
重構權重使得重構的數據點與臨近點間的旋轉、縮放、平移特性保持不變,即幾何特性不依賴於特定的參考框架。
3.由重構樣本向低維映射。(求低維嵌入)
設zz是低維空間,找到一樣數量的低維映射樣本,使得:
最小。(不去關心ϕ,直接找zi)
流形學習優缺點:
優勢:1)假設流形的存在,部分解決了高維數據分佈的問題。
缺點:1)假設流形的存在,不能老是適合數據特色。
降維方法 __ 屬性選擇:過濾法、包裝法、嵌入法;
|_ 映射方法 __線性映射方法:PCA、FDA等
|__非線性映射方法:
|__核方法:KPCA、KFDA等
|__二維化:
|__流形學習:ISOMap、LLE、LPP等。
|__其餘方法:神經網絡和聚類
降維能夠方便數據可視化+數據分析+數據壓縮+數據提取等。
各個降維方法效果圖展現: