機(jī)器學(xué)習(xí)技法--Kernel SVM

本文參考整理了Coursera上由NTU的林軒田講授的《機(jī)器學(xué)習(xí)技法》課程的第三章的內(nèi)容,主要介紹了Kernel SVM和核函數(shù)Kernel Function的基本概念及理論,主要介紹了Polynomial Kernal、Gaussian Kernel等內(nèi)容,文中的圖片都是截取自在線課程的講義。
歡迎到我的博客跟蹤最新的內(nèi)容變化。
如果有任何錯(cuò)誤或者建議,歡迎指出,感激不盡!
--

本系列文章已發(fā)三章,前兩章的地址如下:


經(jīng)過(guò)上一章的推導(dǎo),我們的SVM對(duì)偶問(wèn)題已經(jīng)是這個(gè)形式了

這個(gè)問(wèn)題的瓶頸在于矩陣Q的計(jì)算,而q(n,m)=ynymZn’*Zm,需要計(jì)算R(d)空間內(nèi)的兩個(gè)向量的內(nèi)積,并沒(méi)有擺脫d的依賴。

問(wèn)題:我們?nèi)绾尾拍芸焖儆?jì)算Zn’Zm=Φ(Xn)’Φ(Xm)呢?如何才能比O(d~)快呢?

從Z空間的角度看,這就是兩個(gè)d維向量的內(nèi)積,不可能快于O(d)。
但如果從原始的X空間來(lái)看,這一步其實(shí)是兩步:我們首先把原始資料(Xn,yn)通過(guò)轉(zhuǎn)換Φ映射到空間Z,再計(jì)算內(nèi)積。
如果我們能直接在X空間內(nèi)完成這兩步,應(yīng)該可以快于O(d~)。

Kernel Trick

簡(jiǎn)單的例子

首先考慮一個(gè)簡(jiǎn)單的二次多項(xiàng)式轉(zhuǎn)換Φ2,設(shè)原始X空間的維度是d,即原始資料有d個(gè)特征。

注意:為了簡(jiǎn)單起見(jiàn),該轉(zhuǎn)換函數(shù)同時(shí)包含了相同的x1*x2和x2*x1

我們嘗試推導(dǎo)直接在X空間內(nèi)完成以上兩步(映射、內(nèi)積)所對(duì)應(yīng)的函數(shù)是怎么樣的

我們?cè)赬空間內(nèi)任意選取兩個(gè)特征向量X和X’

發(fā)現(xiàn)Z空間內(nèi)的內(nèi)積,可以由X空間內(nèi)的內(nèi)積表達(dá)出來(lái)。

這樣我們不用先花O(d2)的力氣進(jìn)行轉(zhuǎn)換,再花O(d2)的力氣進(jìn)行內(nèi)積計(jì)算,我們可以直接先花O(d)的力氣算出在X空間內(nèi)的內(nèi)積,在計(jì)算中再把它平方就好了,這樣花費(fèi)的時(shí)間不過(guò)是O(d)的復(fù)雜度。

我們把這個(gè)“轉(zhuǎn)換”和“內(nèi)積”合二為一的函數(shù)叫做核函數(shù)(kernel function),所以某個(gè)特征轉(zhuǎn)換就對(duì)應(yīng)到某個(gè)kernel function,我們希望kernel function比較容易計(jì)算。

有了kernel function后,我們可以把求解SVM的對(duì)偶問(wèn)題時(shí),需要計(jì)算Zn’Zm的地方都換成kernel function表示的形式。

注意W可以由ynZn的α線性組合得到,W’Z同樣包含Zn’Z,因此也可以利用kernel function快速計(jì)算。

這種技巧就叫做kernel trick,它的核心是通過(guò)利用一個(gè)X空間內(nèi)的計(jì)算高效的kernel function的計(jì)算,來(lái)映射到經(jīng)過(guò)特征轉(zhuǎn)換到Z空間后的兩個(gè)向量的內(nèi)積結(jié)果。
由于核函數(shù)的計(jì)算是在X空間內(nèi)完成的,它就避免了對(duì)Z空間的高維度d~的依賴。

Kernel Hard-Margin SVM Algorithm

我們稱這種利用了kernel trick進(jìn)行高維度特征轉(zhuǎn)換的SVM為kernel SVM,它的一般求解過(guò)程如下:

它的時(shí)間復(fù)雜度

  1. 計(jì)算NN的矩陣Q,時(shí)間復(fù)雜度是O(N^2)O(kernel function)
  2. QP求解,只有N個(gè)變量,N+1個(gè)條件
  3. & 4. O(#SV)*O(kernel function) [#SV代表SV的數(shù)量]

因此,只要kernel function的求解和d無(wú)關(guān),可以很快算出來(lái),那么以上步驟就可以很快地、和d無(wú)關(guān)地計(jì)算出來(lái)。

所以,kernel SVM本質(zhì)上就是把原來(lái)SVM的瓶頸部分,利用了核函數(shù)這種計(jì)算上的便捷方法,從而避免了對(duì)d~的依賴的一種SVM,它同樣只需要支撐向量SV點(diǎn)就可以進(jìn)行新數(shù)據(jù)的預(yù)測(cè)。

多項(xiàng)式核

上一節(jié)中作為例子的二次多項(xiàng)式轉(zhuǎn)換并不是唯一的二次多項(xiàng)式轉(zhuǎn)換,下面介紹一些常用的多項(xiàng)式轉(zhuǎn)換及其對(duì)應(yīng)的核函數(shù)。

如果我們把所有的一次項(xiàng)都放縮√2倍,則



如果我們把二次項(xiàng)和一次項(xiàng)再一并進(jìn)行γ倍的放縮,則




這樣經(jīng)過(guò)適當(dāng)放縮后的多項(xiàng)式轉(zhuǎn)換的核函數(shù),其數(shù)學(xué)表達(dá)形式看起來(lái)更加整潔一點(diǎn),這是大家平常比較常用的一種形式,也比較容易延伸到更高次方的多項(xiàng)式。

其實(shí)放縮前的藍(lán)色的Φ2和放縮后的綠色的Φ2的特征轉(zhuǎn)換空間的能力是一樣的,它的縮放系數(shù)最終會(huì)被線性函數(shù)的W中的元素的放縮所包含,但它們確實(shí)是不同的轉(zhuǎn)換,最終算出來(lái)的形式不一樣,是因?yàn)樗鼈兌x了不同的內(nèi)積,在內(nèi)積空間中,不同的內(nèi)積,就代表不同的距離,不同的距離就有不同的幾何特性,對(duì)于SVM算出的Margin就不一樣,就可能會(huì)得到不同的邊界。

因?yàn)榫G色的Φ2比較簡(jiǎn)單,我們一般直接把它叫做K2,相對(duì)比較常用。

不同kernel的幾何表現(xiàn)

因此不同的二次多項(xiàng)式轉(zhuǎn)換,g(svm)可能不同,支撐向量SVs也不同。

在學(xué)習(xí)之前,很難說(shuō)究竟哪一個(gè)更好。

因此,kernel的改變,同時(shí)就意味著margin距離的幾何定義的改變。

我們需要選擇kernel,就像之前對(duì)轉(zhuǎn)換Φ做選擇,因?yàn)檗D(zhuǎn)換現(xiàn)在已經(jīng)包含在kernel里面了。

常用一般多項(xiàng)式核

對(duì)于原來(lái)的K2,我們還可以加一個(gè)自由度ζ,來(lái)表示常數(shù)項(xiàng)的放縮。

對(duì)應(yīng)的轉(zhuǎn)換為

推廣到3次方、4次方......Q次方

我們將轉(zhuǎn)換ΦQ嵌入到(γ,ζ)這些參數(shù)的選擇中,這樣就允許我們計(jì)算非常高次的多項(xiàng)式轉(zhuǎn)換的空間中的large-margin問(wèn)題,該問(wèn)題不再依賴于轉(zhuǎn)換空間的維度d~。

SVM + 多項(xiàng)式核 = 多項(xiàng)式SVM

注意:有時(shí)候轉(zhuǎn)換比較簡(jiǎn)單時(shí),直接求解原始的SVM問(wèn)題反而更加簡(jiǎn)單有效,而不必利用kernel求解SVM的對(duì)偶問(wèn)題,比如linear kernel K1,我們之前說(shuō)過(guò),應(yīng)該首先嘗試簡(jiǎn)單的線性模型。

高斯核

我們之前使用kernel function來(lái)將到Z空間的轉(zhuǎn)換和內(nèi)積合成一步,形成了一個(gè)X空間內(nèi)的函數(shù),從而節(jié)省了力氣,如果我們能夠找到一個(gè)映射到無(wú)限多維的Z空間的核函數(shù),是不是意味著我們可以使用無(wú)限多維的轉(zhuǎn)換呢?

一維特征

我們先考慮簡(jiǎn)單情況,假設(shè)輸入特征只有一個(gè)維度,即X=(x),我們考慮一個(gè)特別的函數(shù)K(x,x’)

注意第三步用到了泰勒公式在0點(diǎn)處的展開(kāi),即麥克勞林展開(kāi),e^x的麥克勞林展開(kāi)如下:

根據(jù)泰勒公式



這樣我們就得到K(x,x’)就是經(jīng)過(guò)這個(gè)無(wú)限多維轉(zhuǎn)換Φ(x)的核函數(shù)。

一般的高斯核

更一般地,X有多個(gè)維度,有γ放縮的高斯函數(shù)都可以這樣表達(dá)核函數(shù)

RBF核

我們來(lái)觀察一下Gaussian SVM的Hypothesis是什么形式

不難發(fā)現(xiàn)g(svm)是很多 中心在支撐向量SV Xn 上面的高斯函數(shù)的線性組合。
因此,很多人也把高斯核叫做Radial Basis Function (輻射狀(類似高斯函數(shù)的形狀)的基函數(shù)(用來(lái)作線性組合的函數(shù)) Kernel,即RBF Kernel。

因此,Gaussian SVM就是找到對(duì)中心在Xn上的高斯函數(shù)進(jìn)行線性組合的系數(shù)αn,并滿足在無(wú)限多維空間里面最大margin的要求。

高斯SVM的幾何表現(xiàn)

γ變大,相當(dāng)于高斯函數(shù)的標(biāo)準(zhǔn)差σ變小,Gaussians就變得尖了,線性組合后曲線就會(huì)不均勻,變得不平滑甚至產(chǎn)生孤島。

雖然有l(wèi)arge margin的保證可以盡量避免overfit,但如果γ選取的不好(過(guò)大),還是可能overfit。

因此,使用Gaussian SVM時(shí)候,要慎重選擇參數(shù)γ,通常不建議使用太大的γ。

無(wú)限大的γ

如果γ->∞,那么K(x,x')=exp(-γ|x-x'|^2)會(huì)趨向于什么呢?

如果x=x',則不論γ為多少,K(x,x')=1。
如果x!=x',則當(dāng)γ->∞時(shí),K(x,x')->0。

因此K(limit)好像是一個(gè)脈沖函數(shù),它是當(dāng)γ趨向于∞時(shí),高斯函數(shù)變得尖尖的極端情況。

因此K(limit)=[[ x=x' ]] ,[[ ]]表示布爾運(yùn)算。

不同Kernel的優(yōu)缺點(diǎn)

linear kernel

優(yōu)點(diǎn):

  1. 簡(jiǎn)單、安全,應(yīng)該首先嘗試
  2. 有專門針對(duì)primal問(wèn)題設(shè)計(jì)的QP Solver,比較快,沒(méi)必要解對(duì)偶問(wèn)題
  3. 模型可解釋性好,W和支撐向量SV可以告訴我們模型認(rèn)為哪些feature或者data point是重要的。

缺點(diǎn):

  1. 應(yīng)用場(chǎng)所有限,如果數(shù)據(jù)不是線性可分,就不可用

Polynomial Kernel

優(yōu)點(diǎn):

  1. 比linear的應(yīng)用限制更少,可以解決non-linear separable的數(shù)據(jù)
  2. 可以通過(guò)Q很強(qiáng)地控制模型的物理意義,比如你知道數(shù)據(jù)的關(guān)系是幾次方,則可以直接通過(guò)Q來(lái)表達(dá)這種信息。

缺點(diǎn):

  1. kernel function的計(jì)算在數(shù)值上有困難,當(dāng)Q變大時(shí)
* 如果|ξ+γX’X'|<1,則K->0
* 如果|ξ+γX’X'|>1,則K->big
  1. 有三個(gè)參數(shù)(γ,ξ,Q)需要選擇,選擇上比較困難

因此,Polynomial Kernel通常只會(huì)用在你已經(jīng)大概知道要用的Q是多少,且Q不是很大。
有時(shí),當(dāng)Q比較小時(shí),直接把Z空間展開(kāi),解primal SVM也很有效率。

Gaussian Kernel

優(yōu)點(diǎn):

  1. 比linear/poly都更加powerful
  2. kernel function的范圍在[0,1],因此數(shù)值計(jì)算上的困難度比poly要低
  3. 只有一個(gè)參數(shù)γ需要選擇,比poly在參數(shù)選擇上更加簡(jiǎn)單

缺點(diǎn):

  1. 比較難于解釋--沒(méi)有計(jì)算出來(lái)W
  2. 比linear要更慢
  3. 過(guò)于powerful,容易o(hù)verfit

Gaussian Kernel是最常用的SVM Kernel之一,但是使用時(shí)要小心選擇參數(shù)。

其他合理的Kernels

Kernel代表什么?

Kernel代表內(nèi)積,其實(shí)就是代表Z空間內(nèi)的兩個(gè)向量Φ(x)和Φ(x’)的相似性,因此我們可以直接從相似性衡量的效果出發(fā),定義出自己的Kernel。

但并不是所有相似性衡量都可以是Kernel,需要數(shù)學(xué)上證明。

Mercer's Condition

Valid Kernel的必要條件:

  • 對(duì)稱矩陣,因?yàn)橄蛄績(jī)?nèi)積是對(duì)稱的
  • 考慮矩陣K,其中Kij=K(Xi,Xj)

K = Z*Z’,是兩個(gè)Z矩陣的相乘,根據(jù)線性代數(shù)的理論,K一定是半正定(positive semi-definite)的。

以上兩個(gè)條件,被數(shù)學(xué)家證明還是充分條件,這兩個(gè)條件是否滿足就代表著你定義的kernel function是否合法,這兩個(gè)條件就叫做Mercer's Condition。

定義自己的kernel雖然可能,但是很難。


我們目前從SVM的Primal問(wèn)題推導(dǎo)到了Kernel,但是還沒(méi)有解決如果Z空間內(nèi)的數(shù)據(jù)點(diǎn)不是linear-separable的問(wèn)題,我們堅(jiān)持所有的OO和XX必須用一個(gè)超平面完美分割,這樣可能會(huì)造成問(wèn)題,比如模型可能去fit Noise等等,容易過(guò)擬合,我們能否把像Gaussian SVM里面的這種overfitting的情形再用一些方式控制解決,這需要將目前的Hard Margin改為Soft Margin,允許一些點(diǎn)可以出錯(cuò),我們將在下一章探討Soft Margin SVM的問(wèn)題。

Mind Map Summary

有關(guān)Soft-Margin SVM及更多機(jī)器學(xué)習(xí)算法相關(guān)的內(nèi)容將在日后的幾篇文章中分別給出,敬請(qǐng)關(guān)注!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容