機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

轉自知乎

詳細的公式什麼的,網絡上搜索kernel function, kernel methods 有很多,我就不仔細說了,簡單地說說背後的intuition。

intuition也很簡單,比如我們有一個一維的數據分佈是如下圖的樣子,你想把它用一個直線來分開,你發現是不可能的,因爲他們是間隔的。所以不論你畫在哪,比如綠色豎線,都不可能把兩個類分開。

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

但是我們使用一個簡單的升維的方法,把原來一維的空間投射到二維中,x->(x, x^2)。比如:

0->(0,0)

1->(1,1)

2->(2,4)

這時候就線性可分了

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

再舉個例子,在一個二維平面裏面,這樣的情況是不可能只用一個平面來分類的,但是隻要把它投射到三維的球體上,就可能很輕易地分類。

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

理論上,由於train set是有限的,當你把data投射到無限維度的空間上是一定可以在train set上完美分類的,至於在test set上當然就呵呵了。

記得要選取合適(試試各種)kernel function來“避免過擬合”。

【王贇Maigo的回答(46票)】:

我來舉一個核函數把低維空間映射到高維空間的例子。

下面這張圖位於第一、二象限內。我們關注紅色的門,以及“北京四合院”這幾個字下面的紫色的字母。我們紅色的門上的點看成是“+”數據,紫色字母上的點看成是“-”數據,它們的橫、縱座標是兩個特徵。顯然,在這個二維空間內,“+”“-”兩類數據不是線性可分的。

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

我們現在考慮核函數

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

,即“內積平方”。

這裏面

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

是二維空間中的兩個點。

這個核函數對應着一個二維空間到三維空間的映射,它的表達式是:

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

可以驗證,

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

在P這個映射下,原來二維空間中的圖在三維空間中的像是這個樣子:

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

(前後軸爲x軸,左右軸爲y軸,上下軸爲z軸)(前後軸爲x軸,左右軸爲y軸,上下軸爲z軸)

注意到綠色的平面可以完美地分割紅色和紫色,也就是說,兩類數據在三維空間中變成線性可分的了。

而三維中的這個判決邊界,再映射回二維空間中是這樣的:

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

這是一條雙曲線,它不是線性的。這是一條雙曲線,它不是線性的。

================================================

如上面的例子所說,核函數的作用就是隱含着一個從低維空間到高維空間的映射,而這個映射可以把低維空間中線性不可分的兩類點變成線性可分的。

當然,我舉的這個具體例子強烈地依賴於數據在原始空間中的位置。

事實中使用的核函數往往比這個例子複雜得多。它們對應的映射並不一定能夠顯式地表達出來;它們映射到的高維空間的維數也比我舉的例子(三維)高得多,甚至是無窮維的。這樣,就可以期待原來並不線性可分的兩類點變成線性可分的了。

================================================

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

1) 線性:

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

2) 多項式:

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

3) Radial basis function:

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

4) Sigmoid:

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

我舉的例子是多項式核函數中

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

的情況。

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

================================================

核函數要滿足的條件稱爲Mercer's condition

由於我以應用SVM爲主,對它的理論並不很瞭解,就不闡述什麼了。

使用SVM的很多人甚至都不知道這個條件,也不關心它;有些不滿足該條件的函數也被拿來當核函數用。

【知乎用戶的回答(4票)】:

關於這點的誤解實在太多。

核函數和映射沒有關係。核函數只是用來計算映射到高維空間之後的內積的一種簡便方法。

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

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

圍繞選項二,那麼我們所做的就是要在Feature Space套用原本在線性可分情況下的Input Space中使用過的優化方法,來找到那個Maximaizing Margin的超平面。原理機制一模一樣,是二次規劃,唯一不同是代入數據的不同,我們需要代入

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

而不是

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

。這時(在假設我們已知了如何選取mapping之後)纔有了核函數的概念。

具體Trick的意義,就是簡化計算二次規劃中間的一步內積計算。也即中間步驟有一步必須求得

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

,而我們可以定義核函數

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

,使得我們在不需要顯式計算每一個

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

、甚至不需要知道

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

長什麼樣的情況下,直接求出

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

的值來。

也就是說,核函數、內積、相似度這三個詞是等價的。因爲inner product其實就是一種similarity的度量。核函數和映射是無關的。

但爲什麼這麼多的認知中核函數是一種映射呢。一來這兩件事一般先後進行,所以常常被混爲一談。二來就像前面所述,核函數讓人們不需要知道

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

長什麼樣,不需要知道怎麼選取映射,就能夠算出內積。因此這常常被認作是一種implicit mapping。這是由Mercer Theorem保證的,即只要核函數滿足一定條件,那麼映射空間一定存在。

【NiYun的回答(4票)】:

核函數的本質就是高維空間中兩個向量的內積。

看到校友貼了Yiming Yang的Slides,我也貼一張701的Slide:

機器學習有很多關於核函數的說法,什麼是核函數?核函數的作用是什麼?

翻譯:核函數是在集合X上定義的函數K,從X^2映射到實數(應爲非負實數)翻譯:核函數是在集合X上定義的函數K,從X^2映射到實數(應爲非負實數)

核函數表示高維空間的一種內積。

核函數必須滿足對稱性(K(x,y) = K(y, x))及半正定性(K(x,y)>=0)。根據Mercer's_theorem,我們知道任何滿足對稱性和半正定型的函數都是某個高維希爾伯特空間的內積。

【知乎用戶的回答(1票)】:

支持向量機通俗導論(理解SVM的三層境界)

看一下這裏的核函數部分,感覺這個是中文資源中講的比較好的。

【ysdeng的回答(0票)】:

主要是svm用到了吧,其他的但不一定用核函數的方法

【bonnenuit的回答(0票)】:

借題問一下大神們,符合核函數映射之後線性可分的數據集對應的特徵,正負樣本在一維或者二維或者三維中(能可視化的前提下),數據集的分佈,最好是什麼樣的? 換句話說,正負樣本的數據在一維或者二維中交疊覆蓋在一起的(線性不可分),怎麼知道這個dataset能不能在覈函數映射之後線性可分?

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