1. 程式人生 > >機器學習中的核函式與核方法(是什麼?為什麼?怎麼做?)

機器學習中的核函式與核方法(是什麼?為什麼?怎麼做?)

我們在學習機器學習的時候,總是會看到一個概念——核,然後看到一堆公式。但是為什麼要核呢?核到底是啥玩意?雲裡霧裡。接下來,我們將要把“核”這個東西的神祕面紗一點點揭開。

一、什麼是“核函式”

我們都知道,機器學習(神經網路)的一個很重要的目的,就是將資料分類。我們想象下面這個資料(圖1),在二維空間(特徵表示為\small x_1\small x_2)中隨機分佈的兩類資料(用圓圈和叉叉表示)。

如果我們想要將這兩類資料進行分類,那麼分類的邊界將會是一個橢圓:

\small \frac{x_1^2}{a_1}+\frac{x_2^2}{a_2}=1

但是如果我們可以通過一個對映,將資料的特徵\small (x_1,x_2)通過某個非線性對映\small \phi對映到三維空間,其特徵表示為\small (z_1,z_2,z_3),並且對映關係為\small (z_1,z_2,z_3)==\phi (x_1,x_2)=(x_1^2,2^{1/2}x_1y_1,x_2^2)),那麼我們是不是就可以用一個平面來將其分類,也即是將上述橢圓的x特徵換成z特徵:

\small \frac{z_1}{a_1}+0\cdot z_2+\frac{z_3}{a_2}=1

其實這個對映,就是將一個空間中的特徵轉換到另外一個空間,這就是空間轉換(對映)的意義,即可以將原來線性不好分的資料轉換到另外一個空間,在這個空間中可以用一個超平面線性可分。

在機器學習中,我們要用到內積運算。而在對映後的高維空間中,內積往往是很不好求解的。所以,我們能不能找到在低維空間中的某個運算,恰好等於高維空間中的內積運算呢?

設在原空間中有兩個點\small (x_1,x_2)\small (x_1^{'},x_2^{'}),對映到高維空間中變成\small (z_1,z_2,z_3)\small (z_1^{'},z_2^{'},z_3^{'}),我們來看這個例子中的高維空間的內積運算:

\small <(z_1,z_2,z_3),(z_1^{'},z_2^{'},z_3^{'})> =<(x_1^2,2^{1/2}x_1x_2,x_2^2),(x_1^{'}^2,2^{1/2}x_1^{'}x_2^{'},x_2^{'}^2)> =(<x,x^{'}>)^2

我們就將低維空間中的這個對於內積的運算定義為核函式\small \kappa (x,x^{'})=(<x,x^{'}>)^2。換句話說,核函式就是低維空間中的內積的某個函式,或者寫成\small \kappa (x,x^{'})=g(<x,x^{'}>),因為在別的例子中,有可能不是內積的平方。即核函式就等於就是高維空間的內積。

二、為什麼要用核函式

因為在機器學習中,我們求解的過程要用到內積,而變換後的高維空間的內積我們不好求,所以我們定義了這個核函式,可以把高維空間的內積運算轉化成內為空間的某些運算,這樣求起來不是很簡單嗎?

換句話說,如果我們有了核函式,我們就不再需要知道那個對映\small \phi到底是個什麼鬼,我們就可以直接通過核函式,就可以求導高維空間的內積了,從而可以計算出高維空間中兩個資料點之間的距離和角度。

三、怎麼用?(一個簡單的分類例子)

現在我們假設,有N個數據{\small {(x_1,y_1),(x_2,y_2),...,(x_N,y_N)}},其中\small x_i=(x_{i1},x_{i2},...,x_{ip})是第i個數據的p維特徵,\small y_i是第i個數據的分類標籤,現將其對映到高維空間變成\small [{(\phi(x_1),y_1),(\phi(x_2),y_2),...,(\phi(x_N),y_N)],而在這個空間中,有兩個類別,所以標籤可以假定為+和-,其中每一類的樣本個數為\small n_+\small n_-。正樣本的中心點\small C_+=\frac{1}{n_+}\sum_{y_i=+}\phi( x_i),負樣本的中心點\small C_-=\frac{1}{n_-}\sum_{y_i=-} \phi(x_i),從\small C_-\small C_+有一條差向量\small w=C_+-C_-,而w的中心點為C,所以在C點垂直於w的超平面就是兩類的分類邊界。

而想要把某個資料\small \phi(x)分類為+的依據為:從C點到樣本點的向量差與w向量的夾角應該小於90°,也即:\small 0<cos\theta<1;反之,\small \small 0>cos\theta>-1。即,當內積為正,那就說明在分類1,內積為負,就說明在分類2。即:

\small y=sgn(<\phi(x)-C,w>)=sgn(w^{T}\phi(x)-w^{T}C)

於是我們來\small cos\theta的表示式:

\small cos\theta=\frac{<\phi(x)-C,w>}{|\phi(x)-C||w|} =\frac{1}{a}<\phi(x)-C,w>= \frac{1}{a}(<\phi(x),w>-<C,w>)

 

(PS:說到這,你應該知道為什麼分類需要內積了吧?因為內積的正負代表了資料點是位於分類邊界的正方向還是負方向,從而實現分類。)

其中:

\small w=C_+-C_-=\frac{1}{n_+}\sum_{y_i=+}\phi( x_i) -\frac{1}{n_-}\sum_{y_i=-}\phi( x_i)

\small C=\frac{1}{2}(C_++C_-)=\frac{1}{2}(\frac{1}{n_+}\sum_{y_i=+}\phi( x_i) -\frac{1}{n_-}\sum_{y_i=-}\phi( x_i))

\small <\phi(x),w>=<\phi(x),\tfrac{1}{n_{+}} \sum_{y_{i}\in +}\phi(x_{i})- \tfrac{1}{n_{-}} \sum_{y_{i}\in -}\phi(x_{i})> =\tfrac{1}{n_{+}} \sum_{y_{i}\in +}<\phi(x),\phi(x_{i})>+ \tfrac{1}{n_{-}}\sum_{y_{i}\in -}<\phi(x),\phi(x_{i})> =\tfrac{1}{n_{+}} \sum_{y_{i}\in +}\kappa (x,x_{i})+ \tfrac{1}{n_{-}}\sum_{y_{i}\in -}\kappa (x,x_{i})

\small <C,w>=

後面的就不繼續寫了,化簡形式都一樣,即:我們就可以把高維空間的內積,改寫成低維空間的核函式的形式,這樣在不知道對映\small \phi是個什麼鬼的情況下嗎,也可以輕鬆地進行分類工作了。

四、補充一點

1. 有限半正半定:給定任意有限 n個點(x1~xn),求解其矩陣是正定的:

\small \kappa =\begin{bmatrix} \kappa(x_1,x_1) & ... &\kappa(x_1.x_n) \\ ...& ... & ...\\ \kappa(x_n,x_1)&... & \kappa(x_n,x_n) \end{bmatrix} \geq 0

五. 核函式與機器學習的關係

我們在機器學習中,經常看到\small f(x)=w^Tx+b,而我們看上面的公式\small y=sgn(<\phi(x)-C,w>)=sgn(w^{T}\phi(x)-w^{T}C),是不是感覺到很熟悉?