周志華《Machine Learning》學習筆記 12 ——降維與度量學習

       上篇主要介紹了幾種常用的聚類算法,首先從距離度量與性能評估出發,列舉了常見的距離計算公式與聚類評價指標,接着分別討論了K-Means、LVQ、高斯混合聚類、密度聚類以及層次聚類算法。K-Means與LVQ都試圖以類簇中心作爲原型指導聚類,其中K-Means通過EM算法不斷迭代直至收斂,LVQ使用真實類標輔助聚類;高斯混合聚類採用高斯分佈來描述類簇原型;密度聚類則是將一個核心對象所有密度可達的樣本形成類簇,直到所有核心對象都遍歷完;最後層次聚類是一種自底向上的樹形聚類方法,不斷合併最相近的兩個小類簇。本篇將討論機器學習常用的方法–降維與度量學習。


11、降維與度量學習

       樣本的特徵數稱爲維數(dimensionality),當維數非常大時,也就是現在所說的“維數災難”,具體表現在:在高維情形下,數據樣本將變得十分稀疏,因爲此時要滿足訓練樣本爲“密採樣”的總體樣本數目是一個觸不可及的天文數字,謂可遠觀而不可褻玩焉…訓練樣本的稀疏使得其代表總體分佈的能力大大減弱,從而消減了學習器的泛化能力;同時當維數很高時,計算距離也變得十分複雜,甚至連計算內積都不再容易,這也是爲什麼支持向量機(SVM)使用核函數“低維計算,高維表現”的原因。

       緩解維數災難的一個重要途徑就是降維,即通過某種數學變換將原始高維空間轉變到一個低維的子空間。在這個子空間中,樣本的密度將大幅提高,同時距離計算也變得容易。這時也許會有疑問,這樣降維之後不是會丟失原始數據的一部分信息嗎?這是因爲在很多實際的問題中,雖然訓練數據是高維的,但是與學習任務相關也許僅僅是其中的一個低維子空間,也稱爲一個低維嵌入,例如:數據屬性中存在噪聲屬性、相似屬性或冗餘屬性等,對高維數據進行降維能在一定程度上達到提煉低維優質屬性或降噪的效果


11.1 K近鄰學習

       k近鄰算法簡稱kNN(k-Nearest Neighbor),是一種經典的監督學習方法,同時也實力擔當入選數據挖掘十大算法。其工作機制十分簡單粗暴:給定某個測試樣本,kNN基於某種距離度量在訓練集中找出與其距離最近的k個帶有真實標記的訓練樣本,然後給基於這k個鄰居的真實標記來進行預測,類似於前面集成學習中所講到的基學習器結合策略:分類任務採用投票法,迴歸任務則採用平均法。接下來本篇主要就kNN分類進行討論。

         這裏寫圖片描述

       從上圖【來自Wiki】中我們可以看到,圖中有兩種類型的樣本,一類是藍色正方形,另一類是紅色三角形。而那個綠色圓形是我們待分類的樣本。基於kNN算法的思路,我們很容易得到以下結論:

如果K=3,那麼離綠色點最近的有2個紅色三角形和1個藍色的正方形,這3個點投票,於是綠色的這個待分類點屬於紅色的三角形。 
如果K=5,那麼離綠色點最近的有2個紅色三角形和3個藍色的正方形,這5個點投票,於是綠色的這個待分類點屬於藍色的正方形。

       可以發現:kNN雖然是一種監督學習方法,但是它卻沒有顯式的訓練過程,而是當有新樣本需要預測時,纔來計算出最近的k個鄰居,因此kNN是一種典型的懶惰學習方法,再來回想一下樸素貝葉斯的流程,訓練的過程就是參數估計,因此樸素貝葉斯也可以懶惰式學習,此類技術在訓練階段開銷爲零,待收到測試樣本後再進行計算。相應地我們稱那些一有訓練數據立馬開工的算法爲“急切學習”,可見前面我們學習的大部分算法都歸屬於急切學習。

       很容易看出:kNN算法的核心在於k值的選取以及距離的度量。k值選取太小,模型很容易受到噪聲數據的干擾,例如:極端地取k=1,若待分類樣本正好與一個噪聲數據距離最近,就導致了分類錯誤;若k值太大, 則在更大的鄰域內進行投票,此時模型的預測能力大大減弱,例如:極端取k=訓練樣本數,就相當於模型根本沒有學習,所有測試樣本的預測結果都是一樣的。一般地我們都通過交叉驗證法來選取一個適當的k值

                  這裏寫圖片描述

       對於距離度量,不同的度量方法得到的k個近鄰不盡相同,從而對最終的投票結果產生了影響,因此選擇一個合適的距離度量方法也十分重要。在上一篇聚類算法中,在度量樣本相似性時介紹了常用的幾種距離計算方法,包括閔可夫斯基距離,曼哈頓距離,VDM等。在實際應用中,kNN的距離度量函數一般根據樣本的特性來選擇合適的距離度量,同時應對數據進行去量綱/歸一化處理來消除大量綱屬性的強權政治影響


11.2 MDS算法

       不管是使用核函數升維還是對數據降維,我們都希望原始空間樣本點之間的距離在新空間中基本保持不變,這樣纔不會使得原始空間樣本之間的關係及總體分佈發生較大的改變。“多維縮放”(MDS)正是基於這樣的思想,MDS要求原始空間樣本之間的距離在降維後的低維空間中得以保持

       假定m個樣本在原始空間中任意兩兩樣本之間的距離矩陣爲D∈R(m*m),我們的目標便是獲得樣本在低維空間中的表示Z∈R(d’*m , d’< d),且任意兩個樣本在低維空間中的歐式距離等於原始空間中的距離,即||zi-zj||=Dist(ij)。因此接下來我們要做的就是根據已有的距離矩陣D來求解出降維後的座標矩陣Z。

            這裏寫圖片描述

       令降維後的樣本座標矩陣Z被中心化,中心化是指將每個樣本向量減去整個樣本集的均值向量,故所有樣本向量求和得到一個零向量。這樣易知:矩陣B的每一列以及每一列求和均爲0,因爲提取公因子後都有一項爲所有樣本向量的和向量。

             這裏寫圖片描述

         根據上面矩陣B的特徵,我們很容易得到等式(2)、(3)以及(4):

                   這裏寫圖片描述

       這時根據(1)–(4)式我們便可以計算出bij,即bij=(1)-(2)(1/m)-(3)(1/m)+(4)*(1/(m^2)),再逐一地計算每個b(ij),就得到了降維後低維空間中的內積矩陣B(B=Z’*Z),只需對B進行特徵值分解便可以得到Z。MDS的算法流程如下圖所示:

              這裏寫圖片描述


11.3 主成分分析(PCA)

       不同於MDS採用距離保持的方法,主成分分析(PCA)直接通過一個線性變換,將原始空間中的樣本投影到新的低維空間中。簡單來理解這一過程便是:PCA採用一組新的基來表示樣本點,其中每一個基向量都是原來基向量的線性組合,通過使用儘可能少的新基向量來表出樣本,從而達到降維的目的。

       假設使用d’個新基向量來表示原來樣本,實質上是將樣本投影到一個由d’個基向量確定的一個超平面上(即捨棄了一些維度),要用一個超平面對空間中所有高維樣本進行恰當的表達,最理想的情形是:若這些樣本點都能在超平面上表出且這些表出在超平面上都能夠很好地分散開來。但是一般使用較原空間低一些維度的超平面來做到這兩點十分不容易,因此我們退一步海闊天空,要求這個超平面應具有如下兩個性質:

最近重構性:樣本點到超平面的距離足夠近,即儘可能在超平面附近; 
最大可分性:樣本點在超平面上的投影儘可能地分散開來,即投影后的座標具有區分性。

       這裏十分神奇的是:最近重構性與最大可分性雖然從不同的出發點來定義優化問題中的目標函數,但最終這兩種特性得到了完全相同的優化問題

                這裏寫圖片描述

        接着使用拉格朗日乘子法求解上面的優化問題,得到:

                      這裏寫圖片描述

         因此只需對協方差矩陣進行特徵值分解即可求解出W,PCA算法的整個流程如下圖所示:

          這裏寫圖片描述

           另一篇博客給出更通俗更詳細的理解:主成分分析解析(基於最大方差理論)


11.4 核化線性降維

       說起機器學習你中有我/我中有你/水乳相融…在這裏能夠得到很好的體現。正如SVM在處理非線性可分時,通過引入核函數將樣本投影到高維特徵空間,接着在高維空間再對樣本點使用超平面劃分。這裏也是相同的問題:若我們的樣本數據點本身就不是線性分佈,那還如何使用一個超平面去近似表出呢?因此也就引入了核函數,即先將樣本映射到高維空間,再在高維空間中使用線性降維的方法。下面主要介紹核化主成分分析(KPCA)的思想。

       若核函數的形式已知,即我們知道如何將低維的座標變換爲高維座標,這時我們只需先將數據映射到高維特徵空間,再在高維空間中運用PCA即可。但是一般情況下,我們並不知道核函數具體的映射規則,例如:Sigmoid、高斯核等,我們只知道如何計算高維空間中的樣本內積,這時就引出了KPCA的一個重要創新之處:即空間中的任一向量,都可以由該空間中的所有樣本線性表示。證明過程也十分簡單:

               這裏寫圖片描述

         這樣我們便可以將高維特徵空間中的投影向量wi使用所有高維樣本點線性表出,接着代入PCA的求解問題,得到:

                  這裏寫圖片描述

       化簡到最後一步,發現結果十分的美妙,只需對核矩陣K進行特徵分解,便可以得出投影向量wi對應的係數向量α,因此選取特徵值前d’大對應的特徵向量便是d’個係數向量。這時對於需要降維的樣本點,只需按照以下步驟便可以求出其降維後的座標。可以看出:KPCA在計算降維後的座標表示時,需要與所有樣本點計算核函數值並求和,因此該算法的計算開銷十分大。

                  這裏寫圖片描述


11.5 流形學習

       流形學習(manifold learning)是一種藉助拓撲流形概念的降維方法流形是指在局部與歐式空間同胚的空間,即在局部與歐式空間具有相同的性質,能用歐氏距離計算樣本之間的距離。這樣即使高維空間的分佈十分複雜,但是在局部上依然滿足歐式空間的性質,基於流形學習的降維正是這種“鄰域保持”的思想。其中等度量映射(Isomap)試圖在降維前後保持鄰域內樣本之間的距離,而局部線性嵌入(LLE)則是保持鄰域內樣本之間的線性關係,下面將分別對這兩種著名的流行學習方法進行介紹。


11.5.1 等度量映射(Isomap)

       等度量映射的基本出發點是:高維空間中的直線距離具有誤導性,因爲有時高維空間中的直線距離在低維空間中是不可達的。因此利用流形在局部上與歐式空間同胚的性質,可以使用近鄰距離來逼近測地線距離,即對於一個樣本點,它與近鄰內的樣本點之間是可達的,且距離使用歐式距離計算,這樣整個樣本空間就形成了一張近鄰圖,高維空間中兩個樣本之間的距離就轉爲最短路徑問題。可採用著名的Dijkstra算法Floyd算法計算最短距離,得到高維空間中任意兩點之間的距離後便可以使用MDS算法來其計算低維空間中的座標。

這裏寫圖片描述

       從MDS算法的描述中我們可以知道:MDS先求出了低維空間的內積矩陣B,接着使用特徵值分解計算出了樣本在低維空間中的座標,但是並沒有給出通用的投影向量w,因此對於需要降維的新樣本無從下手,書中給出的權宜之計是利用已知高/低維座標的樣本作爲訓練集學習出一個“投影器”,便可以用高維座標預測出低維座標。Isomap算法流程如下圖:

          這裏寫圖片描述

       對於近鄰圖的構建,常用的有兩種方法:一種是指定近鄰點個數,像kNN一樣選取k個最近的鄰居;另一種是指定鄰域半徑,距離小於該閾值的被認爲是它的近鄰點。但兩種方法均會出現下面的問題:

鄰域範圍指定過大,則會造成“短路問題”,即本身距離很遠卻成了近鄰,將距離近的那些樣本扼殺在搖籃。 
鄰域範圍指定過小,則會造成“斷路問題”,即有些樣本點無法可達了,整個世界村被劃分爲互不可達的小部落。


11.5.2 局部線性嵌入(LLE)

       不同於Isomap算法去保持鄰域距離,LLE算法試圖去保持鄰域內的線性關係,假定樣本xi的座標可以通過它的鄰域樣本線性表出:

這裏寫圖片描述                這裏寫圖片描述

        LLE算法分爲兩步走,首先第一步根據近鄰關係計算出所有樣本的鄰域重構係數w

這裏寫圖片描述

        接着根據鄰域重構係數不變,去求解低維座標

            這裏寫圖片描述

        這樣利用矩陣M,優化問題可以重寫爲:

                 這裏寫圖片描述

        M特徵值分解後最小的d’個特徵值對應的特徵向量組成Z,LLE算法的具體流程如下圖所示:

            這裏寫圖片描述


11.6 度量學習

       本篇一開始就提到維數災難,即在高維空間進行機器學習任務遇到樣本稀疏、距離難計算等諸多的問題,因此前面討論的降維方法都試圖將原空間投影到一個合適的低維空間中,接着在低維空間進行學習任務從而產生較好的性能。事實上,不管高維空間還是低維空間都潛在對應着一個距離度量,那可不可以直接學習出一個距離度量來等效降維呢?例如:咋們就按照降維後的方式來進行距離的計算,這便是度量學習的初衷

       首先要學習出距離度量必須先定義一個合適的距離度量形式。對兩個樣本xi與xj,它們之間的平方歐式距離爲:

這裏寫圖片描述

       若各個屬性重要程度不一樣即都有一個權重,則得到加權的平方歐式距離:

這裏寫圖片描述

       此時各個屬性之間都是相互獨立無關的,但現實中往往會存在屬性之間有關聯的情形,例如:身高和體重,一般人越高,體重也會重一些,他們之間存在較大的相關性。這樣計算距離就不能分屬性單獨計算,於是就引入經典的馬氏距離(Mahalanobis distance):

               這裏寫圖片描述

        標準的馬氏距離中M是協方差矩陣的逆,馬氏距離是一種考慮屬性之間相關性且尺度無關(即無須去量綱)的距離度量

               這裏寫圖片描述

       矩陣M也稱爲“度量矩陣”,爲保證距離度量的非負性與對稱性,M必須爲(半)正定對稱矩陣,這樣就爲度量學習定義好了距離度量的形式,換句話說:度量學習便是對度量矩陣進行學習。現在來回想一下前面我們接觸的機器學習不難發現:機器學習算法幾乎都是在優化目標函數,從而求解目標函數中的參數。同樣對於度量學習,也需要設置一個優化目標,書中簡要介紹了錯誤率和相似性兩種優化目標,此處限於篇幅不進行展開。

       在此,降維和度量學習就介紹完畢。降維是將原高維空間嵌入到一個合適的低維子空間中,接着在低維空間中進行學習任務;度量學習則是試圖去學習出一個距離度量來等效降維的效果,兩者都是爲了解決維數災難帶來的諸多問題。也許大家最後心存疑惑,那kNN呢,爲什麼一開頭就說了kNN算法,但是好像和後面沒有半毛錢關係?正是因爲在降維算法中,低維子空間的維數d’通常都由人爲指定,因此我們需要使用一些低開銷的學習器來選取合適的d’,kNN這傢伙懶到家了根本無心學習,在訓練階段開銷爲零,測試階段也只是遍歷計算了距離,因此拿kNN來進行交叉驗證就十分有優勢了~同時降維後樣本密度增大同時距離計算變易,更爲kNN來展示它獨特的十八般手藝提供了用武之地。


轉載自: https://blog.csdn.net/u011826404/article/details/72123031

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章