1. 程式人生 > >對核函式(kernel)最通俗易懂的理解

對核函式(kernel)最通俗易懂的理解

機器學習演算法中,不論是感知機還是支援向量機,在面對非線性問題時,往往都會用到一個名為“核函式”的技巧。那麼到底什麼是核函式呢?是否真的如聽起來這樣難以理解呢?


核函式:是對映關係 的內積,對映函式本身僅僅是一種對映關係,並沒有增加維度的特性,不過可以利用核函式的特性,構造可以增加維度的核函式,這通常是我們希望的。

二維對映到三維,區分就更容易了,這是聚類、分類常用核函式的原因。為什麼PCA這樣一個降維演算法也用核函式呢?


左圖為原資料,右圖為對映到三維的資料,可以看出:同樣是降到1維,先通過Kernel對映到(Kernel是對映的內積,不要弄亂了)三維,再投影到1維,就容易分離開,這就是Kernel在PCA降維中的應用,本質還是對原有資料增加維度。

下面是李航的《統計學習方法》中對於核函式的定義:


要注意,核函式和對映沒有關係。核函式只是用來計算對映到高維空間之後的內積的一種簡便方法。

一般英文文獻對Kernel有兩種提法,一是Kernel Function,二是Kernel Trick。從Trick一詞中就可以看出,這只是一種運算技巧而已,不涉及什麼高深莫測的東西。

具體巧在哪裡呢?我們如果想進行原本就線性不可分的資料集進行分割,那麼選項一是容忍錯誤分類,即引入Soft Margin;選項二是我們可以對Input Space做Feature Expansion,把資料集對映到高維中去,形成了Feature Space。我們幾乎可以認為(引用Caltech的課堂用語“We are safe but not certain

”)原本在低維中線性不可分的資料集在足夠高的維度中存線上性可分的超平面。


舉一個知乎上霍華德的例子。假設我們的任務是要預測那些微博可以上微博熱搜榜。有兩個離散特徵,一個代表某個微博裡有“鹿晗”,一個代表某個微博裡有“關曉彤”。

兩個特徵單獨看熱度都一般,此時我們用二階多項式核方法:

K(鹿晗,關曉彤) = <鹿晗,關曉彤>^2

這個核函式可以把二維空間投射到三維空間,展開之後是:

K(鹿晗,關曉彤) =(鹿晗^2,\sqrt{2}鹿晗\times 關曉彤,關曉彤^2)

這樣就把二維特徵變成了三維,多了一維 鹿晗\times 關曉彤 ,代表著某條微博裡鹿晗和關曉彤同時出現。

結果大家都知道了,鹿晗關曉彤同時出現的那條微博超級火,把新浪伺服器都擠爆了。

現實生活中有很多非線性非常強的特徵 而核方法能夠捕捉它們。核技巧(kernel trick)的作用,一句話概括的話,就是

降低計算的複雜度,甚至把不可能的計算變為可能

在機器學習中常用的核函式,一般有這麼幾類,也就是LibSVM中自帶的這幾類:

1) 線性:K(v_1,v_2)=<v_1,v_2>
2) 多項式:K(v_1,v_2)=(\gamma<v_1,v_2>+c)^n
3) Radial basis function:K(v_1,v_2)=\exp(-\gamma||v_1-v_2||^2)
4) Sigmoid:K(v_1,v_2)=\tanh(\gamma<v_1,v_2>+c)

我舉的例子是多項式核函式中\gamma=1, c=0, n=2的情況。

在實用中,很多使用者都是盲目地試驗各種核函式,並掃描其中的引數,選擇效果最好的。至於什麼樣的核函式適用於什麼樣的問題,大多數人都不懂。很不幸,我也屬於這大多數人,所以如果有人對這個問題有理論性的理解,還請指教。

參考文章: