核方法(Kernel method)是提升特徵維度,讓特徵能成為線性可分的技巧,在運作上,核函數的選擇是個挑戰,然而挑戰的出發點不是認識核函數的數學公式,而是在深入的分析、理解資料本身。

這會是高維資料投影嗎?

我在先前專欄〈從影子遊戲到主成分分析〉中談過,對於高維度的資料,我們可以透過主成分分析來降低資料的維度,而在盡量保留取特徵中重要資訊的前提之下,以便進行可視化、抽取特徵、清理資料等動作。

然而,相對於主成分分析會進行降維的動作,實際上,這時候,還存在著對於既有資料提升維度的需求。

我們可以從一個簡單的例子,來理解為何要提升維度。如果有一組資料,特徵值為(1,0)、(0,1)、(-1,0)、(0,-1),分別標記為0、1、0、1,若使用散布圖,分別用o與x來標示這組資料,o與x會交叉成為XOR的情況,也就是無法找出一條直線,將資料分為兩類,顯然地,這簡單的四筆資料並不是線性可分的問題。

然而,這只是二維的情況,如果從另一個角度來想,如果四個點,o的部份降低,x的部份升高又如何呢?

也就是徑自將特徵值的維度提升為三維,在第三個維度上,o的資料設定為1,而x設定為-1,成為(1,0,-1)、(0,1,1)、(-1,0,-1)、(0,-1,1),那麼,就可以用一個平面將資料分為兩類,也就是提升維度後的資料,成為線性可分的問題。

當然,只有四個點很簡單,如果有很多點呢?例如在〈二維線性不可分〉這個gist,畫出來的散布圖中有一百個點,在只有兩類的情況下,寫程式根據一百個點的標記,將o的部份降低,x的部份升高,雖然足以應付,只不過如果標記也很多之際,這種方式就顯得笨重,最好還是依既有的特徵值想辦法提升維度。

如果你觀察力很敏銳,或許會發現可以用雙抛物面公式──直接透過公式來轉換維度。像是〈雙拋物面提升維度〉這個gist,在經過雙抛物面公式轉換維度後,相同分類的資料各座落在XY平面的兩側,之後就能用提高維度後的資料來進行線性分類。

簡單來說,對於一組線性不可分的資料,我們可以合理地懷疑,它們會不會是高維度且線性可分的資料投影,雖然不可能得知資料在高維度的真正資訊,然而,如果只是能針對既有資料分類,只要能合理地虛構出高維時線性可分的資料,就能夠達到目的。

從特徵衍生到核函數

透過將特徵提升維度,可以在不改變線性模型的情況下,對既有的資料進行非線性分類,這並不是什麼新鮮事,在先前專欄〈淺談迴歸與感知器〉就曾經談過,若使用sklearn,透過PolynomialFeatures轉換特徵值,就可以讓線性模型LinearRegression進行非線性的迴歸。

從另一個角度來思考PolynomialFeatures轉換後的特徵值,例如,若PolynomialFeatures指定階數為二,(x)會被轉換為(1,x,x^2),像這樣將特徵進行衍生,不就是維度提升嗎?在提升後的維度使用線性模型LinearRegression,就是在尋找一個超平面作為線性迴歸的結果。

在〈多元線性迴歸(二)〉當中,就有個例子。我試著在三維座標中可視化特徵衍生後的結果,也試著旋轉座標來觀察,某個角度下,視覺上可以找到一個線性關係,這意謂著,線性模型LinearRegression可以基於特徵衍生後的結果,尋找這個線性關係。

回到分類的問題,理論上,對於一組特徵X,我們總是可以找到一個轉換函式φ(X),能夠將X轉換至更高維度的特徵,從而使得問題成為線性可分,只不過,若特徵數很多時,將這些點各自投影到更高維度,會耗費大量的運算。

仔細想想,其實,真正的目的是要基於特徵訓練來學習分類,提高維度只不過是中間的一個過程,幸運的是,存在著稱為核方法(Kernel method)的技巧,可以在分類的推導過程去消除φ(X)。

假設A與B是維度相同的向量,內積運算A.B會是純量,φ(A).φ(B)也會是個純量,若能找到一個K函式,使得K(A,B)=φ(A).φ(B),則稱K為核函數(Kernel function),由於核函數的存在,在推導的最終就不需要φ(x),也就是說,有了核函數,可以在既有的維度中進行運算,不用有轉換至高維度的這道手續,也能進行分類。

從簡單的核函數開始認識

由於核函數必須滿足K(A,B)=φ(A).φ(B),如果我們試著去認識公式推導的過程,最後確實也能發現φ(x)被消除了,只不過此時,你可能還是很難具體地理解核函數到底是什麼,更別說去選擇不同的核函數了。

此時,我們可以從另一個角度來認識,例如,從最簡單的線性核(Linear Kernel)K(A,B)=A.B開始,顯然地,對應的φ(X)=X,也就是沒有提高維度,直接在既有的維度上學習分類,相當於沒有用到核方法。

若是K(A,B)=(A.B)^2,則為平方核心(Quadratic kernel)的一個例子,例如,如果A為(a1,a2),B為(b1,b2),K(A,B)=(a1*b1+a2*b2)^2,我們可以將等號的右邊,試著進行計算,以及重新整理以後,可以成為(a1^2,a2^2,sqrt(2)*a1*a2).(b1^2,b2^2,sqrt(2)*b1*b2),也就是對應的φ(X)=(x1^2,x2^2,sqrt(2)*x1*x2)。

換言之,以A為例,其特徵被提高至三維的空間後,a1*a2若為正,也就是原本第一或第三象限的特徵,會被提高維度後會是位於三維座標中的第一卦限,a1*a2若為負,也就是原本第二或第四象限的特徵,被提高維度後,會是位於第五卦限;相對來說,如果原本第一或第三象限的特徵是同一分類,原本第二或第四象限的特徵是另一分類,就可以使用K(A,B)=(A.B)^2作為核函數。

透過以上的方式,我們可以理解核函數有對應的φ(X),而此舉會有助於理解與選擇核函數,例如,sklearn的PolynomialCountSketch就實作了多項式核函數;如果資料的分布上像是個圓,圍繞著內圈為一個分類,較外圈為另一分類呢?對此,RBFSampler提供了基於半徑基函式(Radial Basis Function)的核函數。

在模型的選擇上,核函數經常是支援向量機(Support vector machine)的設定選項之一,因為支援向量機本身是個線性模型,然而透過核方法,也就是選擇適當的核函數,也能有效地進行非線性分類,就類似LinearRegression,可藉由PolynomialFeatures來進行非線性迴歸的關係。

認識資料的一種方式

實際上,核方法並不僅用於搭配支援向量機,其本身是一種觀察資料的方式,只不過相對於主成分分析使用降維來尋找主要特徵,核方法是透過提升維度來衍生出必要的特徵。

只不過如何衍生出必要的特徵,並非憑空選擇轉換函式φ(X)或核函數,確實地,核函數的選擇是個挑戰,然而,這個挑戰的出發點,並不是去認識核函數的數學公式,而是在深入的分析、理解資料本身,以及維度轉換後的資料意謂著什麼。

專欄作者

熱門新聞

Advertisement