1. 程式人生 > >機器學習有很多關於核函式的說法,核函式的定義和作用是什麼?

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

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

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

<img src="https://pic2.zhimg.com/50/19fa4052ea4f20651d25a1249f1e372d_hd.jpg" data-rawwidth="720" data-rawheight="342" class="origin_image zh-lightbox-thumb" width="720" data-original="https://pic2.zhimg.com/19fa4052ea4f20651d25a1249f1e372d_r.jpg">

我們現在考慮核函式K(v_1,v_2) = <v_1,v_2>^2,即“內積平方”。
這裡面v_1=(x_1,y_1), v_2=(x_2,y_2)是二維空間中的兩個點。

這個核函式對應著一個二維空間到三維空間的對映,它的表示式是:
P(x,y)=(x^2,\sqrt{2}xy,y^2)
可以驗證,
\begin{align} <P(v_1),P(v_2)> &= \, <(x_1^2,\sqrt{2}x_1y_1,y_1^2),(x_2^2,\sqrt{2}x_2y_2,y_2^2)> \\ &= \, x_1^2x_2^2 + 2x_1x_2y_1y_2+y_1^2y_2^2 \\ &= \, (x_1x_2 + y_1y_2)^2 \\ &= \, \, <v_1,v_2>^2 \\ &= \, K(v_1,v_2) \end{align}

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

&amp;lt;img src=&quot;https://pic2.zhimg.com/50/c5a7b1b83b844fc5fff033c9a0d5d601_hd.jpg&quot; data-rawwidth=&quot;720&quot; data-rawheight=&quot;342&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;720&quot; data-original=&quot;https://pic2.zhimg.com/c5a7b1b83b844fc5fff033c9a0d5d601_r.jpg&quot;&amp;gt;

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

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

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

&amp;lt;img src=&quot;https://pic3.zhimg.com/50/8f4a0d456fd9daf934c373024bf15a32_hd.jpg&quot; data-rawwidth=&quot;720&quot; data-rawheight=&quot;329&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;720&quot; data-original=&quot;https://pic3.zhimg.com/8f4a0d456fd9daf934c373024bf15a32_r.jpg&quot;&amp;gt;

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

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

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

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

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

在機器學習中常用的核函式,一般有這麼幾類,也就是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的情況。

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

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

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

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